From b76a279edf16a20c34354eb26b680e20ee6fc07c Mon Sep 17 00:00:00 2001 From: Philipp Maier Date: Mon, 7 Dec 2020 16:54:35 +0100 Subject: Osmocom_Gb_types: add RIM templates The template set we use for testing the GB (BSSGB) interface on osmo-sgsn and osmo-pcu lacks templates to generate RIM (ran information management) messages. The records and unions are already specified in BSSGP_Types.ttcn, we just need to form templates in order to be able to use them. Change-Id: Ic495e0bb6ceb2b65cbc7c3da7ee519a013aede55 Related: SYS#5103 --- library/Osmocom_Gb_Types.ttcn | 806 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 806 insertions(+) diff --git a/library/Osmocom_Gb_Types.ttcn b/library/Osmocom_Gb_Types.ttcn index c5327720..b83131d0 100644 --- a/library/Osmocom_Gb_Types.ttcn +++ b/library/Osmocom_Gb_Types.ttcn @@ -2211,6 +2211,812 @@ octetstring sdu) := { } } + /* 3GPP TS 48.018 11.3.61 */ + const OCT1 RIM_APP_ID_NACC := '01'O; + const OCT1 RIM_APP_ID_SI3 := '02'O; + const OCT1 RIM_APP_ID_MBMS_DATA_CH := '03'O; + const OCT1 RIM_APP_ID_SON_TRANSF := '04'O; + const OCT1 RIM_APP_ID_UTRA_SI := '05'O; + template (value) RIM_Application_Identity ts_RIM_Application_Identity(OCT1 app_id) := { + iEI := '4B'O, + ext := '1'B, + lengthIndicator := { + length1 := 1 + }, + rIMApplicationIdentity := app_id + } + + + /* 3GPP TS 48.018 11.3.62 */ + template (value) RIM_Sequence_Number ts_RIM_Sequence_Number(integer seq) := { + iEI := '4C'O, + ext := '1'B, + lengthIndicator := { + length1 := 4 + }, + rIMSequenceNumber := int2oct(seq, 4) + } + + /* 3GPP TS 48.018 11.3.62a.1 */ + template (value) RAN_Information_Request_RIM_Container + ts_RAN_Information_Request_RIM_Container(template (value) RIM_Application_Identity app_id, + template (value) RIM_Sequence_Number seq, + template (value) RIM_PDU_Indications ind, + template (omit) RIM_Protocol_Version_Number ver := omit, + template (omit) RAN_Information_Request_Application_Container app_cont := omit, + template (omit) SON_Transfer_Application_Identity_TLV son_app_id := omit) := { + iEI := '57'O, + ext := '1'B, + lengthIndicator := { + length1 := 0 /* overwritten */ + }, + rIM_Application_Identity := app_id, + rIM_Sequence_Number := seq, + rIM_PDU_Indications := ind, + rIM_Protocol_Version_Number := ver, + application_Container := app_cont, + sON_Transfer_Application_Identity_TLV := son_app_id + } + template RAN_Information_Request_RIM_Container + tr_RAN_Information_Request_RIM_Container(template RIM_Application_Identity app_id := ?, + template RIM_Sequence_Number seq := ?, + template RIM_PDU_Indications ind := ?, + template RIM_Protocol_Version_Number ver := *, + template RAN_Information_Request_Application_Container app_cont := *, + template SON_Transfer_Application_Identity_TLV son_app_id := *) := { + iEI := '57'O, + ext := '1'B, + lengthIndicator := { + length1 := ? + }, + rIM_Application_Identity := app_id, + rIM_Sequence_Number := seq, + rIM_PDU_Indications := ind, + rIM_Protocol_Version_Number := ver, + application_Container := app_cont, + sON_Transfer_Application_Identity_TLV := son_app_id + } + + + /* 3GPP TS 48.018 11.3.62a.2 */ + template (value) RAN_Information_RIM_Container + ts_RAN_Information_RIM_Container(template (value) RIM_Application_Identity app_id, + template (value) RIM_Sequence_Number seq, + template (value) RIM_PDU_Indications ind, + template (omit) RIM_Protocol_Version_Number ver := omit, + template (omit) ApplContainer_or_ApplErrContainer app_cont_or_app_err := omit, + template (omit) SON_Transfer_Application_Identity_TLV son_app_id := omit) := { + + iEI := '58'O, + ext := '1'B, + lengthIndicator := { + length1 := 0 /* overwritten */ + }, + rIM_Application_Identity := app_id, + rIM_Sequence_Number := seq, + rIM_PDU_Indications := ind, + rIM_Protocol_Version_Number := ver, + applContainer_or_ApplErrContainer := app_cont_or_app_err, + sON_Transfer_Application_Identity := son_app_id + } + template (value) ApplContainer_or_ApplErrContainer + tsu_ApplContainer_or_ApplErrContainer_NACC(template (value) ApplContainer_or_ApplErrContainer_NACC cont) := { + nacc := cont + } + template (value) ApplContainer_or_ApplErrContainer + tsu_ApplContainer_or_ApplErrContainer_SI3(template (value) ApplContainer_or_ApplErrContainer_SI3 cont) := { + si3 := cont + } + template (value) ApplContainer_or_ApplErrContainer + tsu_ApplContainer_or_ApplErrContainer_MBMS_data_channel(template (value) ApplContainer_or_ApplErrContainer_MBMS_data_channel cont) := { + mBMS_data_channel := cont + } + template (value) ApplContainer_or_ApplErrContainer_NACC + tsu_ApplContainer_NACC(template (value) BssgpCellId cid, boolean psi_type, integer si_psi_num, octetstring si_psi) := { + application_Container := ts_RAN_Information_Application_Container_NACC(cid, psi_type, si_psi_num, si_psi) + } + template (value) ApplContainer_or_ApplErrContainer_NACC + tsu_ApplErrContainer_NACC(template (value) BssgpCellId cid, + integer cause, + template (value) Application_Container_IE_NACC app_cont) := { + application_Error_Container := ts_Application_Error_Container_NACC(cid, cause, app_cont) + } + template (value) ApplContainer_or_ApplErrContainer_SI3 + tsu_ApplContainer_SI3(template (value) BssgpCellId cid, template (value) SI3 si3) := { + application_Container := ts_RAN_Information_Application_Container_SI3(cid, si3) + } + template (value) ApplContainer_or_ApplErrContainer_SI3 + tsu_ApplErrContainer_SI3(template (value) BssgpCellId cid, + integer cause, + template (value) Application_Container_IE_SI3 app_cont) := { + application_Error_Container := ts_Application_Error_Container_SI3(cid, cause, app_cont) + } + template (value) ApplContainer_or_ApplErrContainer_MBMS_data_channel + tsu_ApplContainer_MBMS_data_channel(template (value) BssgpCellId cid, octetstring data_ch_report) := { + application_Container := ts_RAN_Information_Application_Container_MBMS_data_channel(cid, data_ch_report) + } + template (value) ApplContainer_or_ApplErrContainer_MBMS_data_channel + tsu_ApplErrContainer_MBMS_data_channel(template (value) BssgpCellId cid, + integer cause, + template (value) Application_Container_IE_MBMS_data_channel app_cont) := { + application_Error_Container := ts_Application_Error_Container_MBMS_data_channel(cid, cause, app_cont) + } + + /* 3GPP TS 48.018 11.3.62a.3 */ + template (value) RAN_Information_Ack_RIM_Container + ts_RAN_Information_Ack_RIM_Container(template (value) RIM_Application_Identity app_id, + template (value) RIM_Sequence_Number seq, + template (omit) RIM_Protocol_Version_Number ver := omit, + template (omit) SON_Transfer_Application_Identity_TLV son_app_id := omit) := { + iEI := '5A'O, + ext := '1'B, + lengthIndicator := { + length1 := 0 /* overwritten */ + }, + rIM_Application_Identity := app_id, + rIM_Sequence_Number := seq, + rIM_Protocol_Version_Number := ver, + sON_Transfer_Application_Identity := son_app_id + } + + /* 3GPP TS 48.018 11.3.62a.4 */ + template (value) RAN_Information_Error_RIM_Container + ts_RAN_Information_Error_RIM_Container(template (value) RIM_Application_Identity app_id, + template (value) Cause_BSSGP cause, + template (omit) RIM_Protocol_Version_Number ver := omit, + PDU_BSSGP pdu, + template (omit) SON_Transfer_Application_Identity_TLV son_app_id := omit) := { + iEI := '5B'O, + ext := '1'B, + lengthIndicator := { + length1 := 0 /* overwritten */ + }, + rIM_Application_Identity := app_id, + rIM_cause := cause, + rIM_Protocol_Version_Number := ver, + pDU_in_Error:= { + iEI := '15'O, + ext := '1'B, + lengthIndicator := { + length1 := 0 /* overwritten */ + }, + erroneous_BSSGP_PDU := enc_PDU_BSSGP(pdu) + }, + sON_Transfer_Application_Identity := son_app_id + } + + /* 3GPP TS 48.018 11.3.62a.5 */ + template (value) RAN_Information_Application_Error_RIM_Container + ts_RAN_Information_Application_Error_RIM_Container(template (value) RIM_Application_Identity app_id, + template (value) RIM_Sequence_Number seq, + template (value) RIM_PDU_Indications ind, + template (omit) RIM_Protocol_Version_Number ver := omit, + template (value) Application_Error_Container cont, + template (omit) SON_Transfer_Application_Identity_TLV son_app_id := omit) := { + iEI := '59'O, + ext := '1'B, + lengthIndicator := { + length1 := 0 /* overwritten */ + }, + rIM_Application_Identity := app_id, + rIM_Sequence_Number := seq, + rIM_PDU_Indications := ind, + rIM_Protocol_Version_Number := ver, + application_Error_Container := cont, + sON_Transfer_Application_Identity := son_app_id + } + + + /* 3GPP TS 48.018 11.3.63.1 */ + template (value) RAN_Information_Request_Application_Container + tsu_RAN_Information_Request_Application_Container_NACC(template (value) BssgpCellId cid) := { + nacc := ts_RAN_Information_Request_Application_Container_NACC(cid) + } + template (value) RAN_Information_Request_Application_Container + tsu_RAN_Information_Request_Application_Container_SI3(template (value) BssgpCellId cid) := { + si3 := ts_RAN_Information_Request_Application_Container_SI3(cid) + } + template (value) RAN_Information_Request_Application_Container + tsu_RAN_Information_Request_Application_Container_MBMS_data_channel(template (value) BssgpCellId cid) := { + mBMS_data_channel := ts_RAN_Information_Request_Application_Container_MBMS_data_channel(cid) + } + + /* NOTE: The type description of reporting_Cell_Identifier in chapter 11.3.63.1, version V10.6.0 (2012-07) of + * 3GPP TS 48.018 clearly states: "Reporting Cell Identifier: This field is encoded as the Cell Identifier + * defined in sub-clause 11.3.9". However this seems to be an error in the specification, because the + * specifiction in Table 11.3.63.1.1 already has a length field an an IEI defined. Keeping the IEI and lenght + * of the BSSGP cell identifier in addition would no make sense. Also in the chapters below the specifiction + * of the IEs are similar and there it says "Reporting Cell Identifier: This field is encoded as the value + * part of the Cell Identifier IE defined in sub-clause 11.3.9, not including IEI and Length Indicator.", + * which actually makes sense. */ + + /* 3GPP TS 48.018 11.3.63.1.1 */ + template (value) RAN_Information_Request_Application_Container_NACC + ts_RAN_Information_Request_Application_Container_NACC(template (value) BssgpCellId cid) := { + iEI := '4D'O, + ext := '1'B, + lengthIndicator := { + length1 := 0 /* overwritten */ + }, + reporting_Cell_Identifier := t_Cell_Identifier_V(cid) + } + + /* 3GPP TS 48.018 11.3.63.1.2 */ + template (value) RAN_Information_Request_Application_Container_SI3 + ts_RAN_Information_Request_Application_Container_SI3(template (value) BssgpCellId cid) := { + iEI := '4D'O, + ext := '1'B, + lengthIndicator := { + length1 := 0 /* overwritten */ + }, + reporting_Cell_Identifier := t_Cell_Identifier_V(cid) + } + + /* 3GPP TS 48.018 11.3.63.1.3 */ + template (value) RAN_Information_Request_Application_Container_MBMS_data_channel + ts_RAN_Information_Request_Application_Container_MBMS_data_channel(template (value) BssgpCellId cid) := { + iEI := '4D'O, + ext := '1'B, + lengthIndicator := { + length1 := 0 /* overwritten */ + }, + reporting_Cell_Identifier := t_Cell_Identifier_V(cid) + } + + /* 3GPP TS 48.018 11.3.63.2.1 */ + template (value) RAN_Information_Application_Container_NACC + ts_RAN_Information_Application_Container_NACC(template (value) BssgpCellId cid, boolean psi_type, integer si_psi_num, octetstring si_psi) := { + iEI := '4E'O, + ext := '1'B, + lengthIndicator := { + length1 := 0 /* overwritten */ + }, + reporting_Cell_Identifier := t_Cell_Identifier_V(cid), + typeBit := bool2bit(psi_type), + number_of_SI_PSI := int2bit(si_psi_num, 7), + sI_PSI := si_psi + } + + /* 3GPP TS 48.018 11.3.63.2.2 */ + template (value) RAN_Information_Application_Container_SI3 + ts_RAN_Information_Application_Container_SI3(template (value) BssgpCellId cid, template (value) SI3 si3) := { + iEI := '4E'O, + ext := '1'B, + lengthIndicator := { + length1 := 0 /* overwritten */ + }, + reporting_Cell_Identifier := t_Cell_Identifier_V(cid), + sI3 := si3 + } + + /* 3GPP TS 48.018 11.3.63.2.3 */ + template (value) RAN_Information_Application_Container_MBMS_data_channel + ts_RAN_Information_Application_Container_MBMS_data_channel(template (value) BssgpCellId cid, octetstring data_ch_report) := { + iEI := '4E'O, + ext := '1'B, + lengthIndicator := { + length1 := 0 /* overwritten */ + }, + reporting_Cell_Identifier := t_Cell_Identifier_V(cid), + mBMS_data_channel_report := data_ch_report + } + + + /* 3GPP TS 48.018 11.3.64 */ + template (value) Application_Error_Container + tsu_Application_Error_Container_NACC(template (value) BssgpCellId cid, + integer cause, + template (value) Application_Container_IE_NACC app_cont) := { + nacc := ts_Application_Error_Container_NACC(cid, cause, app_cont) + } + template (value) Application_Error_Container + tsu_Application_Error_Container_SI3(template (value) BssgpCellId cid, + integer cause, + template (value) Application_Container_IE_SI3 app_cont) := { + si3 := ts_Application_Error_Container_SI3(cid, cause, app_cont) + } + template (value) Application_Error_Container + tsu_Application_Error_Container_MBMS_data_channel(template (value) BssgpCellId cid, + integer cause, + template (value) Application_Container_IE_MBMS_data_channel app_cont) := { + mBMS_data_channel := ts_Application_Error_Container_MBMS_data_channel(cid, cause, app_cont) + } + + /* 3GPP TS 48.018 11.3.64.1 */ + template (value) Application_Error_Container_NACC + ts_Application_Error_Container_NACC(template (value) BssgpCellId cid, + integer cause, + template (value) Application_Container_IE_NACC app_cont) := { + iEI := '56'O, + ext := '1'B, + lengthIndicator := { + length1 := 0 /* overwritten */ + }, + nACC_cause := int2oct(cause, 1), + erroneousApplicationContainer := app_cont + } + template (value) Application_Container_IE_NACC + tsu_Application_Container_IE_NACC_req(template (value) BssgpCellId cid) := { + rAN_Information_Request_Application_Container := ts_RAN_Information_Request_Application_Container_NACC(cid) + } + template (value) Application_Container_IE_NACC + tsu_Application_Container_IE_NACC(template (value) BssgpCellId cid, boolean psi_type, integer si_psi_num, octetstring si_psi) := { + rAN_Information_Application_Container := ts_RAN_Information_Application_Container_NACC(cid, psi_type, si_psi_num, si_psi) + } + + /* 3GPP TS 48.018 11.3.64.2 */ + template (value) Application_Error_Container_SI3 + ts_Application_Error_Container_SI3(template (value) BssgpCellId cid, + integer cause, + template (value) Application_Container_IE_SI3 app_cont) := { + iEI := '56'O, + ext := '1'B, + lengthIndicator := { + length1 := 0 /* overwritten */ + }, + sI3_cause := int2oct(cause, 1), + erroneousApplicationContainer := app_cont + } + template (value) Application_Container_IE_SI3 + tsu_Application_Container_IE_SI3_req(template (value) BssgpCellId cid) := { + rAN_Information_Request_Application_Container := ts_RAN_Information_Request_Application_Container_SI3(cid) + } + template (value) Application_Container_IE_SI3 + tsu_Application_Container_IE_SI3(template (value) BssgpCellId cid, template (value) SI3 si3) := { + rAN_Information_Application_Container := ts_RAN_Information_Application_Container_SI3(cid, si3) + } + + /* 3GPP TS 48.018 11.3.64.3 */ + template (value) Application_Error_Container_MBMS_data_channel + ts_Application_Error_Container_MBMS_data_channel(template (value) BssgpCellId cid, + integer cause, + template (value) Application_Container_IE_MBMS_data_channel app_cont) := { + iEI := '56'O, + ext := '1'B, + lengthIndicator := { + length1 := 0 /* overwritten */ + }, + mBMS_data_channel_cause := int2oct(cause, 1), + erroneousApplicationContainer := app_cont + } + template (value) Application_Container_IE_MBMS_data_channel + tsu_Application_Container_IE_MBMS_data_channel_req(template (value) BssgpCellId cid) := { + rAN_Information_Request_Application_Container := ts_RAN_Information_Request_Application_Container_MBMS_data_channel(cid) + } + template (value) Application_Container_IE_MBMS_data_channel + tsu_Application_Container_IE_MBMS_data_channel(template (value) BssgpCellId cid, octetstring data_ch_report) := { + rAN_Information_Application_Container := ts_RAN_Information_Application_Container_MBMS_data_channel(cid, data_ch_report) + } + + + /* 3GPP TS 44.018 10.5.1.3 -> 3GPP TS 24.008 10.5.1.3 */ + function t_LocationAreaIdentification(template BssgpCellId cid) return template BSSGP_Types.LocationAreaIdentification { + var template BSSGP_Types.LocationAreaIdentification ret := { + mccDigit1 := ?, + mccDigit2 := ?, + mccDigit3 := ?, + mncDigit3 := ?, + mncDigit1 := ?, + mncDigit2 := ?, + lac := ? + } + if (istemplatekind(cid, "omit")) { + return omit; + } else if (istemplatekind(cid, "*")) { + return *; + } else if (istemplatekind(cid, "?")) { + return ?; + } + if (isvalue(cid) and isvalue(cid.ra_id) and isvalue(cid.ra_id.lai)) { + if (isvalue(cid.ra_id.lai.mcc_mnc)) { + ret.mccDigit1 := cid.ra_id.lai.mcc_mnc[0]; + ret.mccDigit2 := cid.ra_id.lai.mcc_mnc[1]; + ret.mccDigit3 := cid.ra_id.lai.mcc_mnc[2]; + ret.mncDigit3 := cid.ra_id.lai.mcc_mnc[3]; + ret.mncDigit1 := cid.ra_id.lai.mcc_mnc[4]; + ret.mncDigit2 := cid.ra_id.lai.mcc_mnc[5]; + } + if (isvalue(cid.ra_id.lai.lac)) { + ret.lac := f_oct_or_wc(cid.ra_id.lai.lac, 2); + } + } + return ret; + } + + /* 3GPP TS 44.018 10.5.2.11 */ + template (value) ControlChannelDescription ts_ControlChannelDescription(integer ccch_conf, + integer bs_ag_blks_res, + boolean att, + boolean mscr, + integer bs_pa_mfrms, + BIT2 cbq3, + integer t3212) := { + cCCH_Conf := int2bit(ccch_conf, 3), + bS_AG_BLKS_RES := int2bit(bs_ag_blks_res, 3), + aTT := bool2bit(att), + mSCR := bool2bit(mscr), + bS_PA_MFRMS := int2bit(bs_pa_mfrms, 3), + spare1 := '00'B, + cBQ3 := cbq3, + spare2 := '0'B, + t3212 := int2oct(t3212, 1) + } + + /* 3GPP TS 44.018 10.5.2.3 */ + template (value) CellOptions ts_CellOptions(integer radio_link_timeout, + BIT3 dtx, + boolean pwrc) := { + radioLinkTimeout := int2bit(radio_link_timeout, 4), + dTX1 := dtx[0] & dtx[1], + pWRC := bool2bit(pwrc), + dtx2 := dtx[2] + } + + /* 3GPP TS 44.018 10.5.2.4 */ + template (value) CellSelectionParameters ts_CellSelectionParameters(integer ms_txpwr_max_cch, + integer cell_reselection_hysteresis, + integer rxlev_access_min, + boolean neci, + boolean acs) := { + mS_TXPWR_MAX_CCH := int2bit(ms_txpwr_max_cch, 5), + cellReselectHysterisis := int2bit(cell_reselection_hysteresis, 3), + rXLEV_Access_Min := int2bit(rxlev_access_min, 6), + nECI := bool2bit(neci), + aCS := bool2bit(acs) + } + + /* 3GPP TS 44.018 10.5.2.29 */ + template (value) RACHControlParameters ts_RACHControlParameters(boolean re, + boolean cell_barr_access, + integer tx_integer, + integer max_retrans, + integer ac_15_to_8, + integer ac_7_to_0) := { + rE := bool2bit(re), + cellBarrAccess := bool2bit(cell_barr_access), + tX_Integer := int2bit(tx_integer, 4), + maxRetrans := int2bit(max_retrans, 2), + aC_15_to_8 := int2oct(ac_15_to_8, 1), + aC_7_to_0 := int2oct(ac_7_to_0, 1) + } + + /* 3GPP TS 44.018 9.1.35 */ + template (value) SI3 ts_SI3(integer cell_id, + template (value) BSSGP_Types.LocationAreaIdentification lai, + template (value) ControlChannelDescription cch_descr, + template (value) CellOptions cell_opt, + template (value) CellSelectionParameters cell_sel_par, + template (value) RACHControlParameters rach_ctrl_par, + OCT4 rest_octets) := { + sI3MessageType := '1B'O, + cellIdentity := int2oct(cell_id, 2), + locationAreaIdentification := lai, + controlChannelDescription := cch_descr, + cellOptions := cell_opt, + cellSelectionParameters := cell_sel_par, + rACHControlParameters := rach_ctrl_par, + sI3RestOctets := rest_octets + } + + + /* 3GPP TS 48.018 11.3.65 */ + const BIT3 RIM_PDU_TYPE_STOP := '000'B; + const BIT3 RIM_PDU_TYPE_SING_REP := '001'B; + const BIT3 RIM_PDU_TYPE_MULT_REP := '010'B; + template (value) RIM_PDU_Indications ts_RIM_PDU_Indications(boolean ack, BIT3 type_ext) := { + iEI := '4F'O, + ext := '1'B, + lengthIndicator := { + length1 := 1 + }, + ack := bool2bit(ack), + pDU_Type_Extension := type_ext, + reserved := '0000'B + } + + /* 3GPP TS 48.018 11.3.67 */ + template (value) RIM_Protocol_Version_Number ts_RIM_Protocol_Version_Number(integer ver) := { + iEI := '55'O, + ext := '1'B, + lengthIndicator := { + length1 := 1 + }, + rIMProtocolVersionNumber := int2oct(ver, 1) + } + + /* 3GPP TS 48.018 11.3.70 */ + const HEX1 RIM_ADDR_GERAN_CELL_ID := '0'H; + const HEX1 RIM_ADDR_UTRAN_RNC_ID := '1'H; + const HEX1 RIM_ADDR_EUTRAN_NODEB_ID := '2'H; + const HEX1 RIM_ADDR_EHRPD_SECTOR_ID := '3'H; + template (value) RIM_Routing_Information ts_RIM_Routing_Information(HEX1 addr_discr, template (value) RIM_Routing_Address addr) := { + iEI := '54'O, + ext := '1'B, + lengthIndicator := { + length1 := 0 /* overwritten */ + }, + rIMRoutingAddressDiscriminator := addr_discr, + spare := '0'H, + rIM_Routing_Address := addr + } + template RIM_Routing_Information tr_RIM_Routing_Information(template HEX1 addr_discr := ?, template RIM_Routing_Address addr := ?) := { + iEI := '54'O, + ext := '1'B, + lengthIndicator := { + length1 := ? + }, + rIMRoutingAddressDiscriminator := addr_discr, + spare := '0'H, + rIM_Routing_Address := addr + } + + template RIM_Routing_Address t_RIM_Routing_Address_cid(template BssgpCellId cid := ?) := { + cell_Identifier := t_Cell_Identifier_V(cid) + } + template RIM_Routing_Address t_RIM_Routing_Address_rncid(template BssgpCellId cid := ?, template integer rnc_id := ?) := { + globalRNCID := t_GlobalRNC_ID_BSSGP(cid, rnc_id) + } + template RIM_Routing_Address t_RIM_Routing_Address_enbid(template BssgpCellId cid := ?, template integer tac := ?, template octetstring gnbid := ?) := { + eNB_Identifier := t_ENB_Identifier_V(cid, tac, gnbid) + } + template RIM_Routing_Address t_RIM_Routing_Address_sector(template octetstring sector := ?) := { + eHRPD_SectorID := sector + } + + function t_Cell_Identifier_V(template BssgpCellId cid) return template Cell_Identifier_V { + var template Cell_Identifier_V ret := { + mccDigit1 := ?, + mccDigit2 := ?, + mccDigit3 := ?, + mncDigit3 := ?, + mncDigit1 := ?, + mncDigit2 := ?, + lac := ?, + rac := ?, + cI_value := ? + } + if (istemplatekind(cid, "omit")) { + return omit; + } else if (istemplatekind(cid, "*")) { + return *; + } else if (istemplatekind(cid, "?")) { + return ?; + } + if (isvalue(cid) and isvalue(cid.ra_id) and isvalue(cid.ra_id.lai)) { + if (isvalue(cid.ra_id.lai.mcc_mnc)) { + ret.mccDigit1 := cid.ra_id.lai.mcc_mnc[0]; + ret.mccDigit2 := cid.ra_id.lai.mcc_mnc[1]; + ret.mccDigit3 := cid.ra_id.lai.mcc_mnc[2]; + ret.mncDigit3 := cid.ra_id.lai.mcc_mnc[3]; + ret.mncDigit1 := cid.ra_id.lai.mcc_mnc[4]; + ret.mncDigit2 := cid.ra_id.lai.mcc_mnc[5]; + } + if (isvalue(cid.ra_id.lai.lac)) { + ret.lac := f_oct_or_wc(cid.ra_id.lai.lac, 2); + } + } + if (isvalue(cid) and isvalue(cid.ra_id)) { + ret.rac := f_oct_or_wc(cid.ra_id.rac, 1); + } + if (isvalue(cid)) { + ret.cI_value := f_oct_or_wc(cid.cell_id, 2); + } + return ret; + } + + function t_GlobalRNC_ID_BSSGP(template BssgpCellId cid, template integer rnc_id) return template GlobalRNC_ID_BSSGP { + var template GlobalRNC_ID_BSSGP ret := { + mccDigit1 := ?, + mccDigit2 := ?, + mccDigit3 := ?, + mncDigit3 := ?, + mncDigit1 := ?, + mncDigit2 := ?, + lac := ?, + rac := ?, + spare := ?, + rNC_ID := ? + } + if (istemplatekind(cid, "omit") and istemplatekind(rnc_id, "omit")) { + return omit; + } else if (istemplatekind(cid, "*") and istemplatekind(rnc_id, "*")) { + return *; + } else if (istemplatekind(cid, "?") and istemplatekind(rnc_id, "?")) { + return ?; + } + if (isvalue(cid) and isvalue(cid.ra_id) and isvalue(cid.ra_id.lai)) { + if (isvalue(cid.ra_id.lai.mcc_mnc)) { + ret.mccDigit1 := cid.ra_id.lai.mcc_mnc[0]; + ret.mccDigit2 := cid.ra_id.lai.mcc_mnc[1]; + ret.mccDigit3 := cid.ra_id.lai.mcc_mnc[2]; + ret.mncDigit3 := cid.ra_id.lai.mcc_mnc[3]; + ret.mncDigit1 := cid.ra_id.lai.mcc_mnc[4]; + ret.mncDigit2 := cid.ra_id.lai.mcc_mnc[5]; + } + if (isvalue(cid.ra_id.lai.lac)) { + ret.lac := f_oct_or_wc(cid.ra_id.lai.lac, 2); + } + } + if (isvalue(cid) and isvalue(cid.ra_id)) { + ret.rac := f_oct_or_wc(cid.ra_id.rac, 1); + } + if (isvalue(rnc_id)) { + ret.spare := '0'H; + ret.rNC_ID := rnc_id; + } + + return ret; + } + + function t_ENB_Identifier_V(template BssgpCellId cid, template integer tac, template octetstring gnbid) return template ENB_Identifier_V { + var template ENB_Identifier_V ret := { + mccDigit1 := ?, + mccDigit2 := ?, + mccDigit3 := ?, + mncDigit3 := ?, + mncDigit1 := ?, + mncDigit2 := ?, + tac := ?, + globaleNBID := ? + } + if (istemplatekind(cid, "omit") and istemplatekind(tac, "omit") and istemplatekind(gnbid, "omit")) { + return omit; + } else if (istemplatekind(cid, "*") and istemplatekind(tac, "*") and istemplatekind(gnbid, "*")) { + return *; + } else if (istemplatekind(cid, "?") and istemplatekind(tac, "?") and istemplatekind(gnbid, "?")) { + return ?; + } + if (isvalue(cid) and isvalue(cid.ra_id) and isvalue(cid.ra_id.lai)) { + if (isvalue(cid.ra_id.lai.mcc_mnc)) { + ret.mccDigit1 := cid.ra_id.lai.mcc_mnc[0]; + ret.mccDigit2 := cid.ra_id.lai.mcc_mnc[1]; + ret.mccDigit3 := cid.ra_id.lai.mcc_mnc[2]; + ret.mncDigit3 := cid.ra_id.lai.mcc_mnc[3]; + ret.mncDigit1 := cid.ra_id.lai.mcc_mnc[4]; + ret.mncDigit2 := cid.ra_id.lai.mcc_mnc[5]; + } + } + if (isvalue(tac)) { + ret.tac := int2oct(valueof(tac), 2); + } + if (isvalue(gnbid)) { + ret.globaleNBID := gnbid; + } + + return ret; + } + + /* 3GPP TS 48.018 11.3.108 */ + template (value) SON_Transfer_Application_Identity_TLV ts_SON_Transfer_Application_Identity_TLV(template (value) octetstring app_id) := { + iEI := '84'O, + ext := '1'B, + lengthIndicator := { + length1 := 0 /* overwritten */ + }, + sON_Transfer_Application_Identity := app_id + } + + + /* 3GPP TS 48.018 10.6.1 */ + template (value) PDU_BSSGP + ts_RAN_INFORMATION_REQUEST(template (value) RIM_Routing_Information dst, + template (value) RIM_Routing_Information src, + template (value) RAN_Information_Request_RIM_Container cont) := { + pDU_BSSGP_RAN_INFORMATION_REQUEST := { + bssgpPduType := '71'O, + destination_Cell_Identifier := dst, + source_Cell_Identifier := src, + rIM_Container := cont + } + } + template PDU_BSSGP + tr_RAN_INFORMATION_REQUEST(template RIM_Routing_Information dst := ?, + template RIM_Routing_Information src := ?, + template RAN_Information_Request_RIM_Container cont := ?) := { + pDU_BSSGP_RAN_INFORMATION_REQUEST := { + bssgpPduType := '71'O, + destination_Cell_Identifier := dst, + source_Cell_Identifier := src, + rIM_Container := cont + } + } + + /* 3GPP TS 48.018 10.6.2 */ + template (value) PDU_BSSGP + ts_PDU_BSSGP_RAN_INFORMATION(template (value) RIM_Routing_Information dst, + template (value) RIM_Routing_Information src, + template (value) RAN_Information_RIM_Container cont) := { + pDU_BSSGP_RAN_INFORMATION := { + bssgpPduType := '70'O, + destination_Cell_Identifier := dst, + source_Cell_Identifier := src, + rIM_Container := cont + } + } + template PDU_BSSGP + tr_PDU_BSSGP_RAN_INFORMATION(template RIM_Routing_Information dst := ?, + template RIM_Routing_Information src := ?, + template RAN_Information_RIM_Container cont := ?) := { + pDU_BSSGP_RAN_INFORMATION := { + bssgpPduType := '70'O, + destination_Cell_Identifier := dst, + source_Cell_Identifier := src, + rIM_Container := cont + } + } + + /* 3GPP TS 48.018 10.6.3 */ + template (value) PDU_BSSGP + ts_PDU_BSSGP_RAN_INFORMATION_ACK(template (value) RIM_Routing_Information dst, + template (value) RIM_Routing_Information src, + template (value) RAN_Information_Ack_RIM_Container cont) := { + pDU_BSSGP_RAN_INFORMATION_ACK := { + bssgpPduType := '72'O, + destination_Cell_Identifier := dst, + source_Cell_Identifier := src, + rIM_Container := cont + } + } + template PDU_BSSGP + tr_PDU_BSSGP_RAN_INFORMATION_ACK(template RIM_Routing_Information dst := ?, + template RIM_Routing_Information src := ?, + template RAN_Information_Ack_RIM_Container cont := ?) := { + pDU_BSSGP_RAN_INFORMATION_ACK := { + bssgpPduType := '72'O, + destination_Cell_Identifier := dst, + source_Cell_Identifier := src, + rIM_Container := cont + } + } + + /* 3GPP TS 48.018 10.6.4 */ + template (value) PDU_BSSGP + ts_PDU_BSSGP_RAN_INFORMATION_ERROR(template (value) RIM_Routing_Information dst, + template (value) RIM_Routing_Information src, + template (value) RAN_Information_Error_RIM_Container cont) := { + pDU_BSSGP_RAN_INFORMATION_ERROR := { + bssgpPduType := '73'O, + destination_Cell_Identifier := dst, + source_Cell_Identifier := src, + rIM_Container := cont + } + } + template PDU_BSSGP + tr_PDU_BSSGP_RAN_INFORMATION_ERROR(template RIM_Routing_Information dst := ?, + template RIM_Routing_Information src := ?, + template RAN_Information_Error_RIM_Container cont := ?) := { + pDU_BSSGP_RAN_INFORMATION_ERROR := { + bssgpPduType := '73'O, + destination_Cell_Identifier := dst, + source_Cell_Identifier := src, + rIM_Container := cont + } + } + + /* 3GPP TS 48.018 10.6.5 */ + template (value) PDU_BSSGP + ts_PDU_BSSGP_RAN_INFORMATION_APPLICATION_ERROR(template (value) RIM_Routing_Information dst, + template (value) RIM_Routing_Information src, + template (value) RAN_Information_Application_Error_RIM_Container cont) := { + pDU_BSSGP_RAN_INFORMATION_APPLICATION_ERROR := { + bssgpPduType := '74'O, + destination_Cell_Identifier := dst, + source_Cell_Identifier := src, + rIM_Container := cont + } + } + template PDU_BSSGP + tr_PDU_BSSGP_RAN_INFORMATION_APPLICATION_ERROR(template RIM_Routing_Information dst := ?, + template RIM_Routing_Information src := ?, + template RAN_Information_Application_Error_RIM_Container cont := ?) := { + pDU_BSSGP_RAN_INFORMATION_APPLICATION_ERROR := { + bssgpPduType := '74'O, + destination_Cell_Identifier := dst, + source_Cell_Identifier := src, + rIM_Container := cont + } + } + /* PDU permitted on PTP BVC only (TS 48.018 Section 5.4.1) */ template (present) PDU_BSSGP tr_BSSGP_PERMITTED_PTP_ONLY := ( {pDU_BSSGP_DL_UNITDATA := ?}, -- cgit v1.2.3