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 irregular chain with checksum
314  *
315  * See RFC5225 page 64
316  */
317 typedef struct
318 {
319  uint16_t checksum; /**< The UDP checksum */
320 } __attribute__((packed)) udp_with_checksum_irregular_t;
321 
322 
323 /************************************************************************
324  * Compressed ESP header *
325  ************************************************************************/
326 
327 /**
328  * @brief The ESP static part
329  *
330  * See RFC5225 page 68
331  */
332 typedef struct
333 {
334  uint32_t spi; /**< The ESP Security Parameters Index (SPI) */
335 } __attribute__((packed)) esp_static_t;
336 
337 
338 /**
339  * @brief The ESP dynamic part
340  *
341  * See RFC5225 page 68
342  */
343 typedef struct
344 {
345  uint32_t sequence_number; /**< The ESP Sequence Number (SN) */
346 #if WORDS_BIGENDIAN == 1
347  uint8_t reserved:6; /**< reserved field, shall be zero */
348  uint8_t reorder_ratio:2; /**< The reorder_ratio use for the transmission */
349 #else
350  uint8_t reorder_ratio:2;
351  uint8_t reserved:6;
352 #endif
353 } __attribute__((packed)) esp_dynamic_t;
354 
355 
356 /************************************************************************
357  * Compressed packet formats *
358  ************************************************************************/
359 
360 /**
361  * @brief The CRC part of the co_repair packet format
362  *
363  * See RFC5225 ยง6.8.2.2 page 44
364  */
365 typedef struct
366 {
367 #if WORDS_BIGENDIAN == 1
368  uint8_t r1:1; /**< Reserved field, must be 0 */
369  uint8_t header_crc:7; /**< CRC-7 over uncompressed headers */
370  uint8_t r2:5; /**< Reserved field, must be 0 */
371  uint8_t ctrl_crc:3; /**< CRC-3 over control fields */
372 #else
373  uint8_t header_crc:7;
374  uint8_t r1:1;
375  uint8_t ctrl_crc:3;
376  uint8_t r2:5;
377 #endif
378 } __attribute__((packed)) co_repair_crc_t;
379 
380 
381 /**
382  * @brief The pt_0_crc3 packet format
383  *
384  * See RFC5225 page 91
385  */
386 typedef struct
387 {
388 #if WORDS_BIGENDIAN == 1
389  uint8_t discriminator:1; /**< '0' [ 1 ] */
390  uint8_t msn:4; /**< msn_lsb(4) [ 4 ] */
391  uint8_t header_crc:3; /**< crc3(THIS.UVALUE, THIS.ULENGTH) [ 3 ] */
392 #else
393  uint8_t header_crc:3;
394  uint8_t msn:4;
395  uint8_t discriminator:1;
396 #endif
397 } __attribute__((packed)) pt_0_crc3_t;
398 
399 
400 /**
401  * @brief The pt_0_crc7 packet format
402  *
403  * See RFC5225 page 91
404  */
405 typedef struct
406 {
407 #if WORDS_BIGENDIAN == 1
408  uint8_t discriminator:3; /**< '100' [ 3 ] */
409  uint8_t msn_1:5; /**< 5 MSB of msn_lsb(6) [ 5 ] */
410  uint8_t msn_2:1; /**< last LSB of msn_lsb(6) [ 6 ] */
411  uint8_t header_crc:7; /**< crc7(THIS.UVALUE, THIS.ULENGTH) [ 7 ] */
412 #else
413  uint8_t msn_1:5;
414  uint8_t discriminator:3;
415  uint8_t header_crc:7;
416  uint8_t msn_2:1;
417 #endif
418 } __attribute__((packed)) pt_0_crc7_t;
419 
420 
421 /**
422  * @brief The pt_1_seq_id packet format
423  *
424  * See RFC5225 page 91
425  */
426 typedef struct
427 {
428 #if WORDS_BIGENDIAN == 1
429  uint8_t discriminator:3;/**< '101' [ 3 ] */
430  uint8_t header_crc:3; /**< crc3(THIS.UVALUE, THIS.ULENGTH) [ 3 ] */
431  uint8_t msn_1:2; /**< 2 MSB of msn_lsb(6) [ 2 ] */
432  uint8_t msn_2:4; /**< 4 LSB of msn_lsb(6) [ 4 ] */
433  uint8_t ip_id:4; /**< ip_id_lsb(ip_id_behavior.UVALUE, 4) [ 4 ] */
434 #else
435  uint8_t msn_1:2;
436  uint8_t header_crc:3;
437  uint8_t discriminator:3;
438  uint8_t ip_id:4;
439  uint8_t msn_2:4;
440 #endif
441 } __attribute__((packed)) pt_1_seq_id_t;
442 
443 
444 /**
445  * @brief The pt_2_seq_id packet format
446  *
447  * See RFC5225 page 91
448  */
449 typedef struct
450 {
451 #if WORDS_BIGENDIAN == 1
452  uint32_t discriminator:3;/**< '110' [ 3 ] */
453  uint32_t ip_id_1:5; /**< 5 MSB of ip_id_lsb(ip_id_behavior.UVALUE, 6) [ 5 ] */
454  uint32_t ip_id_2:1; /**< 1 LSB of ip_id_lsb(ip_id_behavior.UVALUE, 6) [ 1 ] */
455  uint32_t header_crc:7; /**< crc7(THIS.UVALUE, THIS.ULENGTH) [ 7 ] */
456  uint32_t msn:8; /**< msn_lsb(8) [ 8 ] */
457 #else
458  uint8_t ip_id_1:5;
459  uint8_t discriminator:3;
460  uint8_t header_crc:7;
461  uint8_t ip_id_2:1;
462  uint8_t msn:8;
463 #endif
464 } __attribute__((packed)) pt_2_seq_id_t;
465 
466 
467 /**
468  * @brief The fixed part of the co_common packet format
469  *
470  * See RFC5225 page 90/91
471  */
472 typedef struct
473 {
474 #if WORDS_BIGENDIAN == 1
475  uint8_t discriminator:8; /**< '11111010' [ 8 ] */
476  uint8_t ip_id_ind:1; /**< irregular(1) [ 1 ] */
477  uint8_t header_crc:7; /**< crc7(THIS.UVALUE, THIS.ULENGTH) [ 7 ] */
478  uint8_t flags_ind:1; /**< irregular(1) [ 1 ] */
479  uint8_t ttl_hopl_ind:1; /**< irregular(1) [ 1 ] */
480  uint8_t tos_tc_ind:1; /**< irregular(1) [ 1 ] */
481  uint8_t reorder_ratio:2; /**< irregular(2) [ 2 ] */
482  uint8_t control_crc3:3; /**< control_crc3_encoding [ 3 ] */
483 #else
484  uint8_t discriminator:8; /**< '11111010' [ 8 ] */
485  uint8_t header_crc:7; /**< crc7(THIS.UVALUE, THIS.ULENGTH) [ 7 ] */
486  uint8_t ip_id_ind:1; /**< irregular(1) [ 1 ] */
487  uint8_t control_crc3:3; /**< 4 LSB of msn_lsb(6) [ 3 ] */
488  uint8_t reorder_ratio:2; /**< irregular(2) [ 2 ] */
489  uint8_t tos_tc_ind:1; /**< irregular(1) [ 1 ] */
490  uint8_t ttl_hopl_ind:1; /**< irregular(1) [ 1 ] */
491  uint8_t flags_ind:1; /**< irregular(1) [ 1 ] */
492 #endif
493 } __attribute__((packed)) co_common_base_t;
494 
495 
496 /**
497  * @brief The profile_2_3_4_flags_enc packet part
498  *
499  * See RFC5225 page 76
500  */
501 typedef struct
502 {
503 #if WORDS_BIGENDIAN == 1
504  uint8_t ip_outer_indicator:1; /**< irregular(1) [ 1 ] */
505  uint8_t df:1; /**< dont_fragment(ip_version) [ 1 ] */
506  uint8_t ip_id_behavior:2; /**< irregular(2) [ 2 ] */
507  uint8_t reserved:4; /**< compressed_value(4, 0) [ 4 ] */
508 #else
509  uint8_t reserved:4;
510  uint8_t ip_id_behavior:2;
511  uint8_t df:1;
513 #endif
514 } __attribute__((packed)) profile_2_3_4_flags_t;
515 
516 
517 #endif /* ROHC_PROTOCOLS_RFC5225_H */
518 
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:458
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:416
uint8_t df
Definition: rfc5225.h:161
uint32_t spi
Definition: rfc5225.h:334
uint8_t ttl_hopl
Definition: rfc5225.h:165
uint16_t src_port
Definition: rfc5225.h:287
uint8_t header_crc
Definition: rfc5225.h:373
uint8_t ip_id_behavior
Definition: rfc5225.h:510
uint8_t tos_tc
Definition: rfc5225.h:112
uint8_t version_flag
Definition: rfc5225.h:60
uint8_t header_crc
Definition: rfc5225.h:393
uint16_t msn
Definition: rfc5225.h:115
uint8_t tos_tc
Definition: rfc5225.h:164
uint8_t flags_ind
Definition: rfc5225.h:491
uint8_t header_crc
Definition: rfc5225.h:415
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:488
uint8_t tos_tc_ind
Definition: rfc5225.h:489
uint8_t version_flag
Definition: rfc5225.h:208
uint16_t flow_label_lsb
Definition: rfc5225.h:236
uint8_t ctrl_crc
Definition: rfc5225.h:375
uint8_t next_header
Definition: rfc5225.h:210
uint8_t df
Definition: rfc5225.h:511
uint8_t df
Definition: rfc5225.h:108
uint8_t reserved
Definition: rfc5225.h:58
uint8_t reserved
Definition: rfc5225.h:232
The IPv6 static part, null flow_label encoded with 1 bit.
Definition: rfc5225.h:195
uint8_t control_crc3
Definition: rfc5225.h:487
uint8_t discriminator
Definition: rfc5225.h:414
uint8_t reserved
Definition: rfc5225.h:351
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:332
uint8_t ttl_hopl
Definition: rfc5225.h:140
uint16_t msn
Definition: rfc5225.h:259
uint8_t discriminator
Definition: rfc5225.h:459
The pt_1_seq_id packet format.
Definition: rfc5225.h:426
uint8_t discriminator
Definition: rfc5225.h:395
uint8_t reorder_ratio
Definition: rfc5225.h:84
uint8_t msn_2
Definition: rfc5225.h:439
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
The CRC part of the co_repair packet format.
Definition: rfc5225.h:365
uint8_t msn
Definition: rfc5225.h:462
uint8_t flow_label_msb
Definition: rfc5225.h:230
uint16_t checksum
Definition: rfc5225.h:319
uint8_t reorder_ratio
Definition: rfc5225.h:306
uint8_t discriminator
Definition: rfc5225.h:437
The ESP dynamic part.
Definition: rfc5225.h:343
uint8_t reserved
Definition: rfc5225.h:307
uint8_t header_crc
Definition: rfc5225.h:485
uint8_t innermost_ip
Definition: rfc5225.h:207
The fixed part of the co_common packet format.
Definition: rfc5225.h:472
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:386
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:490
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:449
uint8_t discriminator
Definition: rfc5225.h:484
uint8_t reserved
Definition: rfc5225.h:257
uint8_t reserved2
Definition: rfc5225.h:204
uint8_t msn_1
Definition: rfc5225.h:413
uint8_t ip_id_2
Definition: rfc5225.h:461
uint8_t reserved
Definition: rfc5225.h:137
uint8_t ip_id_ind
Definition: rfc5225.h:486
uint8_t reorder_ratio
Definition: rfc5225.h:350
The pt_0_crc7 packet format.
Definition: rfc5225.h:405
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:438
uint8_t reserved
Definition: rfc5225.h:509
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:512
uint8_t ttl_hopl
Definition: rfc5225.h:88
uint8_t msn
Definition: rfc5225.h:394
The UDP static part.
Definition: rfc5225.h:285
The profile_2_3_4_flags_enc packet part.
Definition: rfc5225.h:501
uint8_t tos_tc
Definition: rfc5225.h:271
uint8_t ip_id_behavior_innermost
Definition: rfc5225.h:82
uint8_t ttl_hopl
Definition: rfc5225.h:113
uint8_t r1
Definition: rfc5225.h:374
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:317
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:376
uint8_t reorder_ratio
Definition: rfc5225.h:109
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 header_crc
Definition: rfc5225.h:460
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 sequence_number
Definition: rfc5225.h:345
uint8_t header_crc
Definition: rfc5225.h:436
uint8_t tos_tc
Definition: rfc5225.h:250
uint8_t ttl_hopl
Definition: rfc5225.h:251
uint8_t reorder_ratio
Definition: rfc5225.h:256
uint8_t msn_1
Definition: rfc5225.h:435
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