ROHC compression/decompression library
rfc5225.h
Go to the documentation of this file.
1 /*
2  * Copyright 2018 Viveris Technologies
3  *
4  * This library is free software; you can redistribute it and/or
5  * modify it under the terms of the GNU Lesser General Public
6  * License as published by the Free Software Foundation; either
7  * version 2.1 of the License, or (at your option) any later version.
8  *
9  * This library is distributed in the hope that it will be useful,
10  * but WITHOUT ANY WARRANTY; without even the implied warranty of
11  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12  * Lesser General Public License for more details.
13  *
14  * You should have received a copy of the GNU Lesser General Public
15  * License along with this library; if not, write to the Free Software
16  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
17  */
18 
19 /**
20  * @file rfc5225.h
21  * @brief ROHC packets for the ROHCv2 profiles defined in RFC5225
22  * @author Didier Barvaux <didier.barvaux@toulouse.viveris.com>
23  */
24 
25 #ifndef ROHC_PROTOCOLS_RFC5225_H
26 #define ROHC_PROTOCOLS_RFC5225_H
27 
28 #include <stdint.h>
29 
30 #ifdef __KERNEL__
31 # include <endian.h>
32 #else
33 # include "config.h" /* for WORDS_BIGENDIAN */
34 #endif
35 
36 
37 #define ROHC_PACKET_TYPE_IR 0xFD
38 #define ROHC_PACKET_TYPE_CO_REPAIR 0xFB
39 
40 
41 
42 /************************************************************************
43  * Compressed IPv4 header *
44  ************************************************************************/
45 
46 /**
47  * @brief The IPv4 static part
48  *
49  * See RFC5225 page 61
50  */
51 typedef struct
52 {
53 #if WORDS_BIGENDIAN == 1
54  uint8_t version_flag:1;
55  uint8_t innermost_ip:1;
56  uint8_t reserved:6;
57 #else
58  uint8_t reserved:6;
59  uint8_t innermost_ip:1;
60  uint8_t version_flag:1;
61 #endif
62  uint8_t protocol;
63  uint32_t src_addr;
64  uint32_t dst_addr;
65 } __attribute__((packed)) ipv4_static_t;
66 
67 
68 /**
69  * @brief The IPv4 dynamic part for the innermost IP header of the IP-only profile,
70  * IP-ID not present
71  *
72  * See RFC5225 page 61-62
73  */
74 typedef struct
75 {
76 #if WORDS_BIGENDIAN == 1
77  uint8_t reserved:3;
78  uint8_t reorder_ratio:2;
79  uint8_t df:1;
80  uint8_t ip_id_behavior_innermost:2;
81 #else
83  uint8_t df:1;
84  uint8_t reorder_ratio:2;
85  uint8_t reserved:3;
86 #endif
87  uint8_t tos_tc;
88  uint8_t ttl_hopl;
89  uint16_t msn;
90 } __attribute__((packed)) ipv4_endpoint_innermost_dynamic_noipid_t;
91 
92 
93 /**
94  * @brief The IPv4 dynamic part for the innermost IP header of the IP-only profile,
95  * IP-ID present
96  *
97  * See RFC5225 page 61-62
98  */
99 typedef struct
100 {
101 #if WORDS_BIGENDIAN == 1
102  uint8_t reserved:3;
103  uint8_t reorder_ratio:2;
104  uint8_t df:1;
105  uint8_t ip_id_behavior_innermost:2;
106 #else
108  uint8_t df:1;
109  uint8_t reorder_ratio:2;
110  uint8_t reserved:3;
111 #endif
112  uint8_t tos_tc;
113  uint8_t ttl_hopl;
114  uint16_t ip_id_innermost;
115  uint16_t msn;
116 } __attribute__((packed)) ipv4_endpoint_innermost_dynamic_ipid_t;
117 
118 
119 /**
120  * @brief The regular IPv4 dynamic part, IP-ID not present
121  *
122  * The IPv4 dynamic part for:
123  * - the innermost IP header of all the ROHCv2 profiles except IP-only
124  * - any outer IP header
125  *
126  * See RFC5225 page 62
127  */
128 typedef struct
129 {
130 #if WORDS_BIGENDIAN == 1
131  uint8_t reserved:5;
132  uint8_t df:1;
133  uint8_t ip_id_behavior:2;
134 #else
135  uint8_t ip_id_behavior:2;
136  uint8_t df:1;
137  uint8_t reserved:5;
138 #endif
139  uint8_t tos_tc;
140  uint8_t ttl_hopl;
141 } __attribute__((packed)) ipv4_regular_dynamic_noipid_t;
142 
143 
144 /**
145  * @brief The regular IPv4 dynamic part, IP-ID present
146  *
147  * The IPv4 dynamic part for:
148  * - the innermost IP header of all the ROHCv2 profiles except IP-only
149  * - any outer IP header
150  *
151  * See RFC5225 page 62
152  */
153 typedef struct
154 {
155 #if WORDS_BIGENDIAN == 1
156  uint8_t reserved:5;
157  uint8_t df:1;
158  uint8_t ip_id_behavior:2;
159 #else
160  uint8_t ip_id_behavior:2;
161  uint8_t df:1;
162  uint8_t reserved:5;
163 #endif
164  uint8_t tos_tc;
165  uint8_t ttl_hopl;
166  uint16_t ip_id;
167 } __attribute__((packed)) ipv4_regular_dynamic_ipid_t;
168 
169 
170 /**
171  * @brief The IPv4 dynamic part for any outer IP header, IP-ID not present
172  *
173  * See RFC5225 page 62
174  */
176 
177 
178 /**
179  * @brief The IPv4 dynamic part for any outer IP header, IP-ID present
180  *
181  * See RFC5225 page 62
182  */
184 
185 
186 /************************************************************************
187  * Compressed IPv6 base header and its extension headers *
188  ************************************************************************/
189 
190 /**
191  * @brief The IPv6 static part, null flow_label encoded with 1 bit
192  *
193  * See RFC5225 page 58-59
194  */
195 typedef struct
196 {
197 #if WORDS_BIGENDIAN == 1
198  uint8_t version_flag:1;
199  uint8_t innermost_ip:1;
200  uint8_t reserved1:1;
201  uint8_t flow_label_enc_discriminator:1;
202  uint8_t reserved2:4;
203 #else
204  uint8_t reserved2:4;
206  uint8_t reserved1:1;
207  uint8_t innermost_ip:1;
208  uint8_t version_flag:1;
209 #endif
210  uint8_t next_header;
211  uint32_t src_addr[4];
212  uint32_t dst_addr[4];
213 } __attribute__((packed)) ipv6_static_nofl_t;
214 
215 
216 /**
217  * @brief The IPv6 static part, flow_label encoded with 1+20 bit
218  *
219  * See RFC5225 page 58-59
220  */
221 typedef struct
222 {
223 #if WORDS_BIGENDIAN == 1
224  uint8_t version_flag:1;
225  uint8_t innermost_ip:1;
226  uint8_t reserved:1;
227  uint8_t flow_label_enc_discriminator:1;
228  uint8_t flow_label_msb:4;
229 #else
230  uint8_t flow_label_msb:4;
232  uint8_t reserved:1;
233  uint8_t innermost_ip:1;
234  uint8_t version_flag:1;
235 #endif
236  uint16_t flow_label_lsb;
237  uint8_t next_header;
238  uint32_t src_addr[4];
239  uint32_t dst_addr[4];
240 } __attribute__((packed)) ipv6_static_fl_t;
241 
242 
243 /**
244  * @brief The IPv6 dynamic part for the innermost IP header of the IP-only profile
245  *
246  * See RFC5225 page 59
247  */
248 typedef struct
249 {
250  uint8_t tos_tc;
251  uint8_t ttl_hopl;
252 #if WORDS_BIGENDIAN == 1
253  uint8_t reserved:6;
254  uint8_t reorder_ratio:2;
255 #else
256  uint8_t reorder_ratio:2;
257  uint8_t reserved:6;
258 #endif
259  uint16_t msn;
260 } __attribute__((packed)) ipv6_endpoint_dynamic_t;
261 
262 
263 /**
264  * @brief The IPv6 dynamic part for any outer IP header of the IP-only profile
265  * and all IP headers of the other ROHCv2 profiles
266  *
267  * See RFC5225 page 59
268  */
269 typedef struct
270 {
271  uint8_t tos_tc;
272  uint8_t ttl_hopl;
273 } __attribute__((packed)) ipv6_regular_dynamic_t;
274 
275 
276 /************************************************************************
277  * Compressed UDP header *
278  ************************************************************************/
279 
280 /**
281  * @brief The UDP static part
282  *
283  * See RFC5225 page 63
284  */
285 typedef struct
286 {
287  uint16_t src_port; /**< The UDP source port */
288  uint16_t dst_port; /**< The UDP destination port */
289 } __attribute__((packed)) udp_static_t;
290 
291 
292 /**
293  * @brief The UDP endpoint dynamic part
294  *
295  * See RFC5225 page 63
296  */
297 typedef struct
298 {
299  uint16_t checksum; /**< The UDP checksum */
300  uint16_t msn; /**< The Master Sequence Number (MSN) */
301 
302 #if WORDS_BIGENDIAN == 1
303  uint8_t reserved:6; /**< reserved field, shall be zero */
304  uint8_t reorder_ratio:2; /**< The reorder_ratio use for the transmission */
305 #else
306  uint8_t reorder_ratio:2;
307  uint8_t reserved:6;
308 #endif
309 } __attribute__((packed)) udp_endpoint_dynamic_t;
310 
311 
312 /**
313  * @brief The UDP regular dynamic part
314  *
315  * See RFC5225 page 63
316  */
317 typedef struct
318 {
319  uint16_t checksum; /**< The UDP checksum */
320 } __attribute__((packed)) udp_regular_dynamic_t;
321 
322 
323 /**
324  * @brief The UDP irregular chain with checksum
325  *
326  * See RFC5225 page 64
327  */
328 typedef struct
329 {
330  uint16_t checksum; /**< The UDP checksum */
331 } __attribute__((packed)) udp_with_checksum_irregular_t;
332 
333 
334 /************************************************************************
335  * Compressed ESP header *
336  ************************************************************************/
337 
338 /**
339  * @brief The ESP static part
340  *
341  * See RFC5225 page 68
342  */
343 typedef struct
344 {
345  uint32_t spi; /**< The ESP Security Parameters Index (SPI) */
346 } __attribute__((packed)) esp_static_t;
347 
348 
349 /**
350  * @brief The ESP dynamic part
351  *
352  * See RFC5225 page 68
353  */
354 typedef struct
355 {
356  uint32_t sequence_number; /**< The ESP Sequence Number (SN) */
357 #if WORDS_BIGENDIAN == 1
358  uint8_t reserved:6; /**< reserved field, shall be zero */
359  uint8_t reorder_ratio:2; /**< The reorder_ratio use for the transmission */
360 #else
361  uint8_t reorder_ratio:2;
362  uint8_t reserved:6;
363 #endif
364 } __attribute__((packed)) esp_dynamic_t;
365 
366 
367 /************************************************************************
368  * Compressed RTP header *
369  ************************************************************************/
370 
371 /**
372  * @brief The RTP static part
373  *
374  * See RFC5225 page 65
375  */
376 typedef struct
377 {
378  uint32_t ssrc; /**< The RTP SSRC field */
379 } __attribute__((packed)) rtp_static_t;
380 
381 
382 /**
383  * @brief The RTP dynamic part
384  *
385  * See RFC5225 page 65
386  */
387 typedef struct
388 {
389 #if WORDS_BIGENDIAN == 1
390  uint8_t reserved:1; /**< reserved field, shall be zero */
391  uint8_t reorder_ratio:2; /**< The reorder_ratio use for the transmission */
392  uint8_t list_present:1; /**< Whether optional CSRC list is present or not */
393  uint8_t tss_indicator:1; /**< Whether optional ts_stride is present or not */
394  uint8_t tis_indicator:1; /**< Whether optional time_stride is present or not */
395  uint8_t pad_bit:1; /**< The RTP padding bit */
396  uint8_t extension:1; /**< The RTP extension bit */
397 #else
398  uint8_t extension:1;
399  uint8_t pad_bit:1;
400  uint8_t tis_indicator:1;
401  uint8_t tss_indicator:1;
402  uint8_t list_present:1;
403  uint8_t reorder_ratio:2;
404  uint8_t reserved:1;
405 #endif
406 #if WORDS_BIGENDIAN == 1
407  uint8_t marker:1; /**< The RTP Marker bit */
408  uint8_t payload_type:7; /**< The RTP Payload Type (PT) */
409 #else
410  uint8_t payload_type:7;
411  uint8_t marker:1;
412 #endif
413  uint16_t sequence_number; /**< The RTP sequence number */
414  uint32_t timestamp; /**< The RTP Timestamp */
415 } __attribute__((packed)) rtp_dynamic_t;
416 
417 
418 /************************************************************************
419  * Compressed packet formats *
420  ************************************************************************/
421 
422 /**
423  * @brief The CRC part of the co_repair packet format
424  *
425  * See RFC5225 §6.8.2.2 page 44
426  */
427 typedef struct
428 {
429 #if WORDS_BIGENDIAN == 1
430  uint8_t r1:1; /**< Reserved field, must be 0 */
431  uint8_t header_crc:7; /**< CRC-7 over uncompressed headers */
432  uint8_t r2:5; /**< Reserved field, must be 0 */
433  uint8_t ctrl_crc:3; /**< CRC-3 over control fields */
434 #else
435  uint8_t header_crc:7;
436  uint8_t r1:1;
437  uint8_t ctrl_crc:3;
438  uint8_t r2:5;
439 #endif
440 } __attribute__((packed)) co_repair_crc_t;
441 
442 
443 /**
444  * @brief The pt_0_crc3 packet format
445  *
446  * See RFC5225 page 91
447  */
448 typedef struct
449 {
450 #if WORDS_BIGENDIAN == 1
451  uint8_t discriminator:1; /**< '0' [ 1 ] */
452  uint8_t msn:4; /**< msn_lsb(4) [ 4 ] */
453  uint8_t header_crc:3; /**< crc3(THIS.UVALUE, THIS.ULENGTH) [ 3 ] */
454 #else
455  uint8_t header_crc:3;
456  uint8_t msn:4;
457  uint8_t discriminator:1;
458 #endif
459 } __attribute__((packed)) pt_0_crc3_t;
460 
461 
462 /**
463  * @brief The pt_0_crc7 packet format
464  *
465  * See RFC5225 page 91
466  */
467 typedef struct
468 {
469 #if WORDS_BIGENDIAN == 1
470  uint8_t discriminator:3; /**< '100' [ 3 ] */
471  uint8_t msn_1:5; /**< 5 MSB of msn_lsb(6) [ 5 ] */
472  uint8_t msn_2:1; /**< last LSB of msn_lsb(6) [ 6 ] */
473  uint8_t header_crc:7; /**< crc7(THIS.UVALUE, THIS.ULENGTH) [ 7 ] */
474 #else
475  uint8_t msn_1:5;
476  uint8_t discriminator:3;
477  uint8_t header_crc:7;
478  uint8_t msn_2:1;
479 #endif
480 } __attribute__((packed)) pt_0_crc7_t;
481 
482 
483 /**
484  * @brief The pt_1_seq_id packet format
485  *
486  * See RFC5225 page 91
487  */
488 typedef struct
489 {
490 #if WORDS_BIGENDIAN == 1
491  uint8_t discriminator:3;/**< '101' [ 3 ] */
492  uint8_t header_crc:3; /**< crc3(THIS.UVALUE, THIS.ULENGTH) [ 3 ] */
493  uint8_t msn_1:2; /**< 2 MSB of msn_lsb(6) [ 2 ] */
494  uint8_t msn_2:4; /**< 4 LSB of msn_lsb(6) [ 4 ] */
495  uint8_t ip_id:4; /**< ip_id_lsb(ip_id_behavior.UVALUE, 4) [ 4 ] */
496 #else
497  uint8_t msn_1:2;
498  uint8_t header_crc:3;
499  uint8_t discriminator:3;
500  uint8_t ip_id:4;
501  uint8_t msn_2:4;
502 #endif
503 } __attribute__((packed)) pt_1_seq_id_t;
504 
505 
506 /**
507  * @brief The pt_2_seq_id packet format
508  *
509  * See RFC5225 page 91
510  */
511 typedef struct
512 {
513 #if WORDS_BIGENDIAN == 1
514  uint32_t discriminator:3;/**< '110' [ 3 ] */
515  uint32_t ip_id_1:5; /**< 5 MSB of ip_id_lsb(ip_id_behavior.UVALUE, 6) [ 5 ] */
516  uint32_t ip_id_2:1; /**< 1 LSB of ip_id_lsb(ip_id_behavior.UVALUE, 6) [ 1 ] */
517  uint32_t header_crc:7; /**< crc7(THIS.UVALUE, THIS.ULENGTH) [ 7 ] */
518  uint32_t msn:8; /**< msn_lsb(8) [ 8 ] */
519 #else
520  uint8_t ip_id_1:5;
521  uint8_t discriminator:3;
522  uint8_t header_crc:7;
523  uint8_t ip_id_2:1;
524  uint8_t msn:8;
525 #endif
526 } __attribute__((packed)) pt_2_seq_id_t;
527 
528 
529 /**
530  * @brief The fixed part of the co_common packet format
531  *
532  * See RFC5225 page 90/91
533  */
534 typedef struct
535 {
536 #if WORDS_BIGENDIAN == 1
537  uint8_t discriminator:8; /**< '11111010' [ 8 ] */
538  uint8_t ip_id_ind:1; /**< irregular(1) [ 1 ] */
539  uint8_t header_crc:7; /**< crc7(THIS.UVALUE, THIS.ULENGTH) [ 7 ] */
540  uint8_t flags_ind:1; /**< irregular(1) [ 1 ] */
541  uint8_t ttl_hopl_ind:1; /**< irregular(1) [ 1 ] */
542  uint8_t tos_tc_ind:1; /**< irregular(1) [ 1 ] */
543  uint8_t reorder_ratio:2; /**< irregular(2) [ 2 ] */
544  uint8_t control_crc3:3; /**< control_crc3_encoding [ 3 ] */
545 #else
546  uint8_t discriminator:8; /**< '11111010' [ 8 ] */
547  uint8_t header_crc:7; /**< crc7(THIS.UVALUE, THIS.ULENGTH) [ 7 ] */
548  uint8_t ip_id_ind:1; /**< irregular(1) [ 1 ] */
549  uint8_t control_crc3:3; /**< 4 LSB of msn_lsb(6) [ 3 ] */
550  uint8_t reorder_ratio:2; /**< irregular(2) [ 2 ] */
551  uint8_t tos_tc_ind:1; /**< irregular(1) [ 1 ] */
552  uint8_t ttl_hopl_ind:1; /**< irregular(1) [ 1 ] */
553  uint8_t flags_ind:1; /**< irregular(1) [ 1 ] */
554 #endif
555 } __attribute__((packed)) co_common_base_t;
556 
557 
558 /**
559  * @brief The profile_2_3_4_flags_enc packet part
560  *
561  * See RFC5225 page 76
562  */
563 typedef struct
564 {
565 #if WORDS_BIGENDIAN == 1
566  uint8_t ip_outer_indicator:1; /**< irregular(1) [ 1 ] */
567  uint8_t df:1; /**< dont_fragment(ip_version) [ 1 ] */
568  uint8_t ip_id_behavior:2; /**< irregular(2) [ 2 ] */
569  uint8_t reserved:4; /**< compressed_value(4, 0) [ 4 ] */
570 #else
571  uint8_t reserved:4;
572  uint8_t ip_id_behavior:2;
573  uint8_t df:1;
575 #endif
576 } __attribute__((packed)) profile_2_3_4_flags_t;
577 
578 
579 #endif /* ROHC_PROTOCOLS_RFC5225_H */
580 
uint8_t reserved
Definition: rfc5225.h:110
uint8_t flow_label_enc_discriminator
Definition: rfc5225.h:231
uint8_t ip_id_1
Definition: rfc5225.h:520
The IPv4 dynamic part for the innermost IP header of the IP-only profile, IP-ID not present...
Definition: rfc5225.h:74
uint8_t msn_2
Definition: rfc5225.h:478
uint8_t df
Definition: rfc5225.h:161
uint32_t spi
Definition: rfc5225.h:345
uint8_t ttl_hopl
Definition: rfc5225.h:165
uint16_t src_port
Definition: rfc5225.h:287
uint8_t header_crc
Definition: rfc5225.h:435
uint8_t reorder_ratio
Definition: rfc5225.h:403
The UDP regular dynamic part.
Definition: rfc5225.h:317
uint8_t ip_id_behavior
Definition: rfc5225.h:572
uint8_t tos_tc
Definition: rfc5225.h:112
uint8_t version_flag
Definition: rfc5225.h:60
uint8_t payload_type
Definition: rfc5225.h:410
uint8_t header_crc
Definition: rfc5225.h:455
uint16_t msn
Definition: rfc5225.h:115
uint8_t tos_tc
Definition: rfc5225.h:164
uint8_t flags_ind
Definition: rfc5225.h:553
uint8_t header_crc
Definition: rfc5225.h:477
uint8_t innermost_ip
Definition: rfc5225.h:59
uint8_t protocol
Definition: rfc5225.h:62
uint8_t ip_id_behavior
Definition: rfc5225.h:135
uint8_t reorder_ratio
Definition: rfc5225.h:550
uint8_t tos_tc_ind
Definition: rfc5225.h:551
uint8_t version_flag
Definition: rfc5225.h:208
uint16_t flow_label_lsb
Definition: rfc5225.h:236
uint8_t ctrl_crc
Definition: rfc5225.h:437
uint8_t next_header
Definition: rfc5225.h:210
uint8_t df
Definition: rfc5225.h:573
uint8_t df
Definition: rfc5225.h:108
uint8_t reserved
Definition: rfc5225.h:58
uint8_t reserved
Definition: rfc5225.h:232
uint8_t marker
Definition: rfc5225.h:411
The IPv6 static part, null flow_label encoded with 1 bit.
Definition: rfc5225.h:195
uint8_t control_crc3
Definition: rfc5225.h:549
uint8_t discriminator
Definition: rfc5225.h:476
uint8_t reserved
Definition: rfc5225.h:362
uint16_t ip_id
Definition: rfc5225.h:166
The IPv6 dynamic part for any outer IP header of the IP-only profile and all IP headers of the other ...
Definition: rfc5225.h:269
The ESP static part.
Definition: rfc5225.h:343
uint8_t ttl_hopl
Definition: rfc5225.h:140
uint16_t msn
Definition: rfc5225.h:259
uint8_t discriminator
Definition: rfc5225.h:521
The pt_1_seq_id packet format.
Definition: rfc5225.h:488
uint8_t discriminator
Definition: rfc5225.h:457
uint8_t tis_indicator
Definition: rfc5225.h:400
uint8_t reorder_ratio
Definition: rfc5225.h:84
uint8_t msn_2
Definition: rfc5225.h:501
uint8_t tos_tc
Definition: rfc5225.h:87
uint8_t flow_label_enc_discriminator
Definition: rfc5225.h:205
uint8_t innermost_ip
Definition: rfc5225.h:233
uint8_t reserved
Definition: rfc5225.h:404
The CRC part of the co_repair packet format.
Definition: rfc5225.h:427
uint8_t msn
Definition: rfc5225.h:524
uint8_t flow_label_msb
Definition: rfc5225.h:230
uint8_t pad_bit
Definition: rfc5225.h:399
uint16_t checksum
Definition: rfc5225.h:330
uint8_t reorder_ratio
Definition: rfc5225.h:306
uint8_t discriminator
Definition: rfc5225.h:499
The ESP dynamic part.
Definition: rfc5225.h:354
uint8_t reserved
Definition: rfc5225.h:307
uint8_t header_crc
Definition: rfc5225.h:547
uint8_t innermost_ip
Definition: rfc5225.h:207
The fixed part of the co_common packet format.
Definition: rfc5225.h:534
uint8_t version_flag
Definition: rfc5225.h:234
uint8_t reserved1
Definition: rfc5225.h:206
uint16_t checksum
Definition: rfc5225.h:299
The IPv4 dynamic part for the innermost IP header of the IP-only profile, IP-ID present.
Definition: rfc5225.h:99
The pt_0_crc3 packet format.
Definition: rfc5225.h:448
ipv4_regular_dynamic_noipid_t ipv4_outer_dynamic_noipid_t
The IPv4 dynamic part for any outer IP header, IP-ID not present.
Definition: rfc5225.h:175
uint8_t ttl_hopl_ind
Definition: rfc5225.h:552
The IPv6 static part, flow_label encoded with 1+20 bit.
Definition: rfc5225.h:221
The pt_2_seq_id packet format.
Definition: rfc5225.h:511
uint8_t discriminator
Definition: rfc5225.h:546
uint8_t reserved
Definition: rfc5225.h:257
uint8_t reserved2
Definition: rfc5225.h:204
uint8_t msn_1
Definition: rfc5225.h:475
uint8_t ip_id_2
Definition: rfc5225.h:523
uint8_t reserved
Definition: rfc5225.h:137
uint8_t ip_id_ind
Definition: rfc5225.h:548
uint8_t reorder_ratio
Definition: rfc5225.h:361
The RTP dynamic part.
Definition: rfc5225.h:387
The pt_0_crc7 packet format.
Definition: rfc5225.h:467
uint16_t sequence_number
Definition: rfc5225.h:413
uint16_t msn
Definition: rfc5225.h:89
The regular IPv4 dynamic part, IP-ID not present.
Definition: rfc5225.h:128
uint8_t next_header
Definition: rfc5225.h:237
The IPv6 dynamic part for the innermost IP header of the IP-only profile.
Definition: rfc5225.h:248
uint8_t ip_id
Definition: rfc5225.h:500
uint8_t reserved
Definition: rfc5225.h:571
The IPv4 static part.
Definition: rfc5225.h:51
uint8_t df
Definition: rfc5225.h:83
uint16_t msn
Definition: rfc5225.h:300
uint8_t ip_outer_indicator
Definition: rfc5225.h:574
uint8_t ttl_hopl
Definition: rfc5225.h:88
uint8_t msn
Definition: rfc5225.h:456
The UDP static part.
Definition: rfc5225.h:285
The profile_2_3_4_flags_enc packet part.
Definition: rfc5225.h:563
uint8_t tos_tc
Definition: rfc5225.h:271
uint8_t ip_id_behavior_innermost
Definition: rfc5225.h:82
uint32_t timestamp
Definition: rfc5225.h:414
uint8_t ttl_hopl
Definition: rfc5225.h:113
uint8_t r1
Definition: rfc5225.h:436
The regular IPv4 dynamic part, IP-ID present.
Definition: rfc5225.h:153
uint8_t df
Definition: rfc5225.h:136
The UDP irregular chain with checksum.
Definition: rfc5225.h:328
uint8_t extension
Definition: rfc5225.h:398
uint8_t ip_id_behavior
Definition: rfc5225.h:160
ipv4_regular_dynamic_ipid_t ipv4_outer_dynamic_ipid_t
The IPv4 dynamic part for any outer IP header, IP-ID present.
Definition: rfc5225.h:183
uint8_t r2
Definition: rfc5225.h:438
uint8_t reorder_ratio
Definition: rfc5225.h:109
The RTP static part.
Definition: rfc5225.h:376
uint32_t dst_addr
Definition: rfc5225.h:64
uint16_t ip_id_innermost
Definition: rfc5225.h:114
uint32_t src_addr
Definition: rfc5225.h:63
uint8_t tss_indicator
Definition: rfc5225.h:401
uint8_t header_crc
Definition: rfc5225.h:522
uint8_t ttl_hopl
Definition: rfc5225.h:272
uint8_t tos_tc
Definition: rfc5225.h:139
uint8_t reserved
Definition: rfc5225.h:85
uint32_t ssrc
Definition: rfc5225.h:378
uint32_t sequence_number
Definition: rfc5225.h:356
uint8_t header_crc
Definition: rfc5225.h:498
uint8_t tos_tc
Definition: rfc5225.h:250
uint8_t ttl_hopl
Definition: rfc5225.h:251
uint8_t list_present
Definition: rfc5225.h:402
uint8_t reorder_ratio
Definition: rfc5225.h:256
uint16_t checksum
Definition: rfc5225.h:319
uint8_t msn_1
Definition: rfc5225.h:497
uint8_t ip_id_behavior_innermost
Definition: rfc5225.h:107
The UDP endpoint dynamic part.
Definition: rfc5225.h:297
uint16_t dst_port
Definition: rfc5225.h:288
uint8_t reserved
Definition: rfc5225.h:162