383 lines
11 KiB
Plaintext
383 lines
11 KiB
Plaintext
module CBSP_Types {
|
|
|
|
/* CBSP_Types, defining abstract TTCN-3 data types for the CBSP protocol.
|
|
*
|
|
* CBSP is a ETSI/3GPP standard protocol used between CBC (Cell Broadcast Centre)
|
|
* and BSC (Base Station Controller) in 2G/GSM/GERAN networks. It is specified
|
|
* in 3GPP TS 48.049.
|
|
*
|
|
* (C) 2019 by Harald Welte <laforge@gnumonks.org>
|
|
* All rights reserved.
|
|
*
|
|
* Released under the terms of GNU General Public License, Version 2 or
|
|
* (at your option) any later version.
|
|
*/
|
|
|
|
import from General_Types all;
|
|
import from Osmocom_Types all;
|
|
import from BSSAP_Types all;
|
|
|
|
|
|
/* 8.2.2 Message Type */
|
|
type enumerated CBSP_MessageType {
|
|
CBSP_MSGT_WRITE_REPLACE ('01'O),
|
|
CBSP_MSGT_WRITE_REPLACE_COMPL ('02'O),
|
|
CBSP_MSGT_WRITE_REPLACE_FAIL ('03'O),
|
|
CBSP_MSGT_KILL ('04'O),
|
|
CBSP_MSGT_KILL_COMPL ('05'O),
|
|
CBSP_MSGT_KILL_FAIL ('06'O),
|
|
CBSP_MSGT_LOAD_QUERY ('07'O),
|
|
CBSP_MSGT_LOAD_QUERY_COMPL ('08'O),
|
|
CBSP_MSGT_LOAD_QUERY_FAIL ('09'O),
|
|
CBSP_MSGT_MSG_STATUS_QUERY ('0a'O),
|
|
CBSP_MSGT_MSG_STATUS_QUERY_COMPL ('0b'O),
|
|
CBSP_MSGT_MSG_STATUS_QUERY_FAIL ('0c'O),
|
|
CBSP_MSGT_SET_DRX ('0d'O),
|
|
CBSP_MSGT_SET_DRX_COMPL ('0e'O),
|
|
CBSP_MSGT_SET_DRX_FAIL ('0f'O),
|
|
CBSP_MSGT_RESET ('10'O),
|
|
CBSP_MSGT_RESET_COMPL ('11'O),
|
|
CBSP_MSGT_RESET_FAIL ('12'O),
|
|
CBSP_MSGT_RESTART ('13'O),
|
|
CBSP_MSGT_FAILURE ('14'O),
|
|
CBSP_MSGT_ERROR_IND ('15'O),
|
|
CBSP_MSGT_KEEP_ALIVE ('16'O),
|
|
CBSP_MSGT_KEEP_ALIVE_COMPL ('17'O)
|
|
} with { variant "FIELDLENGTH(8)" };
|
|
|
|
/* 8.2.1 Information Element Identifier */
|
|
type enumerated CBSP_IEI {
|
|
CBSP_IEI_MSG_CONTENT ('01'O),
|
|
CBSP_IEI_OLD_SERIAL_NR ('02'O),
|
|
CBSP_IEI_NEW_SERIAL_NR ('03'O),
|
|
CBSP_IEI_CELL_LIST ('04'O),
|
|
CBSP_IEI_CATEGORY ('05'O),
|
|
CBSP_IEI_REP_PERIOD ('06'O),
|
|
CBSP_IEI_NUM_BCAST_REQ ('07'O),
|
|
CBSP_IEI_NUM_BCAST_COMPL_LIST ('08'O),
|
|
CBSP_IEI_FAILURE_LIST ('09'O),
|
|
CBSP_IEI_RR_LOADING_LIST ('0a'O),
|
|
CBSP_IEI_CAUSE ('0b'O),
|
|
CBSP_IEI_DCS ('0c'O),
|
|
CBSP_IEI_RECOVERY_IND ('0d'O),
|
|
CBSP_IEI_MSG_ID ('0e'O),
|
|
CBSP_IEI_EMERG_IND ('0f'O),
|
|
CBSP_IEI_WARN_TYPE ('10'O),
|
|
CBSP_IEI_WARN_SEC_INFO ('11'O),
|
|
CBSP_IEI_CHANNEL_IND ('12'O),
|
|
CBSP_IEI_NUM_OF_PAGES ('13'O),
|
|
CBSP_IEI_SCHEDULE_PERIOD ('14'O),
|
|
CBSP_IEI_NUM_OF_RES_SLOTS ('15'O),
|
|
CBSP_IEI_BCAST_MSG_TYPE ('16'O),
|
|
CBSP_IEI_WARNING_PERIOD ('17'O),
|
|
CBSP_IEI_KEEP_ALIVE_REP_PERIOD ('18'O)
|
|
} with { variant "FIELDLENGTH(8)" };
|
|
|
|
/* 8.2.7 Category */
|
|
type enumerated CBSP_Category {
|
|
CBSP_CATEG_HIGH_PRIO ('00'O),
|
|
CBSP_CATEG_BACKGROUND ('01'O),
|
|
CBSP_CATEG_NORMAL ('02'O)
|
|
} with { variant "FIELDLENGTH(8)" };
|
|
|
|
/* Cell ID Discriminator (8.2.11, ...) */
|
|
type enumerated CBSP_CellIdDisc {
|
|
CBSP_CIDD_WHOLE_CGI (0),
|
|
CBSP_CIDD_LAC_CI (1),
|
|
CBSP_CIDD_CI (2),
|
|
CBSP_CIDD_LAI (4),
|
|
CBSP_CIDD_LAC (5),
|
|
CBSP_CIDD_ALL_IN_BSC (6)
|
|
} with { variant "FIELDLENGTH(4)" };
|
|
|
|
/* 8.2.13 Cause */
|
|
type enumerated CBSP_Cause {
|
|
CBSP_CAUSE_PARAM_NOT_RECOGNISED ('00'O),
|
|
CBSP_CAUSE_PARAM_VAL_INVALID ('01'O),
|
|
CBSP_CAUSE_MSG_REF_NOT_IDENTIFIED ('02'O),
|
|
CBSP_CAUSE_CELL_ID_NOT_VALID ('03'O),
|
|
CBSP_CAUSE_UNRECOGNISED_MSG ('04'O),
|
|
CBSP_CAUSE_MISSING_MAND_IE ('05'O),
|
|
CBSP_CAUSE_BSC_CAPACITY_EXCEEDED ('06'O),
|
|
CBSP_CAUSE_CELL_MEMORY_EXCEEDED ('07'O),
|
|
CBSP_CAUSE_BSC_MEMORY_EXCEEDED ('08'O),
|
|
CBSP_CAUSE_CB_NOT_SUPPORTED ('09'O),
|
|
CBSP_CAUSE_CB_NOT_OPERATIONAL ('0a'O),
|
|
CBSP_CAUSE_INCOMPATIBLE_DRX_PARAM ('0b'O),
|
|
CBSP_CAUSE_EXT_CHAN_NOT_SUPPORTED ('0c'O),
|
|
CBSP_CAUSE_MSG_REF_ALREADY_USED ('0d'O),
|
|
CBSP_CAUSE_UNSPECIFIED_ERROR ('0e'O),
|
|
CBSP_CAUSE_LAI_OR_LAC_NPT_VALID ('0f'O)
|
|
} with { variant "FIELDLENGTH(8)" };
|
|
|
|
type record CBSP_IE_MessageContent {
|
|
uint8_t user_len,
|
|
octetstring val
|
|
} with { variant (val) "FIELDLENGTH(82)"
|
|
variant (val) "ALIGN(left)" };
|
|
|
|
/* 8.2.6 Cell List */
|
|
type record CBSP_IE_CellList {
|
|
uint16_t len,
|
|
BIT4 spare1_4,
|
|
BIT4 cell_id_discr,
|
|
BSSMAP_FIELD_CellIdentificationList cell_id
|
|
} with {
|
|
variant (len) "LENGTHTO(cell_id_discr,spare1_4,cell_id)"
|
|
variant (cell_id) "CROSSTAG(
|
|
cIl_CGI, cell_id_discr = '0000'B;
|
|
cIl_LAC_CI, cell_id_discr = '0001'B;
|
|
cIl_CI, cell_id_discr = '0010'B;
|
|
cIl_LAI, cell_id_discr = '0100'B;
|
|
cIl_LAC, cell_id_discr = '0101'B;
|
|
cIl_allInBSS, cell_id_discr = '0110'B;
|
|
)"
|
|
};
|
|
|
|
/* 8.2.10 Number of Broadcasts Completed List */
|
|
type record CBSP_IE_NumBcastComplList {
|
|
uint16_t len,
|
|
BIT4 spare1_4,
|
|
BIT4 cell_id_discr,
|
|
CBSP_FIELD_NumBcastCompl list
|
|
} with {
|
|
variant (len) "LENGTHTO(cell_id_discr,spare1_4,list)"
|
|
variant (list) "CROSSTAG(
|
|
cI_CGI, cell_id_discr = '0000'B;
|
|
cI_LAC_CI, cell_id_discr = '0001'B;
|
|
cI_CI, cell_id_discr = '0010'B;
|
|
cI_LAI, cell_id_discr = '0100'B;
|
|
cI_LAC, cell_id_discr = '0101'B;
|
|
cI_allInBSS, cell_id_discr = '0110'B;
|
|
)"
|
|
};
|
|
type union CBSP_FIELD_NumBcastCompl {
|
|
CBSP_FIELD_NumBcastCompl_CGI cI_CGI,
|
|
CBSP_FIELD_NumBcastCompl_LAC_CI cI_LAC_CI,
|
|
OCT0 cI_allInBSS,
|
|
CBSP_FIELD_NumBcastCompl_CI cI_CI,
|
|
CBSP_FIELD_NumBcastCompl_LAC cI_LAC,
|
|
CBSP_FIELD_NumBcastCompl_LAI cI_LAI
|
|
};
|
|
type record CBSP_FIELD_NumBcastCompl_CGI {
|
|
BSSMAP_FIELD_CellIdentification_CGI ci,
|
|
uint16_t num_bcats_compl,
|
|
CBSP_NumBcastInfo num_bcast_info,
|
|
BIT4 spare1_4
|
|
};
|
|
type record CBSP_FIELD_NumBcastCompl_LAC_CI {
|
|
BSSMAP_FIELD_CellIdentification_LAC_CI ci,
|
|
uint16_t num_bcats_compl,
|
|
CBSP_NumBcastInfo num_bcast_info,
|
|
BIT4 spare1_4
|
|
};
|
|
type record CBSP_FIELD_NumBcastCompl_LAI {
|
|
BSSMAP_FIELD_CellIdentification_LAI ci,
|
|
uint16_t num_bcats_compl,
|
|
CBSP_NumBcastInfo num_bcast_info,
|
|
BIT4 spare1_4
|
|
};
|
|
type record CBSP_FIELD_NumBcastCompl_CI {
|
|
OCT2 ci,
|
|
uint16_t num_bcats_compl,
|
|
CBSP_NumBcastInfo num_bcast_info,
|
|
BIT4 spare1_4
|
|
};
|
|
type record CBSP_FIELD_NumBcastCompl_LAC {
|
|
OCT2 lac,
|
|
uint16_t num_bcats_compl,
|
|
CBSP_NumBcastInfo num_bcast_info,
|
|
BIT4 spare1_4
|
|
};
|
|
type enumerated CBSP_NumBcastInfo {
|
|
CBSP_NUM_BCAST_INFO_VALID (0),
|
|
CBSP_NUM_BCAST_INFO_OVERFLOW (1),
|
|
CBSP_NUM_BCAST_INFO_UNKNOWN (2)
|
|
} with { variant "FIELDLENGTH(4)" };
|
|
|
|
|
|
/* 8.2.11 Failure List */
|
|
type record CBSP_FailureListItem {
|
|
BIT4 spare1_4,
|
|
BIT4 cell_id_discr,
|
|
CBSP_FIELD_CellIdentification cell_id,
|
|
CBSP_Cause cause
|
|
} with {
|
|
variant (cell_id) "CROSSTAG(
|
|
cI_CGI, cell_id_discr = '0000'B;
|
|
cI_LAC_CI, cell_id_discr = '0001'B;
|
|
cI_CI, cell_id_discr = '0010'B;
|
|
cI_LAI, cell_id_discr = '0100'B;
|
|
cI_LAC, cell_id_discr = '0101'B;
|
|
cI_allInBSS, cell_id_discr = '0110'B;
|
|
)"
|
|
};
|
|
type union CBSP_FIELD_CellIdentification
|
|
{
|
|
BSSMAP_FIELD_CellIdentification_CGI cI_CGI,
|
|
BSSMAP_FIELD_CellIdentification_LAC_CI cI_LAC_CI,
|
|
OCT2 cI_CI,
|
|
BSSMAP_FIELD_CellIdentification_LAI cI_LAI,
|
|
OCT2 cI_LAC,
|
|
OCT2 cI_allInBSS
|
|
};
|
|
|
|
type record of CBSP_FailureListItem CBSP_FailureListItems;
|
|
type record CBSP_IE_FailureList {
|
|
uint16_t len,
|
|
CBSP_FailureListItems list
|
|
} with {
|
|
variant (len) "LENGTHTO(list)"
|
|
};
|
|
|
|
/* 8.2.12 RR Loading List */
|
|
type record CBSP_IE_RrLoadingList {
|
|
uint16_t len,
|
|
BIT4 spare1_4,
|
|
BIT4 cell_id_discr,
|
|
CBSP_FIELD_RrLoadingList list
|
|
} with {
|
|
variant (len) "LENGTHTO(cell_id_discr,spare1_4,list)"
|
|
variant (list) "CROSSTAG(
|
|
cI_CGI, cell_id_discr = '0000'B;
|
|
cI_LAC_CI, cell_id_discr = '0001'B;
|
|
cI_CI, cell_id_discr = '0010'B;
|
|
cI_LAI, cell_id_discr = '0100'B;
|
|
cI_LAC, cell_id_discr = '0101'B;
|
|
cI_allInBSS, cell_id_discr = '0110'B;
|
|
)"
|
|
};
|
|
type union CBSP_FIELD_RrLoadingList {
|
|
CBSP_FIELD_RrLoadingList_CGI cI_CGI,
|
|
CBSP_FIELD_RrLoadingList_LAC_CI cI_LAC_CI,
|
|
OCT0 cI_allInBSS,
|
|
CBSP_FIELD_RrLoadingList_CI cI_CI,
|
|
CBSP_FIELD_RrLoadingList_LAC cI_LAC,
|
|
CBSP_FIELD_RrLoadingList_LAI cI_LAI
|
|
};
|
|
type record CBSP_FIELD_RrLoadingList_CGI {
|
|
BSSMAP_FIELD_CellIdentification_CGI ci,
|
|
uint8_t load1,
|
|
uint8_t load2
|
|
};
|
|
type record CBSP_FIELD_RrLoadingList_LAC_CI {
|
|
BSSMAP_FIELD_CellIdentification_LAC_CI ci,
|
|
uint8_t load1,
|
|
uint8_t load2
|
|
};
|
|
type record CBSP_FIELD_RrLoadingList_LAI {
|
|
BSSMAP_FIELD_CellIdentification_LAI ci,
|
|
uint8_t load1,
|
|
uint8_t load2
|
|
};
|
|
type record CBSP_FIELD_RrLoadingList_CI {
|
|
OCT2 ci,
|
|
uint8_t load1,
|
|
uint8_t load2
|
|
};
|
|
type record CBSP_FIELD_RrLoadingList_LAC {
|
|
OCT2 lac,
|
|
uint8_t load1,
|
|
uint8_t load2
|
|
};
|
|
|
|
/* 8.2.15 Recovery Indication */
|
|
type record CBSP_IE_RecoveryInd {
|
|
BIT4 spare1_4,
|
|
CBSP_RecoveryInd recovery
|
|
};
|
|
type enumerated CBSP_RecoveryInd {
|
|
CBSP_RI_DATA_AVAILABLE (0),
|
|
CBSP_RI_DATA_LOST (1)
|
|
} with { variant "FIELDLENGTH(4)" };
|
|
|
|
/* 8.2.24 Broadcast Message Type */
|
|
type record CBSP_IE_BcastMsgType {
|
|
BIT4 spare1_4,
|
|
CBSP_BcastMsgType msg_type
|
|
};
|
|
type enumerated CBSP_BcastMsgType {
|
|
CBSP_BC_MSGT_CBS (0),
|
|
CBSP_BC_MSGT_EMERG (1)
|
|
} with { variant "FIELDLENGTH(4)" };
|
|
|
|
|
|
type union CBSP_IE_Body {
|
|
CBSP_IE_MessageContent msg_content,
|
|
uint16_t old_ser_nr,
|
|
uint16_t new_ser_nr,
|
|
CBSP_IE_CellList cell_list,
|
|
CBSP_Category category,
|
|
uint16_t rep_period,
|
|
uint16_t num_bcast_req,
|
|
CBSP_IE_NumBcastComplList num_bcast_compl_list,
|
|
CBSP_IE_FailureList failure_list,
|
|
CBSP_IE_RrLoadingList rr_loading_list,
|
|
CBSP_Cause cause,
|
|
uint8_t dcs,
|
|
CBSP_IE_RecoveryInd recovery_ind,
|
|
uint16_t msg_id,
|
|
uint8_t emerg_ind,
|
|
uint16_t warn_type,
|
|
octetstring warn_sec_info,
|
|
uint8_t channel_ind,
|
|
uint8_t num_of_pages,
|
|
uint8_t schedule_period,
|
|
uint8_t num_of_res_slots,
|
|
CBSP_IE_BcastMsgType bcast_msg_type,
|
|
uint8_t warning_period,
|
|
uint8_t keep_alive_rep_period
|
|
} with {
|
|
variant (warn_sec_info) "FIELDLENGTH(50)"
|
|
};
|
|
|
|
type record CBSP_IE {
|
|
CBSP_IEI iei,
|
|
CBSP_IE_Body body
|
|
} with {
|
|
variant (body) "CROSSTAG( msg_content, iei = CBSP_IEI_MSG_CONTENT;
|
|
old_ser_nr, iei = CBSP_IEI_OLD_SERIAL_NR;
|
|
new_ser_nr, iei = CBSP_IEI_NEW_SERIAL_NR;
|
|
cell_list, iei = CBSP_IEI_CELL_LIST;
|
|
category, iei = CBSP_IEI_CATEGORY;
|
|
rep_period, iei = CBSP_IEI_REP_PERIOD;
|
|
num_bcast_req, iei = CBSP_IEI_NUM_BCAST_REQ;
|
|
num_bcast_compl_list, iei = CBSP_IEI_NUM_BCAST_COMPL_LIST;
|
|
failure_list, iei = CBSP_IEI_FAILURE_LIST;
|
|
rr_loading_list, iei = CBSP_IEI_RR_LOADING_LIST;
|
|
cause, iei = CBSP_IEI_CAUSE;
|
|
dcs, iei = CBSP_IEI_DCS;
|
|
recovery_ind, iei = CBSP_IEI_RECOVERY_IND;
|
|
msg_id, iei = CBSP_IEI_MSG_ID;
|
|
emerg_ind, iei = CBSP_IEI_EMERG_IND;
|
|
warn_type, iei = CBSP_IEI_WARN_TYPE;
|
|
warn_sec_info, iei = CBSP_IEI_WARN_SEC_INFO;
|
|
channel_ind, iei = CBSP_IEI_CHANNEL_IND;
|
|
num_of_pages, iei = CBSP_IEI_NUM_OF_PAGES;
|
|
schedule_period, iei = CBSP_IEI_SCHEDULE_PERIOD;
|
|
num_of_res_slots, iei = CBSP_IEI_NUM_OF_RES_SLOTS;
|
|
bcast_msg_type, iei = CBSP_IEI_BCAST_MSG_TYPE;
|
|
warning_period, iei = CBSP_IEI_WARNING_PERIOD;
|
|
keep_alive_rep_period, iei = CBSP_IEI_KEEP_ALIVE_REP_PERIOD
|
|
)"
|
|
};
|
|
|
|
type set of CBSP_IE CBSP_IEs;
|
|
|
|
type record CBSP_PDU {
|
|
CBSP_MessageType msg_type,
|
|
uint24_t len,
|
|
CBSP_IEs ies
|
|
} with {
|
|
variant (len) "LENGTHTO(ies)"
|
|
};
|
|
|
|
external function enc_CBSP_PDU(in CBSP_PDU msg) return octetstring
|
|
with { extension "prototype(convert) encode(RAW)" };
|
|
|
|
external function dec_CBSP_PDU(in octetstring msg) return CBSP_PDU
|
|
with { extension "prototype(convert) decode(RAW)" };
|
|
|
|
|
|
} with { encode "RAW"; variant "FIELDORDER(msb)" }
|