osmo-ttcn3-hacks/sysinfo/GSM_SystemInformation.ttcn

259 lines
7.5 KiB
Plaintext
Raw Normal View History

/* Encoding/Decoding routines for GSM System Information messages
* according to 3GPP TS 44.018 Version 12.3.0 Release 12 */
/* (C) 2017 by Harald Welte <laforge@gnumonks.org> */
module GSM_SystemInformation {
import from General_Types all;
2017-07-15 13:58:13 +00:00
import from GSM_Types all;
import from Osmocom_Types all;
type record L2PseudoLength {
uint6_t l2_plen,
BIT2 zero_one
} with { variant "" };
template L2PseudoLength t_L2Pseudolength(uint6_t len) := {
l2_plen := len,
zero_one := '01'B
};
type octetstring RestOctets with { variant "PADDING(yes), PADDING_PATTERN('00101011'B)" };
type record MaioHsn {
} with { variant "" };
type union ArfcnOrMaio {
uint12_t arfcn,
MaioHsn maio_hsn
} with { variant "" };
type record SystemInformationHeader {
L2PseudoLength l2_plen,
uint4_t skip_indicator,
uint4_t rr_protocol_discriminator,
2017-07-15 13:58:13 +00:00
RrMessageType message_type
} with { variant "" };
2017-07-15 13:58:13 +00:00
template SystemInformationHeader t_SiHeader(RrMessageType msg_type, uint6_t len) := {
l2_plen := t_L2Pseudolength(len),
rr_protocol_discriminator := 6,
message_type := msg_type
};
external function enc_SystemInformationHeader(in SystemInformationHeader si) return octetstring
with { extension "prototype(convert) encode(RAW)" };
external function dec_SystemInformationHeader(in octetstring stream) return SystemInformationHeader
with { extension "prototype(convert) decode(RAW)" };
type hexstring GsmBcdString with { variant "HEXORDER(low)" };
type GsmBcdString BcdMccMnc with { variant "FIELDLENGTH(6)" };
/* 24.008 10.5.1.1 */
type uint16_t CellIdentity;
/* 24.008 10.5.1.3 */
type record LocationAreaIdentification {
BcdMccMnc mcc_mnc,
uint16_t lac
} with { variant "" };
/* 44.018 10.5.2.1b */
type octetstring CellChannelDescription with { variant "FIELDLENGTH(16)" };
/* 44.018 10.5.2.3 */
type record CellOptions {
boolean dn_ind,
boolean pwrc,
BIT2 dtx,
BIT4 radio_link_timeout
} with { variant "" };
/* 44.018 10.5.2.3a */
type record CellOptionsSacch {
BIT1 dtx_ext,
boolean pwrc,
BIT2 dtx,
BIT4 radio_link_timeout
} with { variant "" };
/* 44.018 10.5.2.4 */
type record CellSelectionParameters {
uint3_t cell_resel_hyst,
uint5_t ms_txpwr_max_cch,
boolean acs,
boolean neci,
uint6_t rxlev_access_min
} with { variant "" };
/* 44.018 10.5.2.5 */
type record ChannelDescription {
OCT1 iei,
BIT5 chan_type_tdma_offset,
uint3_t tn,
uint3_t tsc,
boolean h,
uint12_t arfcn optional,
MaioHsn maio_hsn optional
} with { variant (arfcn) "PRESENCE(h = true)"
variant (maio_hsn) "PRESENCE(h = false)" };
/* 44.018 10.5.2.11 */
type record ControlChannelDescription {
boolean mscrr,
boolean att,
uint3_t bs_ag_blks_res,
uint3_t ccch_conf,
boolean si22ind,
uint2_t cbq3,
BIT2 spare,
uint3_t bs_pa_mfrms,
uint8_t t3212
} with { variant "" };
/* 44.018 10.5.2.21 */
type record MobileAllocation {
OCT1 iei,
uint8_t len,
bitstring ma
} with { variant "" };
/* 44.018 10.5.2.22 */
type octetstring NeighbourCellDescription with { variant "FIELDLENGTH(16)" };
/* 44.018 10.5.2.22a */
type octetstring NeighbourCellDescription2 with { variant "FIELDLENGTH(16)" };
type bitstring AccessControlClass with { variant "FIELDLENGTH(16), BYTEORDER(last)" };
/* 44.018 10.5.2.29 */
type record RachControlParameters {
BIT2 max_retrans,
BIT4 tx_integer,
boolean cell_barr_access,
boolean re,
AccessControlClass ac
} with { variant (ac) "FIELDLENGTH(16)" };
/* 44.018 10.5.2.32 */
type RestOctets Si1RestOctets with { variant "FIELDLENGTH(1)" };
type RestOctets Si3RestOctets with { variant "FIELDLENGTH(4)" };
/* 44.018 9.1.31 */
type record SystemInformationType1 {
//SystemInformationHeader header,
CellChannelDescription cell_chan_desc,
RachControlParameters rach_control,
Si1RestOctets rest_octets
} with { variant "" };
/* 44.018 9.1.32 */
type record SystemInformationType2 {
//SystemInformationHeader header,
NeighbourCellDescription bcch_freq_list,
BIT8 ncc_permitted,
RachControlParameters rach_control
} with { variant "" };
/* 44.018 9.1.33 */
type record SystemInformationType2bis {
//SystemInformationHeader header,
NeighbourCellDescription extd_bcch_freq_list,
RachControlParameters rach_control,
OCT1 rest_octets
} with { variant "" };
/* 44.018 9.1.34 */
type record SystemInformationType2ter {
//SystemInformationHeader header,
NeighbourCellDescription2 extd_bcch_freq_list,
OCT4 rest_octets
} with { variant "" };
/* 44.018 9.1.35 */
type record SystemInformationType3 {
//SystemInformationHeader header,
CellIdentity cell_id,
LocationAreaIdentification lai,
ControlChannelDescription ctrl_chan_desc,
CellOptions cell_options,
CellSelectionParameters cell_sel_par,
RachControlParameters rach_control,
Si3RestOctets rest_octets
} with { variant "" };
/* 44.018 9.1.36 */
type record SystemInformationType4 {
//SystemInformationHeader header,
LocationAreaIdentification lai,
CellSelectionParameters cell_sel_par,
RachControlParameters rach_control,
ChannelDescription cbch_chan_desc optional,
MobileAllocation cbch_mobile_alloc optional,
RestOctets rest_octets
} with { variant "TAG(cbch_chan_desc, iei = '64'O; cbch_mobile_alloc, iei = '72'O)" };
/* 44.018 9.1.37 */
type record SystemInformationType5 {
SystemInformationHeader header,
NeighbourCellDescription bcch_freq_list
} with { variant "" };
/* 44.018 9.1.38 */
type record SystemInformationType5bis {
//SystemInformationHeader header,
NeighbourCellDescription extd_bcch_freq_list
} with { variant "" };
/* 44.018 9.1.39 */
type record SystemInformationType5ter {
//SystemInformationHeader header,
NeighbourCellDescription2 extd_bcch_freq_list
} with { variant "" };
/* 44.018 9.1.40 */
type record SystemInformationType6 {
//SystemInformationHeader header,
CellIdentity cell_id,
LocationAreaIdentification lai,
CellOptionsSacch cell_options,
BIT8 ncc_permitted,
OCT7 rest_octets
} with { variant "" };
type union SystemInformationUnion {
SystemInformationType1 si1,
SystemInformationType2 si2,
SystemInformationType2bis si2bis,
SystemInformationType2ter si2ter,
SystemInformationType3 si3,
SystemInformationType4 si4,
SystemInformationType5 si5,
SystemInformationType5bis si5bis,
SystemInformationType5ter si5ter,
SystemInformationType6 si6
} with { variant "" };
type record SystemInformation {
SystemInformationHeader header,
SystemInformationUnion payload
} with { variant (payload) "CROSSTAG(si1, header.message_type = SYSTEM_INFORMATION_TYPE_1;
2017-07-15 13:58:13 +00:00
si2, header.message_type = SYSTEM_INFORMATION_TYPE_2;
si2bis, header.message_type = SYSTEM_INFORMATION_TYPE_2bis;
si2ter, header.message_type = SYSTEM_INFORMATION_TYPE_2ter;
si3, header.message_type = SYSTEM_INFORMATION_TYPE_3;
si4, header.message_type = SYSTEM_INFORMATION_TYPE_4;
si5, header.message_type = SYSTEM_INFORMATION_TYPE_5;
si5bis, header.message_type = SYSTEM_INFORMATION_TYPE_5bis;
si5ter, header.message_type = SYSTEM_INFORMATION_TYPE_5ter;
si6, header.message_type = SYSTEM_INFORMATION_TYPE_6;
)" };
external function enc_SystemInformation(in SystemInformation si) return octetstring
with { extension "prototype(convert) encode(RAW)" };
external function dec_SystemInformation(in octetstring stream) return SystemInformation
with { extension "prototype(convert) decode(RAW)" };
} with { encode "RAW"; variant "FIELDORDER(msb)" }