libosmogsm 1.9.0.196-9975
Osmocom GSM library
sysinfo.c File Reference

GSM 04.08 System Information (SI) encoding and decoding. More...

#include <errno.h>
#include <string.h>
#include <stdio.h>
#include <osmocom/core/bitvec.h>
#include <osmocom/core/utils.h>
#include <osmocom/gsm/sysinfo.h>
#include <osmocom/gsm/protocol/gsm_04_08.h>
#include <osmocom/gsm/protocol/gsm_08_58.h>

Functions

 osmo_static_assert (sizeof(struct gsm48_system_information_type_header)==3, _si_header_size)
 
 osmo_static_assert (sizeof(struct gsm48_rach_control)==3, _si_rach_control)
 
 osmo_static_assert (sizeof(struct gsm48_system_information_type_1)==22, _si1_size)
 
 osmo_static_assert (sizeof(struct gsm48_system_information_type_2)==23, _si2_size)
 
 osmo_static_assert (sizeof(struct gsm48_system_information_type_3)==19, _si3_size)
 
 osmo_static_assert (sizeof(struct gsm48_system_information_type_4)==13, _si4_size)
 
 osmo_static_assert (sizeof(struct gsm48_system_information_type_5)==18, _si5_size)
 
 osmo_static_assert (sizeof(struct gsm48_system_information_type_6)==11, _si6_size)
 
 osmo_static_assert (sizeof(struct gsm48_system_information_type_10)==1, _si10_size)
 
 osmo_static_assert (sizeof(struct gsm48_system_information_type_13)==3, _si13_size)
 
int osmo_earfcn_add (struct osmo_earfcn_si2q *e, uint16_t arfcn, uint8_t meas_bw)
 Add pair of arfcn and measurement bandwith value to earfcn struct. More...
 
size_t osmo_earfcn_bit_size (const struct osmo_earfcn_si2q *e)
 Return number of bits necessary to represent earfcn struct as Repeated E-UTRAN Neighbour Cells IE from 3GPP TS 44.018 Table 10.5.2.33b.1. More...
 
size_t osmo_earfcn_bit_size_ext (const struct osmo_earfcn_si2q *e, size_t offset)
 Return number of bits necessary to represent earfcn struct as Repeated E-UTRAN Neighbour Cells IE from 3GPP TS 44.018 Table 10.5.2.33b.1. More...
 
int osmo_earfcn_del (struct osmo_earfcn_si2q *e, uint16_t arfcn)
 Delete arfcn (and corresponding measurement bandwith) from earfcn struct. More...
 
void osmo_earfcn_init (struct osmo_earfcn_si2q *e)
 Initialize earfcn struct. More...
 
uint8_t osmo_sitype2rsl (enum osmo_sysinfo_type si_type)
 
enum osmo_sysinfo_type osmo_rsl2sitype (uint8_t rsl_si)
 

Variables

static const uint8_t sitype2rsl [_MAX_SYSINFO_TYPE]
 
static const uint8_t rsl2sitype [256]
 
const struct value_string osmo_sitype_strs [_MAX_SYSINFO_TYPE]
 

Detailed Description

GSM 04.08 System Information (SI) encoding and decoding.

3GPP TS 04.08 version 7.21.0 Release 1998 / ETSI TS 100 940 V7.21.0

Function Documentation

◆ osmo_earfcn_add()

int osmo_earfcn_add ( struct osmo_earfcn_si2q e,
uint16_t  arfcn,
uint8_t  meas_bw 
)

Add pair of arfcn and measurement bandwith value to earfcn struct.

Parameters
[in,out]eearfcn struct
[in]arfcnEARFCN value, 16 bits
[in]meas_bwmeasurement bandwith value
Returns
0 on success, error otherwise

References arfcn, osmo_earfcn_si2q::arfcn, osmo_earfcn_si2q::length, osmo_earfcn_si2q::meas_bw, and OSMO_EARFCN_INVALID.

◆ osmo_earfcn_bit_size()

size_t osmo_earfcn_bit_size ( const struct osmo_earfcn_si2q e)

Return number of bits necessary to represent earfcn struct as Repeated E-UTRAN Neighbour Cells IE from 3GPP TS 44.018 Table 10.5.2.33b.1.

Parameters
[in,out]eearfcn struct
Returns
number of bits

References osmo_earfcn_bit_size_ext().

◆ osmo_earfcn_bit_size_ext()

size_t osmo_earfcn_bit_size_ext ( const struct osmo_earfcn_si2q e,
size_t  offset 
)

Return number of bits necessary to represent earfcn struct as Repeated E-UTRAN Neighbour Cells IE from 3GPP TS 44.018 Table 10.5.2.33b.1.

Parameters
[in,out]eearfcn struct
[in]offsetinto earfcn struct: how many EARFCNs to skip while estimating size
Returns
number of bits

References osmo_earfcn_si2q::arfcn, osmo_earfcn_si2q::length, osmo_earfcn_si2q::meas_bw, OSMO_EARFCN_INVALID, OSMO_EARFCN_MEAS_INVALID, osmo_earfcn_si2q::prio_valid, osmo_earfcn_si2q::qrxlm_valid, and osmo_earfcn_si2q::thresh_lo_valid.

Referenced by osmo_earfcn_bit_size().

◆ osmo_earfcn_del()

int osmo_earfcn_del ( struct osmo_earfcn_si2q e,
uint16_t  arfcn 
)

Delete arfcn (and corresponding measurement bandwith) from earfcn struct.

Parameters
[in,out]eearfcn struct
[in]arfcnEARFCN value, 16 bits
Returns
0 on success, error otherwise

References arfcn, osmo_earfcn_si2q::arfcn, osmo_earfcn_si2q::length, osmo_earfcn_si2q::meas_bw, OSMO_EARFCN_INVALID, and OSMO_EARFCN_MEAS_INVALID.

◆ osmo_earfcn_init()

void osmo_earfcn_init ( struct osmo_earfcn_si2q e)

Initialize earfcn struct.

Parameters
[in,out]eearfcn struct

References osmo_earfcn_si2q::arfcn, osmo_earfcn_si2q::length, osmo_earfcn_si2q::meas_bw, OSMO_EARFCN_INVALID, and OSMO_EARFCN_MEAS_INVALID.

◆ osmo_rsl2sitype()

enum osmo_sysinfo_type osmo_rsl2sitype ( uint8_t  rsl_si)

References rsl2sitype.

◆ osmo_sitype2rsl()

uint8_t osmo_sitype2rsl ( enum osmo_sysinfo_type  si_type)

References sitype2rsl.

◆ osmo_static_assert() [1/10]

osmo_static_assert ( sizeof(struct gsm48_rach_control = =3,
_si_rach_control   
)

◆ osmo_static_assert() [2/10]

osmo_static_assert ( sizeof(struct gsm48_system_information_type_1 = =22,
_si1_size   
)

◆ osmo_static_assert() [3/10]

osmo_static_assert ( sizeof(struct gsm48_system_information_type_10 = =1,
_si10_size   
)

◆ osmo_static_assert() [4/10]

osmo_static_assert ( sizeof(struct gsm48_system_information_type_13 = =3,
_si13_size   
)

◆ osmo_static_assert() [5/10]

osmo_static_assert ( sizeof(struct gsm48_system_information_type_2 = =23,
_si2_size   
)

◆ osmo_static_assert() [6/10]

osmo_static_assert ( sizeof(struct gsm48_system_information_type_3 = =19,
_si3_size   
)

◆ osmo_static_assert() [7/10]

osmo_static_assert ( sizeof(struct gsm48_system_information_type_4 = =13,
_si4_size   
)

◆ osmo_static_assert() [8/10]

osmo_static_assert ( sizeof(struct gsm48_system_information_type_5 = =18,
_si5_size   
)

◆ osmo_static_assert() [9/10]

osmo_static_assert ( sizeof(struct gsm48_system_information_type_6 = =11,
_si6_size   
)

◆ osmo_static_assert() [10/10]

osmo_static_assert ( sizeof(struct gsm48_system_information_type_header = =3,
_si_header_size   
)

Variable Documentation

◆ osmo_sitype_strs

const struct value_string osmo_sitype_strs[_MAX_SYSINFO_TYPE]
Initial value:
= {
{ SYSINFO_TYPE_1, "1" },
{ SYSINFO_TYPE_2, "2" },
{ SYSINFO_TYPE_3, "3" },
{ SYSINFO_TYPE_4, "4" },
{ SYSINFO_TYPE_5, "5" },
{ SYSINFO_TYPE_6, "6" },
{ SYSINFO_TYPE_7, "7" },
{ SYSINFO_TYPE_8, "8" },
{ SYSINFO_TYPE_9, "9" },
{ SYSINFO_TYPE_10, "10" },
{ SYSINFO_TYPE_13, "13" },
{ SYSINFO_TYPE_16, "16" },
{ SYSINFO_TYPE_17, "17" },
{ SYSINFO_TYPE_18, "18" },
{ SYSINFO_TYPE_19, "19" },
{ SYSINFO_TYPE_20, "20" },
{ SYSINFO_TYPE_2bis, "2bis" },
{ SYSINFO_TYPE_2ter, "2ter" },
{ SYSINFO_TYPE_2quater, "2quater" },
{ SYSINFO_TYPE_5bis, "5bis" },
{ SYSINFO_TYPE_5ter, "5ter" },
{ SYSINFO_TYPE_EMO, "EMO" },
{ 0, NULL }
}
@ SYSINFO_TYPE_4
Definition: sysinfo.h:19
@ SYSINFO_TYPE_10
Definition: sysinfo.h:25
@ SYSINFO_TYPE_18
Definition: sysinfo.h:29
@ SYSINFO_TYPE_1
Definition: sysinfo.h:16
@ SYSINFO_TYPE_5
Definition: sysinfo.h:20
@ SYSINFO_TYPE_8
Definition: sysinfo.h:23
@ SYSINFO_TYPE_MEAS_INFO
Definition: sysinfo.h:38
@ SYSINFO_TYPE_5ter
Definition: sysinfo.h:36
@ SYSINFO_TYPE_16
Definition: sysinfo.h:27
@ SYSINFO_TYPE_3
Definition: sysinfo.h:18
@ SYSINFO_TYPE_2
Definition: sysinfo.h:17
@ SYSINFO_TYPE_9
Definition: sysinfo.h:24
@ SYSINFO_TYPE_17
Definition: sysinfo.h:28
@ SYSINFO_TYPE_5bis
Definition: sysinfo.h:35
@ SYSINFO_TYPE_EMO
Definition: sysinfo.h:37
@ SYSINFO_TYPE_7
Definition: sysinfo.h:22
@ SYSINFO_TYPE_2bis
Definition: sysinfo.h:32
@ SYSINFO_TYPE_6
Definition: sysinfo.h:21
@ SYSINFO_TYPE_13
Definition: sysinfo.h:26
@ SYSINFO_TYPE_19
Definition: sysinfo.h:30
@ SYSINFO_TYPE_20
Definition: sysinfo.h:31
@ SYSINFO_TYPE_2ter
Definition: sysinfo.h:33
@ SYSINFO_TYPE_2quater
Definition: sysinfo.h:34

◆ rsl2sitype

const uint8_t rsl2sitype[256]
static
Initial value:
= {
}
#define RSL_EXT_MEAS_ORDER
Definition: gsm_08_58.h:664
#define RSL_SYSTEM_INFO_6
Definition: gsm_08_58.h:655
#define RSL_MEAS_INFO
Definition: gsm_08_58.h:665
#define RSL_SYSTEM_INFO_2bis
Definition: gsm_08_58.h:659
#define RSL_SYSTEM_INFO_9
Definition: gsm_08_58.h:669
#define RSL_SYSTEM_INFO_13
Definition: gsm_08_58.h:666
#define RSL_SYSTEM_INFO_5
Definition: gsm_08_58.h:654
#define RSL_SYSTEM_INFO_17
Definition: gsm_08_58.h:658
#define RSL_SYSTEM_INFO_3
Definition: gsm_08_58.h:652
#define RSL_SYSTEM_INFO_7
Definition: gsm_08_58.h:656
#define RSL_SYSTEM_INFO_10
Definition: gsm_08_58.h:663
#define RSL_SYSTEM_INFO_8
Definition: gsm_08_58.h:649
#define RSL_SYSTEM_INFO_2ter
Definition: gsm_08_58.h:660
#define RSL_SYSTEM_INFO_5bis
Definition: gsm_08_58.h:661
#define RSL_SYSTEM_INFO_1
Definition: gsm_08_58.h:650
#define RSL_SYSTEM_INFO_18
Definition: gsm_08_58.h:670
#define RSL_SYSTEM_INFO_2quater
Definition: gsm_08_58.h:668
#define RSL_SYSTEM_INFO_4
Definition: gsm_08_58.h:653
#define RSL_SYSTEM_INFO_2
Definition: gsm_08_58.h:651
#define RSL_SYSTEM_INFO_19
Definition: gsm_08_58.h:671
#define RSL_SYSTEM_INFO_16
Definition: gsm_08_58.h:657
#define RSL_SYSTEM_INFO_20
Definition: gsm_08_58.h:672
#define RSL_SYSTEM_INFO_5ter
Definition: gsm_08_58.h:662

Referenced by osmo_rsl2sitype().

◆ sitype2rsl