aboutsummaryrefslogtreecommitdiffstats
path: root/sysinfo/GSM_SystemInformation.ttcn
diff options
context:
space:
mode:
Diffstat (limited to 'sysinfo/GSM_SystemInformation.ttcn')
-rw-r--r--sysinfo/GSM_SystemInformation.ttcn267
1 files changed, 267 insertions, 0 deletions
diff --git a/sysinfo/GSM_SystemInformation.ttcn b/sysinfo/GSM_SystemInformation.ttcn
new file mode 100644
index 00000000..01565c13
--- /dev/null
+++ b/sysinfo/GSM_SystemInformation.ttcn
@@ -0,0 +1,267 @@
+/* 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;
+
+ type integer uint32_t (0..4294967295) with { variant "unsigned 32 bit" };
+ type integer uint16_t (0..65535) with { variant "unsigned 16 bit" };
+ type integer uint2_t (0..3) with { variant "unsigned 2 bit" };
+ type integer uint3_t (0..7) with { variant "unsigned 3 bit" };
+ type integer uint4_t (0..15) with { variant "unsigned 4 bit" };
+ type integer uint5_t (0..31) with { variant "unsigned 5 bit" };
+ type integer uint6_t (0..63) with { variant "unsigned 6 bit" };
+ type integer uint7_t (0..127) with { variant "unsigned 7 bit" };
+ type integer uint8_t (0..255) with { variant "unsigned 8 bit" };
+ type integer uint9_t (0..511) with { variant "unsigned 9 bit" };
+ type integer uint10_t (0..1023) with { variant "unsigned 10 bit" };
+ type integer uint11_t (0..2047) with { variant "unsigned 11 bit" };
+ type integer uint12_t (0..4095) with { variant "unsigned 12 bit" };
+
+ 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,
+ OCT1 message_type
+ } with { variant "" };
+
+ template SystemInformationHeader t_SiHeader(OCT1 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,
+ RachControlParameters rach_control,
+ 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 SystemInformation {
+ SystemInformationType1 si1,
+ SystemInformationType2 si2,
+ SystemInformationType2bis si2bis,
+ SystemInformationType2ter si2ter,
+ SystemInformationType3 si3,
+ SystemInformationType4 si4,
+ SystemInformationType5 si5,
+ SystemInformationType5bis si5bis,
+ SystemInformationType5ter si5ter,
+ SystemInformationType6 si6
+ } with { variant "TAG(si1, header.message_type = '19'O;
+ si2, header.message_type = '1A'O;
+ si2bis, header.message_type = '02'O;
+ si2ter, header.message_type = '03'O;
+ si3, header.message_type = '1B'O;
+ si4, header.message_type = '1C'O;
+ si5, header.message_type = '1D'O;
+ si5bis, header.message_type = '05'O;
+ si5ter, header.message_type = '06'O;
+ si6, header.message_type = '1E'O;
+ )" };
+
+ 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)" }