libosmogsm  1.11.0.26-c59d.202505142026
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 */
140  struct iuup_pdutype14_hdr hdr;
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 */
164 };
165 
166 /* 3GPP TS 25.415 Section 6.6.3.2 */
171 };
172 
173 /* 3GPP TS 25.415 Section 6.6.3.5 */
174 enum iuup_fqc {
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