libosmogsm 1.9.0.196-9975
Osmocom GSM library
gsm_25_415.h
Go to the documentation of this file.
1#pragma once
2/* Iu User Plane (IuUP) Definitions as per 3GPP TS 25.415 */
3/* (C) 2017 by Harald Welte <laforge@gnumonks.org>
4 * All Rights Reserved.
5 *
6 * SPDX-License-Identifier: GPL-2.0+
7 */
8
9#include <stdint.h>
10#include <osmocom/core/endian.h>
11
12/* 3GPP TS 25.415 Section 6.6.2.1 */
14#if OSMO_IS_LITTLE_ENDIAN
15 /* control part */
16 uint8_t frame_nr:4,
17 pdu_type:4;
18 uint8_t rfci:6,
19 fqc:2;
20 /* checksum part */
21 uint8_t payload_crc_hi:2, header_crc:6;
22 uint8_t payload_crc_lo;
23
24 /* payload part */
25 uint8_t payload[0];
26#elif OSMO_IS_BIG_ENDIAN
27/* auto-generated from the little endian part above (libosmocore/contrib/struct_endianness.py) */
28 uint8_t pdu_type:4, frame_nr:4;
29 uint8_t fqc:2, rfci:6;
30 uint8_t header_crc:6, payload_crc_hi:2;
31 uint8_t payload_crc_lo;
32 uint8_t payload[0];
33#endif
34} __attribute__((packed));
35
36/* 3GPP TS 25.415 Section 6.6.2.2 */
38#if OSMO_IS_LITTLE_ENDIAN
39 /* control part */
40 uint8_t frame_nr:4,
41 pdu_type:4;
42 uint8_t rfci:6,
43 fqc:2;
44 /* checksum part */
45 uint8_t spare:2,
46 header_crc:6;
47 /* payload part */
48 uint8_t payload[0];
49#elif OSMO_IS_BIG_ENDIAN
50/* auto-generated from the little endian part above (libosmocore/contrib/struct_endianness.py) */
51 uint8_t pdu_type:4, frame_nr:4;
52 uint8_t fqc:2, rfci:6;
53 uint8_t header_crc:6, spare:2;
54 uint8_t payload[0];
55#endif
56} __attribute__((packed));
57
58/* 3GPP TS 25.415 Section 6.6.2.3 */
60#if OSMO_IS_LITTLE_ENDIAN
61 /* control part */
62 uint8_t frame_nr:2,
63 ack_nack:2,
64 pdu_type:4;
65 uint8_t proc_ind:4,
66 mode_version:4;
67 /* checksum part */
68 uint8_t payload_crc_hi:2, header_crc:6;
69 uint8_t payload_crc_lo;
70 /* payload part */
71 uint8_t payload[0];
72#elif OSMO_IS_BIG_ENDIAN
73/* auto-generated from the little endian part above (libosmocore/contrib/struct_endianness.py) */
74 uint8_t pdu_type:4, ack_nack:2, frame_nr:2;
75 uint8_t mode_version:4, proc_ind:4;
76 uint8_t header_crc:6, payload_crc_hi:2;
77 uint8_t payload_crc_lo;
78 uint8_t payload[0];
79#endif
80} __attribute__((packed));
81
82/* 3GPP TS 25.415 Section 6.6.2.3.4.1 */
84#if OSMO_IS_LITTLE_ENDIAN
85 uint8_t rfci:6,
86 li:1,
87 lri:1;
88 uint8_t subflow_length[0]; /* 1 or 2 bytes depending on li */
89#elif OSMO_IS_BIG_ENDIAN
90/* auto-generated from the little endian part above (libosmocore/contrib/struct_endianness.py) */
91 uint8_t lri:1, li:1, rfci:6;
92 uint8_t subflow_length[0];
93#endif
94} __attribute__((packed));
96#if OSMO_IS_LITTLE_ENDIAN
97 uint8_t chain_ind:1,
98 num_subflows_per_rfci:3,
99 ti:1,
100 spare:3;
101 uint8_t rfci_data[0]; /* struct iuup_ctrl_init_rfci_hdr* */
102#elif OSMO_IS_BIG_ENDIAN
103/* auto-generated from the little endian part above (libosmocore/contrib/struct_endianness.py) */
104 uint8_t spare:3, ti:1, num_subflows_per_rfci:3, chain_ind:1;
105 uint8_t rfci_data[0]; /* struct iuup_ctrl_init_rfci_hdr* */
106;
107#endif
108} __attribute__((packed));
110#if OSMO_IS_LITTLE_ENDIAN
111 uint16_t versions_supported;
112 uint8_t spare:4,
113 data_pdu_type:4;
114 uint8_t spare_extension[0];
115#elif OSMO_IS_BIG_ENDIAN
116/* auto-generated from the little endian part above (libosmocore/contrib/struct_endianness.py) */
117 uint16_t versions_supported;
118 uint8_t data_pdu_type:4, spare:4;
119 uint8_t spare_extension[0];
120#endif
121} __attribute__((packed));
122
123/* 3GPP TS 25.415 Section 6.6.2.3.4.4 */
125#if OSMO_IS_LITTLE_ENDIAN
126 struct iuup_pdutype14_hdr hdr;
127 uint8_t error_cause:6,
128 error_distance:2;
129 uint8_t spare_extension[0];
130#elif OSMO_IS_BIG_ENDIAN
131/* auto-generated from the little endian part above (libosmocore/contrib/struct_endianness.py) */
132 struct iuup_pdutype14_hdr hdr;
133 uint8_t error_distance:2, error_cause:6;
134 uint8_t spare_extension[0];
135#endif
136} __attribute__((packed));
137
138/* 3GPP TS 25.415 Section 6.6.2.3.2 */
141 uint8_t spare_extension[0];
142} __attribute__((packed));
143
144/* 3GPP TS 25.415 Section 6.6.2.3.3 */
146#if OSMO_IS_LITTLE_ENDIAN
147 struct iuup_pdutype14_hdr hdr;
148 uint8_t spare:2,
149 error_cause:6;
150 uint8_t spare_extension[0];
151#elif OSMO_IS_BIG_ENDIAN
152/* auto-generated from the little endian part above (libosmocore/contrib/struct_endianness.py) */
153 struct iuup_pdutype14_hdr hdr;
154 uint8_t error_cause:6, spare:2;
155 uint8_t spare_extension[0];
156#endif
157} __attribute__((packed));
158
159/* 3GPP TS 25.415 Section 6.6.2 + 6.6.3.1 */
165
166/* 3GPP TS 25.415 Section 6.6.3.2 */
171};
172
173/* 3GPP TS 25.415 Section 6.6.3.5 */
178};
179
180/* 3GPP TS 25.415 Section 6.6.3.7 */
186};
187
188
189/* 3GPP TS 25.415 Section 6.6.3.15 */
195};
196
197
198/* 3GPP TS 25.415 Section 6.6.3.16 */
222};
uint8_t pdu_type
struct iuup_pdutype14_hdr hdr
Definition: gsm_25_415.h:0
iuup_pdu_type
Definition: gsm_25_415.h:160
@ IUUP_PDU_T_DATA_CRC
Definition: gsm_25_415.h:161
@ IUUP_PDU_T_DATA_NOCRC
Definition: gsm_25_415.h:162
@ IUUP_PDU_T_CONTROL
Definition: gsm_25_415.h:163
enum iuup_pdu_type __attribute__
iuup_error_distance
Definition: gsm_25_415.h:190
@ IUUP_ERR_DIST_SECOND_FWD
Definition: gsm_25_415.h:193
@ IUUP_ERR_DIST_RESERVED
Definition: gsm_25_415.h:194
@ IUUP_ERR_DIST_LOCAL
Definition: gsm_25_415.h:191
@ IUUP_ERR_DIST_FIRST_FWD
Definition: gsm_25_415.h:192
iuup_error_cause
Definition: gsm_25_415.h:199
@ IUUP_ERR_CAUSE_UNKNOWN_PROC
Definition: gsm_25_415.h:205
@ IUUP_ERR_CAUSE_REQ_TIME_ALIGN_NOTPOSS
Definition: gsm_25_415.h:220
@ IUUP_ERR_CAUSE_ERR_EVENT_FAIL
Definition: gsm_25_415.h:218
@ IUUP_ERR_CAUSE_INIT_FAILURE_REP_NACK
Definition: gsm_25_415.h:216
@ IUUP_ERR_CAUSE_UNKNNOWN_RES_VAL
Definition: gsm_25_415.h:206
@ IUUP_ERR_CAUSE_UNEXPECTED_PDU_T
Definition: gsm_25_415.h:210
@ IUUP_ERR_CAUSE_UNEXPECTED_FN
Definition: gsm_25_415.h:202
@ IUUP_ERR_CAUSE_MODE_VERSION_NOT_SUPPORTED
Definition: gsm_25_415.h:221
@ IUUP_ERR_CAUSE_FRAME_LOSS
Definition: gsm_25_415.h:203
@ IUUP_ERR_CAUSE_UNEXPECTED_RFCI
Definition: gsm_25_415.h:212
@ IUUP_ERR_CAUSE_RATE_CTRL_FAILURE
Definition: gsm_25_415.h:217
@ IUUP_ERR_CAUSE_UNEXPECTED_VALUE
Definition: gsm_25_415.h:213
@ IUUP_ERR_CAUSE_MISSING_FIELDS
Definition: gsm_25_415.h:209
@ IUUP_ERR_CAUSE_TIME_ALIGN_NOTSUPP
Definition: gsm_25_415.h:219
@ IUUP_ERR_CAUSE_UNKNOWN_PDUTYPE
Definition: gsm_25_415.h:204
@ IUUP_ERR_CAUSE_CRC_ERR_HDR
Definition: gsm_25_415.h:200
@ IUUP_ERR_CAUSE_UNEXPECTED_PROC
Definition: gsm_25_415.h:211
@ IUUP_ERR_CAUSE_INIT_FAILURE
Definition: gsm_25_415.h:214
@ IUUP_ERR_CAUSE_UNKNNOWN_FIELD
Definition: gsm_25_415.h:207
@ IUUP_ERR_CAUSE_FRAME_TOO_SHORT
Definition: gsm_25_415.h:208
@ IUUP_ERR_CAUSE_INIT_FAILURE_NET_TMR
Definition: gsm_25_415.h:215
@ IUUP_ERR_CAUSE_CRC_ERR_DATA
Definition: gsm_25_415.h:201
iuup_procedure
Definition: gsm_25_415.h:181
@ IUUP_PROC_INIT
Definition: gsm_25_415.h:182
@ IUUP_PROC_RATE_CTRL
Definition: gsm_25_415.h:183
@ IUUP_PROC_ERR_EVENT
Definition: gsm_25_415.h:185
@ IUUP_PROC_TIME_ALIGN
Definition: gsm_25_415.h:184
iuup_fqc
Definition: gsm_25_415.h:174
@ IUUP_FQC_FRAME_BAD
Definition: gsm_25_415.h:176
@ IUUP_FQC_FRAME_GOOD
Definition: gsm_25_415.h:175
@ IUUP_FQC_FRAME_BAD_RADIO
Definition: gsm_25_415.h:177
uint8_t spare_extension[0]
Definition: gsm_25_415.h:1
iuup_ack_nack
Definition: gsm_25_415.h:167
@ IUUP_AN_NACK
Definition: gsm_25_415.h:170
@ IUUP_AN_PROCEDURE
Definition: gsm_25_415.h:168
@ IUUP_AN_ACK
Definition: gsm_25_415.h:169
Definition: gsm_25_415.h:139
uint8_t spare_extension[0]
Definition: gsm_25_415.h:141
struct iuup_pdutype14_hdr hdr
Definition: gsm_25_415.h:140
Definition: gsm_25_415.h:124
Definition: gsm_25_415.h:95
Definition: gsm_25_415.h:83
Definition: gsm_25_415.h:109
Definition: gsm_25_415.h:145
Definition: gsm_25_415.h:13
Definition: gsm_25_415.h:59
Definition: gsm_25_415.h:37