libosmogsm 1.9.0.196-9975
Osmocom GSM library
cbsp.h
Go to the documentation of this file.
1#pragma once
2
3#include <stdint.h>
7
8/* Definitions for parsed / abstract representation of messages in the
9 * CBSP (Cell Broadcast Service Protocol, 3GPP TS 48.049). Data here is *not* formatted
10 * like the on-the-wire format. Any similarities are coincidential ;) */
11
12/* Copyright (C) 2019 Harald Welte <laforge@gnumonks.org>
13 *
14 * All Rights Reserved
15 *
16 * SPDX-License-Identifier: GPL-2.0+
17 *
18 * This program is free software; you can redistribute it and/or modify
19 * it under the terms of the GNU General Public License as published by
20 * the Free Software Foundation; either version 2 of the License, or
21 * (at your option) any later version.
22 *
23 * This program is distributed in the hope that it will be useful,
24 * but WITHOUT ANY WARRANTY; without even the implied warranty of
25 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
26 * GNU General Public License for more details.
27 */
28
29/* Decoded 8.2.3 Message Content */
32 uint8_t user_len;
33 uint8_t data[82];
34};
35
36/* Decoded Entry in a 8.2.6 Cell List */
38 struct llist_head list; /* entry in osmo_cbsp_cell_list.list */
40};
43 struct llist_head list; /* list of osmo_cbsp_cell_ent */
44};
45
46/* Decoded Entry in a 8.2.10 Completed List */
48 struct llist_head list; /* entry in osmo_cbsp_num_compl_list.list */
50 uint16_t num_compl;
52};
55 struct llist_head list; /* list of osmo_cbsp_num_compl_ent */
56};
57
58/* Decoded Entry in a 8.2.12 Radio Resource Loading List */
60 struct llist_head list; /* entry in osmo_cbsp_loading_list */
62 uint8_t load[2];
63};
66 struct llist_head list; /* list of osmo_cbsp_loading_ent */
67};
68
69/* Decoded Entry in a 8.2.11 Failure List */
71 struct llist_head list; /* entry in a fail_list below */
74 uint8_t cause; /* enum osmo_cbsp_cause */
75};
76
77
78/* 8.1.3.1 */
80 uint16_t msg_id; /* 8.2.16 M */
81 uint16_t new_serial_nr; /* 8.2.5 M */
82 uint16_t *old_serial_nr; /* 8.2.4 */
84
85 bool is_cbs;
86 union {
87 struct {
90 uint16_t rep_period;
91 uint16_t num_bcast_req;
92 /* num_of_pages implicit as llist_count(msg_content) */
93 uint8_t dcs;
95 } cbs;
96 struct {
97 uint8_t indicator;
98 uint16_t warning_type;
99 uint8_t warning_sec_info[50];
100 uint32_t warning_period; /* in seconds; 0xffffffff = unlimited */
102 } u;
103};
104
105/* 8.1.3.2 */
107 uint16_t msg_id;
109 uint16_t *old_serial_nr;
113};
114
115/* 8.1.3.3 */
117 uint16_t msg_id;
119 uint16_t *old_serial_nr;
120 struct llist_head fail_list; /* list of osmo_cbsp_fail_ent */
124};
125
126/* 8.1.3.4 */
128 uint16_t msg_id;
132};
133
134/* 8.1.3.5 */
136 uint16_t msg_id;
141};
142
143/* 8.1.3.6 */
145 uint16_t msg_id;
147 struct llist_head fail_list; /* list of osmo_cbsp_fail_ent */
151};
152
153/* 8.1.3.7 */
157};
158
159/* 8.1.3.8 */
163};
164
165/* 8.1.3.9 */
167 struct llist_head fail_list; /* list of osmo_cbsp_fail_ent */
170};
171
172/* 8.1.3.10 */
174 uint16_t msg_id;
178};
179
180/* 8.1.3.11 */
182 uint16_t msg_id;
186};
187
188/* 8.1.3.12 */
190 uint16_t msg_id;
192 struct llist_head fail_list; /* list of osmo_cbsp_fail_ent */
195};
196
197/* 8.1.3.16 */
200};
201
202/* 8.1.3.17 */
205};
206
207/* 8.1.3.18 */
209 struct llist_head fail_list; /* list of osmo_cbsp_fail_ent */
211};
212
213/* 8.1.3.18a */
216};
217
218/* 8.1.3.18b */
220};
221
222/* 8.1.3.19 */
227};
228
229/* 8.1.3.20 */
231 struct llist_head fail_list; /* list of osmo_cbsp_fail_ent */
233};
234
235/* 8.1.3.21 */
238 uint16_t *msg_id;
239 uint16_t *new_serial_nr;
240 uint16_t *old_serial_nr;
242};
243
244/* 8.2.13 Cause */
262};
263extern const struct value_string osmo_cbsp_cause_names[];
264static inline const char *osmo_cbsp_cause_name(enum osmo_cbsp_cause cause)
265{
267}
268
269/* decoded CBSP message */
272 union {
276
280
284
288
289 /* TODO: set DRX */
290
294
296
298
300
303 } u;
304};
305
306extern __thread const char *osmo_cbsp_errstr;
307
308struct msgb *osmo_cbsp_msgb_alloc(void *ctx, const char *name);
309struct msgb *osmo_cbsp_encode(void *ctx, const struct osmo_cbsp_decoded *in);
310struct osmo_cbsp_decoded *osmo_cbsp_decode(void *ctx, struct msgb *in);
313
314int osmo_cbsp_recv_buffered(void *ctx, int fd, struct msgb **rmsg, struct msgb **tmp_msg);
__thread const char * osmo_cbsp_errstr
Definition: cbsp.c:33
osmo_cbsp_cause
Definition: cbsp.h:245
@ OSMO_CBSP_CAUSE_UNRECOGNISED_MESSAGE
Definition: cbsp.h:250
@ OSMO_CBSP_CAUSE_PARAM_NOT_RECOGNISED
Definition: cbsp.h:246
@ OSMO_CBSP_CAUSE_LAI_OR_LAC_NOT_VALID
Definition: cbsp.h:261
@ OSMO_CBSP_CAUSE_UNSPECIFIED_ERROR
Definition: cbsp.h:260
@ OSMO_CBSP_CAUSE_MSG_REF_ALREADY_USED
Definition: cbsp.h:259
@ OSMO_CBSP_CAUSE_MISSING_MANDATORY_ELEMENT
Definition: cbsp.h:251
@ OSMO_CBSP_CAUSE_CELL_BROADCAST_NOT_SUPPORTED
Definition: cbsp.h:255
@ OSMO_CBSP_CAUSE_PARAM_VALUE_INVALID
Definition: cbsp.h:247
@ OSMO_CBSP_CAUSE_CELL_MEMORY_EXCEEDED
Definition: cbsp.h:253
@ OSMO_CBSP_CAUSE_EXT_CHAN_NOT_SUPPORTED
Definition: cbsp.h:258
@ OSMO_CBSP_CAUSE_BSC_CAPACITY_EXCEEDED
Definition: cbsp.h:252
@ OSMO_CBSP_CAUSE_CELL_ID_NOT_VALID
Definition: cbsp.h:249
@ OSMO_CBSP_CAUSE_CELL_BROADCAST_NOT_OPERATIONAL
Definition: cbsp.h:256
@ OSMO_CBSP_CAUSE_INCOMPATIBLE_DRX_PARAM
Definition: cbsp.h:257
@ OSMO_CBSP_CAUSE_MSG_REF_NOT_IDENTIFIED
Definition: cbsp.h:248
@ OSMO_CBSP_CAUSE_BSC_MEMORY_EXCEEDED
Definition: cbsp.h:254
struct msgb * osmo_cbsp_msgb_alloc(void *ctx, const char *name)
Definition: cbsp.c:35
static const char * osmo_cbsp_cause_name(enum osmo_cbsp_cause cause)
Definition: cbsp.h:264
const struct value_string osmo_cbsp_cause_names[]
int osmo_cbsp_segmentation_cb(struct msgb *msg)
struct osmo_cbsp_decoded * osmo_cbsp_decoded_alloc(void *ctx, enum cbsp_msg_type msg_type)
Dynamically allocate and initialize decoded CBSP structure.
Definition: cbsp.c:1455
int osmo_cbsp_recv_buffered(void *ctx, int fd, struct msgb **rmsg, struct msgb **tmp_msg)
struct osmo_cbsp_decoded * osmo_cbsp_decode(void *ctx, struct msgb *in)
Decode a CBSP message from wire formwat to pased structure.
Definition: cbsp.c:1262
struct msgb * osmo_cbsp_encode(void *ctx, const struct osmo_cbsp_decoded *in)
Encode a CBSP message from the decoded/parsed structure representation to binary PDU.
Definition: cbsp.c:402
void osmo_cbsp_init_struct(struct osmo_cbsp_decoded *cbsp, enum cbsp_msg_type msg_type)
Definition: cbsp.c:1381
const struct osmo_fd * fd
const char * name
const char * get_value_string(const struct value_string *vs, uint32_t val)
uint8_t cause
Definition: gsm_04_08.h:2
uint8_t msg_type
Definition: gsm_04_08.h:2
uint8_t msg[0]
Definition: gsm_08_08.h:8
CELL_IDENT
Definition: gsm_08_08.h:17
cbsp_cell_id_cause
Definition: gsm_48_049.h:94
cbsp_category
Definition: gsm_48_049.h:77
cbsp_msg_type
Definition: gsm_48_049.h:50
cbsp_channel_ind
Definition: gsm_48_049.h:114
Definition: cbsp.h:37
union gsm0808_cell_id_u cell_id
Definition: cbsp.h:39
struct llist_head list
Definition: cbsp.h:38
Definition: cbsp.h:41
struct llist_head list
Definition: cbsp.h:43
enum CELL_IDENT id_discr
Definition: cbsp.h:42
Definition: cbsp.h:30
struct llist_head list
Definition: cbsp.h:31
uint8_t data[82]
Definition: cbsp.h:33
uint8_t user_len
Definition: cbsp.h:32
Definition: cbsp.h:270
struct osmo_cbsp_msg_status_query_failure msg_status_query_fail
Definition: cbsp.h:287
struct osmo_cbsp_reset_complete reset_compl
Definition: cbsp.h:292
struct osmo_cbsp_reset reset
Definition: cbsp.h:291
struct osmo_cbsp_keep_alive keep_alive
Definition: cbsp.h:301
struct osmo_cbsp_restart restart
Definition: cbsp.h:295
struct osmo_cbsp_reset_failure reset_fail
Definition: cbsp.h:293
struct osmo_cbsp_kill_complete kill_compl
Definition: cbsp.h:278
struct osmo_cbsp_load_query_complete load_query_compl
Definition: cbsp.h:282
struct osmo_cbsp_keep_alive_complete keep_alive_compl
Definition: cbsp.h:302
struct osmo_cbsp_kill_failure kill_fail
Definition: cbsp.h:279
enum cbsp_msg_type msg_type
Definition: cbsp.h:271
struct osmo_cbsp_msg_status_query msg_status_query
Definition: cbsp.h:285
struct osmo_cbsp_load_query load_query
Definition: cbsp.h:281
struct osmo_cbsp_error_ind error_ind
Definition: cbsp.h:299
struct osmo_cbsp_write_replace write_replace
Definition: cbsp.h:273
struct osmo_cbsp_write_replace_failure write_replace_fail
Definition: cbsp.h:275
struct osmo_cbsp_msg_status_query_complete msg_status_query_compl
Definition: cbsp.h:286
struct osmo_cbsp_load_query_failure load_query_fail
Definition: cbsp.h:283
struct osmo_cbsp_kill kill
Definition: cbsp.h:277
struct osmo_cbsp_write_replace_complete write_replace_compl
Definition: cbsp.h:274
union osmo_cbsp_decoded::@3 u
struct osmo_cbsp_failure failure
Definition: cbsp.h:297
Definition: cbsp.h:236
uint16_t * new_serial_nr
Definition: cbsp.h:239
uint16_t * old_serial_nr
Definition: cbsp.h:240
uint16_t * msg_id
Definition: cbsp.h:238
enum cbsp_channel_ind * channel_ind
Definition: cbsp.h:241
enum cbsp_cell_id_cause cause
Definition: cbsp.h:237
Definition: cbsp.h:70
uint8_t cause
Definition: cbsp.h:74
union gsm0808_cell_id_u cell_id
Definition: cbsp.h:73
enum CELL_IDENT id_discr
Definition: cbsp.h:72
struct llist_head list
Definition: cbsp.h:71
Definition: cbsp.h:230
struct llist_head fail_list
Definition: cbsp.h:231
uint8_t bcast_msg_type
Definition: cbsp.h:232
Definition: cbsp.h:219
Definition: cbsp.h:214
uint8_t repetition_period
Definition: cbsp.h:215
Definition: cbsp.h:135
uint16_t old_serial_nr
Definition: cbsp.h:137
struct osmo_cbsp_cell_list cell_list
Definition: cbsp.h:139
enum cbsp_channel_ind * channel_ind
Definition: cbsp.h:140
struct osmo_cbsp_num_compl_list num_compl_list
Definition: cbsp.h:138
uint16_t msg_id
Definition: cbsp.h:136
Definition: cbsp.h:144
struct llist_head fail_list
Definition: cbsp.h:147
uint16_t msg_id
Definition: cbsp.h:145
uint16_t old_serial_nr
Definition: cbsp.h:146
struct osmo_cbsp_num_compl_list num_compl_list
Definition: cbsp.h:148
enum cbsp_channel_ind * channel_ind
Definition: cbsp.h:150
struct osmo_cbsp_cell_list cell_list
Definition: cbsp.h:149
Definition: cbsp.h:127
uint16_t msg_id
Definition: cbsp.h:128
struct osmo_cbsp_cell_list cell_list
Definition: cbsp.h:130
enum cbsp_channel_ind * channel_ind
Definition: cbsp.h:131
uint16_t old_serial_nr
Definition: cbsp.h:129
Definition: cbsp.h:160
enum cbsp_channel_ind channel_ind
Definition: cbsp.h:162
struct osmo_cbsp_loading_list loading_list
Definition: cbsp.h:161
Definition: cbsp.h:166
struct llist_head fail_list
Definition: cbsp.h:167
enum cbsp_channel_ind channel_ind
Definition: cbsp.h:168
struct osmo_cbsp_loading_list loading_list
Definition: cbsp.h:169
Definition: cbsp.h:154
struct osmo_cbsp_cell_list cell_list
Definition: cbsp.h:155
enum cbsp_channel_ind channel_ind
Definition: cbsp.h:156
Definition: cbsp.h:59
union gsm0808_cell_id_u cell_id
Definition: cbsp.h:61
uint8_t load[2]
Definition: cbsp.h:62
struct llist_head list
Definition: cbsp.h:60
Definition: cbsp.h:64
struct llist_head list
Definition: cbsp.h:66
enum CELL_IDENT id_discr
Definition: cbsp.h:65
enum cbsp_channel_ind channel_ind
Definition: cbsp.h:185
struct osmo_cbsp_num_compl_list num_compl_list
Definition: cbsp.h:184
uint16_t msg_id
Definition: cbsp.h:182
uint16_t old_serial_nr
Definition: cbsp.h:183
enum cbsp_channel_ind channel_ind
Definition: cbsp.h:193
uint16_t old_serial_nr
Definition: cbsp.h:191
uint16_t msg_id
Definition: cbsp.h:190
struct osmo_cbsp_num_compl_list num_compl_list
Definition: cbsp.h:194
struct llist_head fail_list
Definition: cbsp.h:192
Definition: cbsp.h:173
enum cbsp_channel_ind channel_ind
Definition: cbsp.h:177
struct osmo_cbsp_cell_list cell_list
Definition: cbsp.h:176
uint16_t old_serial_nr
Definition: cbsp.h:175
uint16_t msg_id
Definition: cbsp.h:174
Definition: cbsp.h:47
uint8_t num_bcast_info
Definition: cbsp.h:51
struct llist_head list
Definition: cbsp.h:48
uint16_t num_compl
Definition: cbsp.h:50
union gsm0808_cell_id_u cell_id
Definition: cbsp.h:49
Definition: cbsp.h:53
enum CELL_IDENT id_discr
Definition: cbsp.h:54
struct llist_head list
Definition: cbsp.h:55
Definition: cbsp.h:203
struct osmo_cbsp_cell_list cell_list
Definition: cbsp.h:204
Definition: cbsp.h:208
struct llist_head fail_list
Definition: cbsp.h:209
struct osmo_cbsp_cell_list cell_list
Definition: cbsp.h:210
Definition: cbsp.h:198
struct osmo_cbsp_cell_list cell_list
Definition: cbsp.h:199
Definition: cbsp.h:223
uint8_t bcast_msg_type
Definition: cbsp.h:225
uint8_t recovery_ind
Definition: cbsp.h:226
struct osmo_cbsp_cell_list cell_list
Definition: cbsp.h:224
Definition: cbsp.h:106
uint16_t msg_id
Definition: cbsp.h:107
struct osmo_cbsp_num_compl_list num_compl_list
Definition: cbsp.h:110
enum cbsp_channel_ind * channel_ind
Definition: cbsp.h:112
uint16_t new_serial_nr
Definition: cbsp.h:108
uint16_t * old_serial_nr
Definition: cbsp.h:109
struct osmo_cbsp_cell_list cell_list
Definition: cbsp.h:111
Definition: cbsp.h:116
struct osmo_cbsp_cell_list cell_list
Definition: cbsp.h:122
struct osmo_cbsp_num_compl_list num_compl_list
Definition: cbsp.h:121
enum cbsp_channel_ind * channel_ind
Definition: cbsp.h:123
struct llist_head fail_list
Definition: cbsp.h:120
uint16_t msg_id
Definition: cbsp.h:117
uint16_t new_serial_nr
Definition: cbsp.h:118
uint16_t * old_serial_nr
Definition: cbsp.h:119
Definition: cbsp.h:79
uint16_t warning_type
Definition: cbsp.h:98
enum cbsp_category category
Definition: cbsp.h:89
struct osmo_cbsp_cell_list cell_list
Definition: cbsp.h:83
struct osmo_cbsp_write_replace::@0::@1 cbs
enum cbsp_channel_ind channel_ind
Definition: cbsp.h:88
uint16_t num_bcast_req
Definition: cbsp.h:91
uint8_t indicator
Definition: cbsp.h:97
uint8_t warning_sec_info[50]
Definition: cbsp.h:99
uint8_t dcs
Definition: cbsp.h:93
uint16_t rep_period
Definition: cbsp.h:90
union osmo_cbsp_write_replace::@0 u
bool is_cbs
Definition: cbsp.h:85
uint32_t warning_period
Definition: cbsp.h:100
uint16_t new_serial_nr
Definition: cbsp.h:81
uint16_t * old_serial_nr
Definition: cbsp.h:82
struct osmo_cbsp_write_replace::@0::@2 emergency
uint16_t msg_id
Definition: cbsp.h:80
struct llist_head msg_content
Definition: cbsp.h:94
Instead of this, use either struct gsm0808_cell_id or gsm0808_cell_id_list2.
Definition: gsm0808_utils.h:43