osmo-ttcn3-hacks/library/BSSMAP_Templates.ttcn

2890 lines
80 KiB
Plaintext
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

module BSSMAP_Templates {
/* BSSMAP Templates, building on top of BSSAP_Types from Ericsson.
*
* (C) 2017-2023 by Harald Welte <laforge@gnumonks.org>
* contributions by sysmocom - s.f.m.c. GmbH
* All rights reserved.
*
* Released under the terms of GNU General Public License, Version 2 or
* (at your option) any later version.
*
* SPDX-License-Identifier: GPL-2.0-or-later
*/
import from General_Types all;
import from Osmocom_Types all;
import from Native_Functions all;
import from Misc_Helpers all;
import from GSM_Types all;
import from BSSAP_Types all;
type integer BssmapCause;
type integer SpeechVersion;
type integer Channel;
type integer ChannelMode;
//type octetstring BSSMAP_oldToNewBSSIEs;
// Old BSS to New BSS Information - 48.008 subclause 3.2.2.58
type record BSSMAP_oldToNewBSSIEs
{
BSSAMAP_IE_LastUsedEUTRANPLMNId LastUsedEUTRANPLMNId optional
/* TODO: add other FIELDS here from specs */
}
external function enc_BSSMAP_oldToNewBSSIEs(in BSSMAP_oldToNewBSSIEs val) return octetstring
with { extension "prototype(convert) encode(RAW)" };
/* 48.008 3.2.2.5 - this actually belongs to BSSAP_Types.ttcn */
type enumerated myBSSMAP_Cause {
/* 000 / 001: Normal event */
GSM0808_CAUSE_RADIO_INTERFACE_MESSAGE_FAILURE ('0000000'B),
GSM0808_CAUSE_RADIO_INTERFACE_FAILURE ('0000001'B),
GSM0808_CAUSE_UPLINK_QUALITY ('0000010'B),
GSM0808_CAUSE_UPLINK_STRENGTH ('0000011'B),
GSM0808_CAUSE_DOWNLINK_QUALITY ('0000100'B),
GSM0808_CAUSE_DOWNLINK_STRENGTH ('0000101'B),
GSM0808_CAUSE_DISTANCE ('0000110'B),
GSM0808_CAUSE_O_AND_M_INTERVENTION ('0000111'B),
GSM0808_CAUSE_RESPONSE_TO_MSC_INVOCATION ('0001000'B),
GSM0808_CAUSE_CALL_CONTROL ('0001001'B),
GSM0808_CAUSE_RADIO_INTERFACE_FAILURE_REVERSION ('0001010'B),
GSM0808_CAUSE_HANDOVER_SUCCESSFUL ('0001011'B),
GSM0808_CAUSE_BETTER_CELL ('0001100'B),
GSM0808_CAUSE_DIRECTED_RETRY ('0001101'B),
GSM0808_CAUSE_JOINED_GROUP_CALL_CHANNEL ('0001110'B),
GSM0808_CAUSE_TRAFFIC ('0001111'B),
GSM0808_CAUSE_REDUCE_LOAD_IN_SERVING_CELL ('0010000'B),
GSM0808_CAUSE_TRAFFIC_LOAD_IN_TGT_HIGHER_THAN_IN_SRC_CELL ('0010001'B),
GSM0808_CAUSE_RELOCATION_TRIGGERED ('0010010'B),
GSM0808_CAUSE_REQUSTED_OPT_NOT_AUTHORISED ('0010100'B),
GSM0808_CAUSE_ALT_CHAN_CONFIG_REQUESTED ('0010101'B),
GSM0808_CAUSE_RESP_TO_INT_HO_ENQ_MSG ('0010110'B),
GSM0808_CAUSE_INT_HO_ENQUIRY_REJECT ('0010111'B),
GSM0808_CAUSE_REDUNDANCY_LEVEL_NOT_ADEQUATE ('0011000'B),
/* reserved */
/* 010: Resource unavailable */
GSM0808_CAUSE_EQUIPMENT_FAILURE ('0100000'B),
GSM0808_CAUSE_NO_RADIO_RESOURCE_AVAILABLE ('0100001'B),
GSM0808_CAUSE_RQSTED_TERRESTRIAL_RESOURCE_UNAVAILABLE ('0100010'B),
GSM0808_CAUSE_CCCH_OVERLOAD ('0100011'B),
GSM0808_CAUSE_PROCESSOR_OVERLOAD ('0100100'B),
GSM0808_CAUSE_BSS_NOT_EQUIPPED ('0100101'B),
GSM0808_CAUSE_MS_NOT_EQUIPPED ('0100110'B),
GSM0808_CAUSE_INVALID_CELL ('0100111'B),
GSM0808_CAUSE_TRAFFIC_LOAD ('0101000'B),
GSM0808_CAUSE_PREEMPTION ('0101001'B),
GSM0808_CAUSE_DTM_HO_SGSN_FAILURE ('0101010'B),
GSM0808_CAUSE_DTM_HO_PS_ALLOC_FAILURE ('0101011'B),
/* reserved */
/* 011: Service or option not available, but implemented */
GSM0808_CAUSE_RQSTED_TRANSCODING_RATE_ADAPTION_UNAVAILABLE ('0110000'B),
GSM0808_CAUSE_CIRCUIT_POOL_MISMATCH ('0110001'B),
GSM0808_CAUSE_SWITCH_CIRCUIT_POOL ('0110010'B),
GSM0808_CAUSE_RQSTED_SPEECH_VERSION_UNAVAILABLE ('0110011'B),
GSM0808_CAUSE_LSA_NOT_ALLOWED ('0110100'B),
GSM0808_CAUSE_REQ_CODEC_TYPE_OR_CONFIG_UNAVAIL ('0110101'B),
GSM0808_CAUSE_REQ_A_IF_TYPE_UNAVAIL ('0110110'B),
GSM0808_CAUSE_INVALID_CSG_CELL ('0110111'B),
/* reserved */
/* 100: Service or option not implemented or currently disabled */
GSM0808_CAUSE_REQ_REDUND_LEVEL_NOT_AVAIL ('0111111'B),
GSM0808_CAUSE_CIPHERING_ALGORITHM_NOT_SUPPORTED ('1000000'B),
GSM0808_CAUSE_GERAN_IU_MODE_FAILURE ('1000001'B),
GSM0808_CAUSE_INC_RELOC_NOT_SUPP_DT_PUESBINE_FEATURE ('1000010'B),
GSM0808_CAUSE_ACCESS_RESTRICTED_DUE_TO_SHARED_NETWORKS ('1000011'B),
GSM0808_CAUSE_REQ_CODEC_TYPE_OR_CONFIG_NOT_SUPP ('1000100'B),
GSM0808_CAUSE_REQ_A_IF_TYPE_NOT_SUPP ('1000101'B),
GSM0808_CAUSE_REQ_REDUND_LVL_NOT_SUPP ('1000110'B),
/* reserved */
/* 101: Invalid message */
GSM0808_CAUSE_TERRESTRIAL_CIRCUIT_ALREADY_ALLOCATED ('1010000'B),
GSM0808_CAUSE_INVALID_MESSAGE_CONTENTS ('1010001'B),
GSM0808_CAUSE_INFORMATION_ELEMENT_OR_FIELD_MISSING ('1010010'B),
GSM0808_CAUSE_INCORRECT_VALUE ('1010011'B),
GSM0808_CAUSE_UNKNOWN_MESSAGE_TYPE ('1010100'B),
GSM0808_CAUSE_UNKNOWN_INFORMATION_ELEMENT ('1010101'B),
GSM0808_CAUSE_DTM_HO_INVALID_PS_IND ('1010110'B),
GSM0808_CAUSE_CALL_ID_ALREADY_ALLOC ('1010111'B),
/* reserved */
/* 110: protocol error */
GSM0808_CAUSE_PROTOCOL_ERROR_BETWEEN_BSS_AND_MSC ('1100000'B),
GSM0808_CAUSE_VGCS_VBS_CALL_NON_EXISTANT ('1100001'B),
GSM0808_CAUSE_DTM_HO_TIMER_EXPIRY ('1100010'B)
} with { variant "FIELDLENGTH(7)" };
/* 3GPP TS 48.008 3.2.2.11 Channel Type
* Transparent: Data Rate */
const OCT1 GSM0808_DATA_RATE_TRANSP_32k0 := ('3a'O);
const OCT1 GSM0808_DATA_RATE_TRANSP_28k8 := ('39'O);
const OCT1 GSM0808_DATA_RATE_TRANSP_14k4 := ('18'O);
const OCT1 GSM0808_DATA_RATE_TRANSP_9k6 := ('10'O);
const OCT1 GSM0808_DATA_RATE_TRANSP_4k8 := ('11'O);
const OCT1 GSM0808_DATA_RATE_TRANSP_2k4 := ('12'O);
const OCT1 GSM0808_DATA_RATE_TRANSP_1k2 := ('13'O);
const OCT1 GSM0808_DATA_RATE_TRANSP_600 := ('14'O);
const OCT1 GSM0808_DATA_RATE_TRANSP_1200_75 := ('15'O);
/* 3GPP TS 48.008 3.2.2.11 Channel Type
* Non-Transparent: Radio Interface Data Rate (preferred) */
const OCT1 GSM0808_DATA_RATE_NON_TRANSP_12000_6000 := ('00'O);
const OCT1 GSM0808_DATA_RATE_NON_TRANSP_43k5 := ('34'O);
const OCT1 GSM0808_DATA_RATE_NON_TRANSP_29k0 := ('31'O);
const OCT1 GSM0808_DATA_RATE_NON_TRANSP_14k5 := ('14'O);
const OCT1 GSM0808_DATA_RATE_NON_TRANSP_12k0 := ('10'O);
const OCT1 GSM0808_DATA_RATE_NON_TRANSP_6k0 := ('11'O);
/* 3GPP TS 48.008 3.2.2.11 Channel Type
* Non-Transparent: Allowed Radio Interface Data Rate (all possible allowed) */
const OCT1 GSM0808_DATA_RATE_NON_TRANSP_ALLOWED_43k5 := ('40'O);
const OCT1 GSM0808_DATA_RATE_NON_TRANSP_ALLOWED_32k0 := ('20'O);
const OCT1 GSM0808_DATA_RATE_NON_TRANSP_ALLOWED_29k0 := ('10'O);
const OCT1 GSM0808_DATA_RATE_NON_TRANSP_ALLOWED_14k5 := ('08'O);
const OCT1 GSM0808_DATA_RATE_NON_TRANSP_ALLOWED_12k0 := ('02'O);
const OCT1 GSM0808_DATA_RATE_NON_TRANSP_ALLOWED_6k0 := ('01'O);
type enumerated BSSMAP_LcsCause {
BSSMAP_LCS_CAUSE_UNSPECIFIED ('00000000'B),
BSSMAP_LCS_CAUSE_SYSTEM_FAILURE ('00000001'B),
BSSMAP_LCS_CAUSE_PROTOCOL_ERROR ('00000010'B),
BSSMAP_LCS_CAUSE_DATA_MISSING_IN_REQ ('00000011'B),
BSSMAP_LCS_CAUSE_UNEXP_DATA_IN_REQ ('00000100'B),
BSSMAP_LCS_CAUSE_POS_METH_FAILURE ('00000101'B),
BSSMAP_LCS_CAUSE_TGT_MS_UNREACHABLE ('00000110'B),
BSSMAP_LCS_CAUSE_REQUEST_ABORTED ('00000111'B),
BSSMAP_LCS_CAUSE_FACILITY_NOTSUPP ('00001000'B),
BSSMAP_LCS_CAUSE_INTER_BSC_HO ('00001001'B),
BSSMAP_LCS_CAUSE_INTRA_BSC_HO ('00001010'B),
BSSMAP_LCS_CAUSE_CONGESTION ('00001011'B),
BSSMAP_LCS_CAUSE_INTER_NSE_CHG ('00001100'B),
BSSMAP_LCS_CAUSE_RA_UPDAT ('00001101'B),
BSSMAP_LCS_CAUSE_PTMSI_REALLOC ('00001110'B),
BSSMAP_LCS_CAUSE_GPRS_SUSPENSION ('00001111'B)
} with { variant "FIELDLENGTH(8)" };
template PDU_BSSAP ts_BSSAP_BSSMAP := {
discriminator := '0'B,
spare := '0000000'B,
dlci := omit,
lengthIndicator := 0, /* overwritten by codec */
pdu := {
bssmap := ?
}
}
template PDU_BSSAP tr_BSSAP_BSSMAP := {
discriminator := '0'B,
spare := '0000000'B,
dlci := *,
lengthIndicator := ?,
pdu := {
bssmap := ?
}
}
template PDU_BSSAP ts_BSSAP_DTAP(octetstring dtap, template OCT1 dlci := omit) := {
discriminator := '1'B,
spare := '0000000'B,
dlci := dlci,
lengthIndicator := 0, /* overwritten by codec */
pdu := {
dtap := dtap
}
}
template PDU_BSSAP tr_BSSAP_DTAP := {
discriminator := '1'B,
spare := '0000000'B,
dlci := *,
lengthIndicator := ?,
pdu := {
dtap := ?
}
}
template (value) BSSMAP_IE_Cause ts_BSSMAP_IE_Cause(BssmapCause val) := {
elementIdentifier := '04'O,
lengthIndicator := 0,
causeValue := int2bit(val, 7),
extensionCauseValue := '0'B,
spare1 := omit
}
template BSSMAP_IE_Cause tr_BSSMAP_IE_Cause(template (present) myBSSMAP_Cause val) := {
elementIdentifier := '04'O,
lengthIndicator := ?,
causeValue := f_tr_causeValue(val),
extensionCauseValue := ?,
spare1 := *
}
private function f_tr_causeValue(template (present) myBSSMAP_Cause val)
return template (present) BIT7 {
if (istemplatekind(val, "?")) {
return ?;
} else {
var integer int_val := enum2int(valueof(val));
return int2bit(valueof(int_val), 7);
}
}
template (value) BSSMAP_IE_SpeechVersion ts_BSSMAP_IE_SpeechVersion(SpeechVersion val) := {
elementIdentifier := '40'O,
speechVersionIdentifier := int2bit(val, 7),
spare1_1 := '0'B
}
template (value) BSSMAP_IE_CurrentChannelType1 ts_BSSMAP_IE_CurrentChannelType1(Channel c, ChannelMode cm) := {
elementIdentifier := '31'O,
channel := int2bit(c, 4),
channelMode := int2bit(cm, 4)
}
template (value) BSSMAP_oldToNewBSSIEs ts_BSSMAP_oldToNewBSSIEs(template (omit) BSSAMAP_IE_LastUsedEUTRANPLMNId last_used_eutran_plmn) := {
LastUsedEUTRANPLMNId := last_used_eutran_plmn
}
function f_ts_BSSMAP_oldToNewBSSIEs(template (omit) BSSAMAP_IE_LastUsedEUTRANPLMNId last_used_eutran_plmn)
return template (omit) BSSMAP_oldToNewBSSIEs {
if (istemplatekind(last_used_eutran_plmn, "omit")) {
return omit;
} else {
return ts_BSSMAP_oldToNewBSSIEs(last_used_eutran_plmn);
}
}
template (value) BSSMAP_IE_OldToNewBSSInfo ts_BSSMAP_IE_OldToNewBSSInfo(template (value) BSSMAP_oldToNewBSSIEs val) := {
elementIdentifier := '3A'O,
lengthIndicator := 0, /* overwritten by codec */
oldToNewBSSIEs := enc_BSSMAP_oldToNewBSSIEs(valueof(val))
}
function f_ts_BSSMAP_IE_OldToNewBSSInfo(template (omit) BSSMAP_oldToNewBSSIEs val)
return template (omit) BSSMAP_IE_OldToNewBSSInfo {
if (istemplatekind(val, "omit")) {
return omit;
} else {
return ts_BSSMAP_IE_OldToNewBSSInfo(val);
}
}
template BSSMAP_IE_OldToNewBSSInfo tr_BSSMAP_IE_OldToNewBSSInfo(template (value) BSSMAP_oldToNewBSSIEs val) := {
elementIdentifier := '3A'O,
lengthIndicator := ?, /* overwritten by codec */
oldToNewBSSIEs := enc_BSSMAP_oldToNewBSSIEs(valueof(val))
}
function f_tr_BSSMAP_IE_OldToNewBSSInfo(template BSSMAP_oldToNewBSSIEs val := *)
return template BSSMAP_IE_OldToNewBSSInfo {
if (istemplatekind(val, "*")) {
return *;
} else if (istemplatekind(val, "?")) {
return ?;
} else if (istemplatekind(val, "omit")) {
return omit;
} else {
return tr_BSSMAP_IE_OldToNewBSSInfo(val);
}
}
template (value) BSSMAP_IE_Osmo_OsmuxSupport tr_BSSMAP_IE_Osmo_OsmuxSupport := {
elementIdentifier := 'F0'O
}
private function f_enc_osmux_support(boolean osmux_enabled) return template (omit) BSSMAP_IE_Osmo_OsmuxSupport {
if (osmux_enabled) {
return tr_BSSMAP_IE_Osmo_OsmuxSupport;
}
return omit;
}
template (value) PDU_BSSAP ts_BSSMAP_Reset(BssmapCause cause, boolean osmux_enabled := false) modifies ts_BSSAP_BSSMAP := {
pdu := {
bssmap := {
reset := {
messageType := '30'O,
cause := ts_BSSMAP_IE_Cause(cause),
a_InterfaceSelectorForReset := omit,
osmuxSupport := f_enc_osmux_support(osmux_enabled)
}
}
}
}
template PDU_BSSAP tr_BSSMAP_Reset(boolean osmux_enabled := false) modifies tr_BSSAP_BSSMAP := {
pdu := {
bssmap := {
reset := {
messageType := '30'O,
cause := ?,
a_InterfaceSelectorForReset := *,
osmuxSupport := f_enc_osmux_support(osmux_enabled)
}
}
}
}
template (value) PDU_BSSAP ts_BSSMAP_ResetAck(boolean osmux_enabled := false) modifies ts_BSSAP_BSSMAP := {
pdu := {
bssmap := {
resetAck := {
messageType := '31'O,
a_InterfaceSelectorForReset := omit,
osmuxSupport := f_enc_osmux_support(osmux_enabled)
}
}
}
}
template PDU_BSSAP tr_BSSMAP_ResetAck(boolean osmux_enabled := false) modifies tr_BSSAP_BSSMAP := {
pdu := {
bssmap := {
resetAck := {
messageType := '31'O,
a_InterfaceSelectorForReset := *,
osmuxSupport := f_enc_osmux_support(osmux_enabled)
}
}
}
}
template BSSMAP_IE_CellIdentifier ts_BSSMAP_IE_CellID := {
elementIdentifier := '05'O,
lengthIndicator := 0,
cellIdentifierDiscriminator := '0000'B,
spare1_4 := '0000'B,
cellIdentification := ?
}
template BSSMAP_IE_CellIdentifier tr_BSSMAP_IE_CellID := {
elementIdentifier := '05'O,
lengthIndicator := ?,
cellIdentifierDiscriminator := ?,
spare1_4 := '0000'B,
cellIdentification := ?
}
type uint16_t BssmapLAC;
type uint16_t BssmapCI;
type uint16_t BssmapSAC;
template BSSMAP_IE_CellIdentifier ts_CellId_CGI(hexstring mcc, hexstring mnc, BssmapLAC lac, BssmapCI ci)
modifies ts_BSSMAP_IE_CellID := {
cellIdentification := {
cI_CGI := ts_BSSMAP_CI_CGI(mcc, mnc, lac, ci)
}
}
template (present) BSSMAP_IE_CellIdentifier tr_CellId_CGI(template (present) OCT3 mcc_mnc,
template (present) BssmapLAC lac,
template (present) BssmapCI ci)
modifies tr_BSSMAP_IE_CellID := {
cellIdentification := {
cI_CGI := tr_BSSMAP_CI_CGI(mcc_mnc, lac, ci)
}
}
template (value) BSSMAP_IE_CellIdentifier ts_CellID_LAC_CI(BssmapLAC lac, BssmapCI ci)
modifies ts_BSSMAP_IE_CellID := {
cellIdentification := {
cI_LAC_CI := {
lac := int2oct(lac, 2),
ci := int2oct(ci, 2)
}
}
}
template (present) BSSMAP_IE_CellIdentifier tr_CellID_LAC_CI(template (present) BssmapLAC lac,
template (present) BssmapCI ci)
modifies tr_BSSMAP_IE_CellID := {
cellIdentification := {
cI_LAC_CI := {
lac := f_tr_LAC(lac),
ci := f_tr_CI(ci)
}
}
}
template BSSMAP_IE_CellIdentifier ts_CellId_CI(BssmapCI ci)
modifies ts_BSSMAP_IE_CellID := {
cellIdentification := {
cI_CI := int2oct(ci, 2)
}
}
template (present) BSSMAP_IE_CellIdentifier tr_CellId_CI(template (present) BssmapCI ci)
modifies tr_BSSMAP_IE_CellID := {
cellIdentification := {
cI_CI := f_tr_CI(ci)
}
}
template BSSMAP_IE_CellIdentifier ts_CellId_none
modifies ts_BSSMAP_IE_CellID := {
cellIdentification := {
cI_noCell := ''O
}
}
template BSSMAP_IE_CellIdentifier tr_CellId_none
modifies tr_BSSMAP_IE_CellID := {
cellIdentification := {
cI_noCell := ''O
}
}
template (value) BSSMAP_IE_CellIdentifier ts_CellID_SAI(OCT3 mcc_mnc, BssmapLAC lac, BssmapSAC sac)
modifies ts_BSSMAP_IE_CellID := {
cellIdentification := {
cI_SAI := {
mcc_mnc := mcc_mnc,
lac := int2oct(lac, 2),
sac := int2oct(sac, 2)
}
}
}
template (present) BSSMAP_IE_CellIdentifier tr_CellID_SAI(template (present) OCT3 mcc_mnc,
template (present) BssmapLAC lac,
template (present) BssmapSAC sac)
modifies tr_BSSMAP_IE_CellID := {
cellIdentification := {
cI_SAI := {
mcc_mnc := mcc_mnc,
lac := f_tr_LAC(lac),
sac := f_tr_SAC(sac)
}
}
}
private function f_tr_LAC(template (present) BssmapLAC lac)
return template (present) OCT2 {
if (istemplatekind(lac, "?")) {
return ?;
} else {
return int2oct(valueof(lac), 2);
}
}
private function f_tr_SAC(template (present) BssmapSAC sac)
return template (present) OCT2 {
if (istemplatekind(sac, "?")) {
return ?;
} else {
return int2oct(valueof(sac), 2);
}
}
private function f_tr_CI(template (present) BssmapCI ci)
return template (present) OCT2 {
if (istemplatekind(ci, "?")) {
return ?;
} else {
return int2oct(valueof(ci), 2);
}
}
template (value) BSSMAP_IE_Layer3Information ts_BSSMAP_IE_L3Info(template (value) octetstring l3info) := {
elementIdentifier := '17'O,
lengthIndicator := 0,
layer3info := l3info
}
template (present) BSSMAP_IE_Layer3Information tr_BSSMAP_IE_L3Info(template (present) octetstring l3info) := {
elementIdentifier := '17'O,
lengthIndicator := ?,
layer3info := l3info
}
template PDU_BSSAP ts_BSSMAP_ComplL3(BSSMAP_IE_CellIdentifier cell_id, octetstring l3_info)
modifies ts_BSSAP_BSSMAP := {
pdu := {
bssmap := {
completeLayer3Information := {
messageType := '57'O,
cellIdentifier := cell_id,
layer3Information := ts_BSSMAP_IE_L3Info(l3_info),
chosenChannel := omit,
lSAIdentifier := omit,
aPDU := omit,
codecList := omit,
redirectAttemptFlag := omit,
sendSequenceNumber := omit,
iMSI := omit
}
}
}
}
template PDU_BSSAP tr_BSSMAP_ComplL3(template octetstring l3_info := ?,
template BSSMAP_IE_CellIdentifier cell_id := ?,
template BSSMAP_IE_SpeechCodecList codec_list := *)
modifies tr_BSSAP_BSSMAP := {
pdu := {
bssmap := {
completeLayer3Information := {
messageType := '57'O,
cellIdentifier := cell_id,
layer3Information := tr_BSSMAP_IE_L3Info(l3_info),
chosenChannel := *,
lSAIdentifier := *,
aPDU := *,
codecList := codec_list,
redirectAttemptFlag := *,
sendSequenceNumber := *,
iMSI := *
}
}
}
}
template BSSMAP_IE_CellIdentifierList ts_BSSMAP_IE_CidList(template BSSMAP_FIELD_CellIdentificationList cid_list) := {
elementIdentifier := '1A'O,
lengthIndicator := 0, /* overwritten */
cellIdentifierDiscriminator := '0000'B, /* overwritten */
spare1_4 := '0000'B,
cellIdentificationList := cid_list
}
const OCT1 ChRate_ANY := '00'O;
const OCT1 ChRate_TCHF := '08'O;
const OCT1 ChRate_TCHH := '09'O;
const OCT1 ChRate_TCHForH_Fpref := '0A'O;
const OCT1 ChRate_TCHForH_Hpref := '0B'O;
const OCT1 ChRate_TCHForH_Fpref_nochg := '1A'O;
const OCT1 ChRate_TCHForH_Hpref_nochg := '1B'O;
const OCT1 ChRate_TCHForH := '0F'O;
const OCT1 ChRate_TCHForH_nochg := '1F'O;
const OCT1 Spdi_TCHF_FR := '01'O;
const OCT1 Spdi_TCHF_EFR := '11'O;
const OCT1 Spdi_TCHF_AMR := '21'O;
const OCT1 Spdi_TCHH_HR := '05'O;
const OCT1 Spdi_TCHH_AMR := '25'O;
template (value) BSSMAP_IE_ChannelType ts_BSSMAP_IE_ChannelType := {
elementIdentifier := '0B'O, /* overwritten */
lengthIndicator := 0, /* overwritten */
speechOrDataIndicator := '0001'B, /* speech */
spare1_4 := '0000'B,
channelRateAndType := ChRate_TCHF,
speechId_DataIndicator := Spdi_TCHF_FR
}
template (present) BSSMAP_IE_ChannelType tr_BSSMAP_IE_ChannelType(template (present) BIT4 speech_data_ind,
template (present) OCT1 chan_rate_type,
template (present) octetstring speech_id) := {
elementIdentifier := '0B'O,
lengthIndicator := ?,
speechOrDataIndicator := speech_data_ind,
spare1_4 := '0000'B,
channelRateAndType := chan_rate_type,
speechId_DataIndicator := speech_id
}
template (value) BSSMAP_IE_ChannelType ts_BSSMAP_IE_ChannelTypeCTM modifies ts_BSSMAP_IE_ChannelType := {
speechOrDataIndicator := '0100'B /* speech + CTM */
}
template (value) BSSMAP_IE_ChannelType ts_BSSMAP_IE_ChannelTypeCSD := {
elementIdentifier := '0B'O, /* overwritten */
lengthIndicator := 0, /* overwritten */
speechOrDataIndicator := '0010'B, /* data */
spare1_4 := '0000'B,
channelRateAndType := ChRate_TCHF,
speechId_DataIndicator := '10'O /* 9600 bps / transparent */
}
template (value) BSSMAP_IE_ChannelType ts_BSSMAP_IE_ChannelTypeSIGNAL := {
elementIdentifier := '0B'O, /* overwritten */
lengthIndicator := 0, /* overwritten */
speechOrDataIndicator := '0011'B, /* data */
spare1_4 := '0000'B,
channelRateAndType := ChRate_ANY,
speechId_DataIndicator := '00'O /* spare */
}
template (value) BSSMAP_IE_EncryptionInformation ts_BSSMAP_IE_EncrInfo(OCT8 kc, OCT1 algs := '05'O) := {
elementIdentifier := '0A'O,
lengthIndicator := 0, /* overwritten */
permittedAlgorithms := algs,
key := kc
}
template BSSMAP_IE_EncryptionInformation tr_BSSMAP_IE_EncrInfo(template OCT8 kc := ?, template OCT1 algs := ?) := {
elementIdentifier := '0A'O,
lengthIndicator := ?, /* overwritten */
permittedAlgorithms := algs,
key := kc
}
template BSSMAP_IE_ChosenEncryptionAlgorithm ts_BSSMAP_IE_ChosenEncryptionAlgorithm(OCT1 algorithmIdentifier) := {
elementIdentifier := '2C'O,
algorithmIdentifier := algorithmIdentifier
}
template BSSMAP_IE_ChosenEncryptionAlgorithm tr_BSSMAP_IE_ChosenEncryptionAlgorithm(template OCT1 algorithmIdentifier := ?) := {
elementIdentifier := '2C'O,
algorithmIdentifier := algorithmIdentifier
}
template (value) BSSMAP_IE_CircuitIdentityCode ts_BSSMAP_IE_CIC(uint11_t span, uint5_t ts) := {
elementIdentifier := '01'O, /* overwritten */
cicHigh := bit2oct(substr(int2bit(span, 11) << 5, 0, 8)),
cicLow := bit2oct((substr(int2bit(span, 11), 8, 3) << 5) & int2bit(ts, 5))
}
function f_bssmap_ie_cic_2_int(BSSMAP_IE_CircuitIdentityCode cic_ie) return integer {
var integer cic := (oct2int(cic_ie.cicHigh) * 256) + oct2int(cic_ie.cicLow);
return cic;
}
template (value) BSSMAP_IE_AoIP_TransportLayerAddress ts_BSSMAP_IE_AoIP_TLA(BSSMAP_FIELD_IPAddress addr,
uint16_t udp_port,
integer len) := {
elementIdentifier := '7C'O,
lengthIndicator := len, /* overwritten */
ipAddress := addr,
uDPPortValue := udp_port
}
template (value) BSSMAP_IE_AoIP_TransportLayerAddress ts_BSSMAP_IE_AoIP_TLA4(OCT4 ip, uint16_t pt) :=
ts_BSSMAP_IE_AoIP_TLA({ipv4:=ip}, pt, 6);
template (value) BSSMAP_IE_AoIP_TransportLayerAddress ts_BSSMAP_IE_AoIP_TLA6(OCT16 ip, uint16_t pt) :=
ts_BSSMAP_IE_AoIP_TLA({ipv6:=ip}, pt, 18);
function f_ts_BSSMAP_IE_AoIP_TLA(charstring addr, uint16_t udp_port)
return template (value) BSSMAP_IE_AoIP_TransportLayerAddress {
if (f_addr_is_ipv6(addr)) {
var OCT16 ip6 := f_inet6_addr(addr);
return ts_BSSMAP_IE_AoIP_TLA6(ip6, udp_port);
} else {
var OCT4 ip := f_inet_addr(addr);
return ts_BSSMAP_IE_AoIP_TLA4(ip, udp_port);
}
}
template BSSMAP_IE_AoIP_TransportLayerAddress tr_BSSMAP_IE_AoIP_TLA(template BSSMAP_FIELD_IPAddress addr,
template uint16_t udp_port,
template integer len := ?) := {
elementIdentifier := '7C'O,
lengthIndicator := len,
ipAddress := addr,
uDPPortValue := udp_port
}
template BSSMAP_IE_AoIP_TransportLayerAddress tr_BSSMAP_IE_AoIP_TLA4(template OCT4 ip, template uint16_t pt) :=
tr_BSSMAP_IE_AoIP_TLA({ipv4:=ip}, pt, 6);
template BSSMAP_IE_AoIP_TransportLayerAddress tr_BSSMAP_IE_AoIP_TLA6(template OCT16 ip, template uint16_t pt) :=
tr_BSSMAP_IE_AoIP_TLA({ipv6:=ip}, pt, 18);
function f_tr_BSSMAP_IE_AoIP_TLA(charstring addr, template uint16_t udp_port)
return template BSSMAP_IE_AoIP_TransportLayerAddress {
if (f_addr_is_ipv6(addr)) {
var OCT16 ip6 := f_inet6_addr(addr);
return tr_BSSMAP_IE_AoIP_TLA6(ip6, udp_port);
} else {
var OCT4 ip := f_inet_addr(addr);
return tr_BSSMAP_IE_AoIP_TLA4(ip, udp_port);
}
}
template (present) BSSMAP_IE_KC128 tr_BSSMAP_IE_Kc128(template (present) OCT16 kc128) := {
elementIdentifier := '83'O,
kC128_Value := kc128
}
template (value) BSSMAP_IE_KC128 ts_BSSMAP_IE_Kc128(OCT16 kc128) := {
elementIdentifier := '83'O,
kC128_Value := kc128
}
/* 3.2.2.103 */
template (value) BSSMAP_FIELD_CodecElement ts_CodecBase := {
codecType := GSM_FR,
tF := '0'B,
pT := '0'B,
pI := '0'B,
fI := '1'B,
extendedCodecType := omit,
s0_7 := omit,
s8_15 := omit
}
template (value) BSSMAP_FIELD_CodecElement ts_CodecFR modifies ts_CodecBase := {
codecType := GSM_FR
}
template (value) BSSMAP_FIELD_CodecElement ts_CodecEFR modifies ts_CodecBase := {
codecType := GSM_EFR
}
template (value) BSSMAP_FIELD_CodecElement ts_CodecHR modifies ts_CodecBase := {
codecType := GSM_HR
}
template (value) BSSMAP_FIELD_CodecElement ts_CodecAMR_F modifies ts_CodecBase := {
codecType := FR_AMR,
s0_7 := '11111111'B,
s8_15 := '01010111'B /* S11, S13 and S15 are reserved and coded with zeroes */
}
template (value) BSSMAP_FIELD_CodecElement ts_CodecAMR_H modifies ts_CodecBase := {
codecType := HR_AMR,
s0_7 := '00111111'B,
s8_15 := '00000111'B /* S6 - S7 and S11 S15 are reserved and coded with zeroes */
}
template (value) BSSMAP_FIELD_CodecElement ts_CodecAMR_WB modifies ts_CodecBase := {
codecType := FR_AMR_WB,
s0_7 := '00000001'B
}
template (value) BSSMAP_FIELD_CodecElement ts_CodecCSData modifies ts_CodecBase := {
codecType := CodecExtension,
tF := '0'B, /* Spare */
pT := '0'B, /* CSDoTDM */
pI := '1'B, /* CSDoIP */
fI := '0'B, /* Spare */
extendedCodecType := 'FD'O, /* CSData */
s0_7 := '00000000'B /* R2, R3, Spare */
}
template BSSMAP_IE_SpeechCodecList ts_BSSMAP_IE_CodecList(template BSSMAP_FIELD_CodecElements elem) := {
elementIdentifier := '7D'O,
lengthIndicator := 0, /* overwritten */
codecElements := valueof(elem)
}
template BSSMAP_IE_SpeechCodec ts_BSSMAP_IE_SpeechCodec(template BSSMAP_FIELD_CodecElements elem) := {
elementIdentifier := '7E'O,
lengthIndicator := 0, /* overwritten */
codecElements := valueof(elem)
}
function ts_BSSMAP_IE_CallIdentifier(template (omit) OCT4 cid) return template (omit) BSSMAP_IE_CallIdentifier {
if (istemplatekind(cid, "omit")) {
return omit;
} else {
var template (present) BSSMAP_IE_CallIdentifier ie := {
elementIdentifier := '7F'O,
callIdentifierInfo := cid
}
return ie;
}
}
function tr_BSSMAP_IE_CallIdentifier(template OCT4 cid) return template BSSMAP_IE_CallIdentifier {
if (istemplatekind(cid, "*")) {
return *;
} else if (istemplatekind(cid, "omit")) {
return omit;
} else {
var template BSSMAP_IE_CallIdentifier ie := {
elementIdentifier := '7F'O,
callIdentifierInfo := cid
}
return ie;
}
}
template (present) BSSMAP_IE_Osmo_OsmuxCID tr_OsmuxCID(template (present) INT1 cid := ?) := {
elementIdentifier := 'F1'O,
osmuxCID := cid
}
template (value) BSSMAP_IE_Osmo_OsmuxCID ts_OsmuxCID(INT1 cid) := {
elementIdentifier := 'F1'O,
osmuxCID := cid
}
template PDU_BSSAP
ts_BSSMAP_AssignmentReq(template BSSMAP_IE_CircuitIdentityCode cic := omit,
template BSSMAP_IE_AoIP_TransportLayerAddress aoip := omit,
template BSSMAP_IE_Osmo_OsmuxCID osmuxCID := omit)
modifies ts_BSSAP_BSSMAP := {
pdu := {
bssmap := {
assignmentRequest := {
messageType :='01'O, /* overwritten */
channelType := ts_BSSMAP_IE_ChannelType,
layer3HeaderInfo := omit,
priority := omit,
circuitIdentityCode := cic,
downLinkDTX_Flag := omit,
interferenceBandToBeUsed := omit,
classmarkInformationType2 := omit,
groupCallReference := omit,
talkerFlag := omit,
configurationEvolutionIndication := omit,
lsaAccesControlSuppression := omit,
serviceHandover := omit,
encryptionInformation := omit,
talkerPriority := omit,
aoIPTransportLayer := aoip,
codecList := omit,
callIdentifier := omit,
kC128 := omit,
globalCallReference := omit,
lCLS_Configuration := omit,
lCLS_ConnectionStatusControl := omit,
lCLS_CorrelationNotNeeded := omit,
osmuxCID := osmuxCID
}
}
}
}
template PDU_BSSAP tr_BSSMAP_AssignmentReq(template BSSMAP_IE_CircuitIdentityCode cic := *,
template BSSMAP_IE_AoIP_TransportLayerAddress aoip := *,
template BSSMAP_IE_Osmo_OsmuxCID osmuxCID := *)
modifies tr_BSSAP_BSSMAP := {
pdu := {
bssmap := {
assignmentRequest := {
messageType :='01'O, /* overwritten */
channelType := ?,
layer3HeaderInfo := *,
priority := *,
circuitIdentityCode := cic,
downLinkDTX_Flag := *,
interferenceBandToBeUsed := *,
classmarkInformationType2 := *,
groupCallReference := *,
talkerFlag := *,
configurationEvolutionIndication := *,
lsaAccesControlSuppression := *,
serviceHandover := *,
encryptionInformation := *,
talkerPriority := *,
aoIPTransportLayer := aoip,
codecList := *,
callIdentifier := *,
kC128 := *,
globalCallReference := *,
lCLS_Configuration := *,
lCLS_ConnectionStatusControl := *,
lCLS_CorrelationNotNeeded := *,
osmuxCID := osmuxCID
}
}
}
}
template PDU_BSSAP
ts_BSSMAP_AssignmentComplete(template BSSMAP_IE_CircuitIdentityCode cic := omit,
template BSSMAP_IE_AoIP_TransportLayerAddress aoip := omit,
template BSSMAP_IE_SpeechCodec speechCodec := omit,
template BSSMAP_IE_Osmo_OsmuxCID osmuxCID := omit)
modifies ts_BSSAP_BSSMAP := {
pdu := {
bssmap := {
assignmentComplete := {
messageType :='02'O, /* overwritten */
rR_Cause := omit,
circuitIdentityCode := cic,
cellIdentifier := omit,
chosenChannel := omit,
chosenEncryptionAlgorithm := omit,
circuitPool := omit,
speechVersion := omit,
lSAIdentifier := omit,
talkerPriority := omit,
aoIPTransportLayer := aoip,
speechCodec := speechCodec,
codecList := omit,
lCLS_BSS_Status := omit,
osmuxCID := osmuxCID
}
}
}
}
template PDU_BSSAP tr_BSSMAP_AssignmentComplete(template BSSMAP_IE_CircuitIdentityCode cic := *,
template BSSMAP_IE_AoIP_TransportLayerAddress aoip := *,
template BSSMAP_IE_Osmo_OsmuxCID osmuxCID := *)
modifies tr_BSSAP_BSSMAP := {
pdu := {
bssmap := {
assignmentComplete := {
messageType := '02'O, /* overwritten */
rR_Cause := *,
circuitIdentityCode := cic,
cellIdentifier := *,
chosenChannel := *,
chosenEncryptionAlgorithm := *,
circuitPool := *,
speechVersion := *,
lSAIdentifier := *,
talkerPriority := *,
aoIPTransportLayer := aoip,
speechCodec := *,
codecList := *,
lCLS_BSS_Status := *,
osmuxCID := osmuxCID
}
}
}
}
template PDU_BSSAP tr_BSSMAP_AssignmentFail modifies tr_BSSAP_BSSMAP := {
pdu := {
bssmap := {
assignmentFailure := {
messageType := '03'O, /* overwritten */
rR_Cause := *,
circuitPool := *,
circuitPoolList := *,
talkerPriority := *,
codecList := *
}
}
}
}
template (value) PDU_BSSAP ts_BSSMAP_ClearCommand(BssmapCause cause)
modifies ts_BSSAP_BSSMAP := {
pdu := {
bssmap := {
clearCommand := {
messageType := '20'O, /* overwritten */
layer3HeaderInfo := omit,
cause := ts_BSSMAP_IE_Cause(cause),
cSFB_Indication := omit
}
}
}
}
template (value) PDU_BSSAP ts_BSSMAP_ClearCommandCSFB(BssmapCause cause)
modifies ts_BSSMAP_ClearCommand := {
pdu := {
bssmap := {
clearCommand := {
cSFB_Indication := {
elementIdentifier := '8F'O
}
}
}
}
}
template PDU_BSSAP tr_BSSMAP_ClearCommand modifies tr_BSSAP_BSSMAP := {
pdu := {
bssmap := {
clearCommand := {
messageType := '20'O, /* overwritten */
layer3HeaderInfo := *,
cause := ?,
cSFB_Indication := *
}
}
}
}
template PDU_BSSAP tr_BSSMAP_ClearCommandCSFB modifies tr_BSSAP_BSSMAP := {
pdu := {
bssmap := {
clearCommand := {
messageType := '20'O, /* overwritten */
layer3HeaderInfo := *,
cause := ?,
cSFB_Indication := {
elementIdentifier := '8F'O
}
}
}
}
}
template (value) PDU_BSSAP ts_BSSMAP_ClearComplete
modifies ts_BSSAP_BSSMAP := {
pdu := {
bssmap := {
clearComplete := {
messageType := '21'O /* overwritten */
}
}
}
}
template PDU_BSSAP tr_BSSMAP_ClearComplete modifies tr_BSSAP_BSSMAP := {
pdu := {
bssmap := {
clearComplete := {
messageType := '21'O
}
}
}
}
template (value) PDU_BSSAP ts_BSSMAP_ClearRequest(BssmapCause cause)
modifies ts_BSSAP_BSSMAP := {
pdu := {
bssmap := {
clearRequest := {
messageType := '22'O, /* overwritten */
cause := ts_BSSMAP_IE_Cause(cause)
}
}
}
}
template PDU_BSSAP tr_BSSMAP_ClearRequest modifies tr_BSSAP_BSSMAP := {
pdu := {
bssmap := {
clearRequest := {
messageType := '22'O, /* overwritten */
cause := ?
}
}
}
}
template PDU_BSSAP ts_BSSMAP_HandoverRequired(BssmapCause cause,
template BSSMAP_FIELD_CellIdentificationList cid_list,
template (omit) BSSMAP_oldToNewBSSIEs oldToNewBSSIEs := omit)
modifies ts_BSSAP_BSSMAP := {
pdu := {
bssmap := {
handoverRequired := {
messageType := '11'O,
cause := ts_BSSMAP_IE_Cause(cause),
responseRequest := omit,
cellIdentifierList := ts_BSSMAP_IE_CidList(cid_list),
circuitPoolList := omit,
currentChannelType1 := omit,
speechVersion := omit,
queueingIndicator := omit,
oldToNewBSSInfo := f_ts_BSSMAP_IE_OldToNewBSSInfo(oldToNewBSSIEs),
sourceToTargetRNCTransparentInfo := omit,
sourceToTargetRNCTransparentInfoCDMA := omit,
gERANClassmark := omit,
talkerPriority := omit,
speechCodec := omit,
cSG_Identifier := omit
}
}
}
}
template PDU_BSSAP tr_BSSMAP_HandoverRequired(template BSSMAP_oldToNewBSSIEs oldToNewBSSIEs := *,
template (present) BSSMAP_FIELD_CellIdentificationList cid_list := ?)
modifies tr_BSSAP_BSSMAP := {
pdu := {
bssmap := {
handoverRequired := {
messageType := '11'O,
cellIdentifierList := {
cellIdentificationList := cid_list
},
oldToNewBSSInfo := f_tr_BSSMAP_IE_OldToNewBSSInfo(oldToNewBSSIEs)
}
}
}
}
template PDU_BSSAP tr_BSSMAP_HandoverRequiredReject modifies tr_BSSAP_BSSMAP := {
pdu := {
bssmap := {
handoverRequiredReject := {
messageType := '1A'O
}
}
}
}
template PDU_BSSAP tr_BSSMAP_HandoverCommand
modifies tr_BSSAP_BSSMAP := {
pdu := {
bssmap := {
handoverCommand := {
messageType := '13'O
}
}
}
}
template PDU_BSSAP tr_BSSMAP_HandoverSucceeded
modifies tr_BSSAP_BSSMAP := {
pdu := {
bssmap := {
handoverSucceeded := {
messageType := '15'O
}
}
}
}
template (value) PDU_BSSAP ts_BSSMAP_HandoverCommand(octetstring layer3info)
modifies ts_BSSAP_BSSMAP := {
pdu := {
bssmap := {
handoverCommand := {
messageType := '13'O,
layer3Information := {
elementIdentifier := '17'O,
lengthIndicator := 0,
layer3info := layer3info
},
cellIdentifier := omit,
newBSSToOldBSSInfo := omit,
talkerPriority := omit
}
}
}
}
template PDU_BSSAP tr_BSSMAP_HandoverFailure modifies tr_BSSAP_BSSMAP := {
pdu := {
bssmap := {
handoverFailure := {
messageType := '16'O,
cause := ?,
rR_Cause := *,
circuitPool := *,
circuitPoolList := *,
gERANClassmark := *,
newBSSToOldBSSInfo := *,
interSystemInformation := *,
talkerPriority := *,
codecList := *
}
}
}
}
template PDU_BSSAP tr_BSSMAP_HandoverRequest(template BSSMAP_IE_EncryptionInformation encryptionInformation := *,
template BSSMAP_IE_ChosenEncryptionAlgorithm chosenEncryptionAlgorithm := *,
template BSSMAP_IE_KC128 kC128 := *,
template BSSMAP_IE_SpeechCodecList codecList := *
)
modifies tr_BSSAP_BSSMAP := {
pdu := {
bssmap := {
handoverRequest := {
messageType := '10'O,
encryptionInformation := encryptionInformation,
chosenEncryptionAlgorithm := chosenEncryptionAlgorithm,
codecList := codecList,
kC128 := kC128
}
}
}
}
template PDU_BSSAP ts_BSSMAP_HandoverRequest(
template BSSMAP_IE_CircuitIdentityCode cic := omit,
template BSSMAP_IE_AoIP_TransportLayerAddress aoip_tla := omit,
template BSSMAP_IE_CellIdentifier cell_id_target := ts_CellID_LAC_CI(1, 0),
template BSSMAP_IE_CellIdentifier cell_id_source := ts_CellID_LAC_CI(1, 1),
template (omit) BSSMAP_oldToNewBSSIEs oldToNewBSSIEs := omit,
template BSSMAP_IE_EncryptionInformation encryptionInformation := ts_BSSMAP_IE_EncrInfo('0000000000000000'O,'01'O),
template (omit) BSSMAP_IE_ChosenEncryptionAlgorithm chosenEncryptionAlgorithm := omit,
template (omit) BSSMAP_IE_KC128 kC128 := omit,
template (omit) BSSMAP_IE_SpeechCodecList codecList := omit
)
modifies ts_BSSAP_BSSMAP := {
pdu := {
bssmap := {
handoverRequest := {
messageType := '10'O,
channelType := ts_BSSMAP_IE_ChannelType,
encryptionInformation := encryptionInformation,
classmarkInformationType := {
classmarkInformationType1 := {
elementIdentifier := '1D'O,
rf_PowerCapability := '000'B,
a5_1 := '0'B,
esind := '0'B,
revisionLevel := '10'B,
spare1_1 := '0'B
}
},
cellIdentifierSource := cell_id_source,
priority := omit,
circuitIdentityCode := cic,
downLinkDTX_Flag := omit,
cellIdentifierTarget := cell_id_target,
interferenceBandToBeUsed := omit,
cause := omit,
classmarkInformationType3 := omit,
currentChannelType1 := omit,
speechVersion := omit,
groupCallReference := omit,
talkerFlag := omit,
configurationEvolutionIndication := omit,
chosenEncryptionAlgorithm := chosenEncryptionAlgorithm,
oldToNewBSSInfo := f_ts_BSSMAP_IE_OldToNewBSSInfo(oldToNewBSSIEs),
lSAInformation := omit,
lSAAccessControlSuppression := omit,
serviceHandover := omit,
iMSI_bssmap := omit,
sourceToTargetRNCTransparentInfo := omit,
sourceToTargetRNCTransparentInfoCDMA := omit,
sNAAccessInformation := omit,
talkerPriority := omit,
aoIPTransportLayer := aoip_tla,
codecList := codecList,
callIdentifier := omit,
kC128 := kC128,
globalCallReference := omit,
lCLS_Configuration := omit,
connectionStatusControl := omit
}
}
}
}
template PDU_BSSAP tr_BSSMAP_HandoverRequestAcknowledge(template octetstring layer3info)
modifies tr_BSSAP_BSSMAP := {
pdu := {
bssmap := {
handoverRequestAck := {
messageType := '12'O,
layer3Information := {
elementIdentifier := '17'O,
lengthIndicator := ?,
layer3info := layer3info
}
}
}
}
}
template PDU_BSSAP ts_BSSMAP_HandoverRequestAcknowledge(
template octetstring layer3info,
template LIN1 layer3infoLength,
template BSSMAP_IE_AoIP_TransportLayerAddress aoIPTransportLayer := omit,
template BSSMAP_IE_SpeechCodec speechCodec := omit,
template BSSMAP_IE_ChosenChannel chosenChannel := omit,
template BSSMAP_IE_ChosenEncryptionAlgorithm chosenEncryptionAlgorithm := omit)
modifies ts_BSSAP_BSSMAP := {
pdu := {
bssmap := {
handoverRequestAck := {
messageType := '12'O,
layer3Information := {
elementIdentifier := '17'O,
lengthIndicator := layer3infoLength,
layer3info := layer3info
},
chosenChannel := chosenChannel,
chosenEncryptionAlgorithm := chosenEncryptionAlgorithm,
circuitPool := omit,
speechVersion := omit,
circuitIdentityCode := omit,
lSAIdentifier := omit,
newBSSToOldBSSInfo := omit,
interSystemInformation := omit,
talkerPriority := omit,
aoIPTransportLayer := aoIPTransportLayer,
codecList := omit,
speechCodec := speechCodec,
lCLS_bSS_Status := omit
}
}
}
}
template PDU_BSSAP tr_BSSMAP_HandoverDetect
modifies tr_BSSAP_BSSMAP := {
pdu := {
bssmap := {
handoverDetect := {
messageType := '1B'O,
talkerPriority := *
}
}
}
}
template PDU_BSSAP ts_BSSMAP_HandoverDetect
modifies ts_BSSAP_BSSMAP := {
pdu := {
bssmap := {
handoverDetect := {
messageType := '1B'O,
talkerPriority := omit
}
}
}
}
template PDU_BSSAP tr_BSSMAP_HandoverComplete
modifies tr_BSSAP_BSSMAP := {
pdu := {
bssmap := {
handoverComplete := {
messageType := '14'O,
rR_Cause := *,
talkerPriority := *,
speechCodec := *,
codecList := *,
chosenEncryptionAlgorithm := *,
chosenChannel := *,
lCLS_BSS_Status := *
}
}
}
}
template PDU_BSSAP ts_BSSMAP_HandoverComplete
modifies ts_BSSAP_BSSMAP := {
pdu := {
bssmap := {
handoverComplete := {
messageType := '14'O,
rR_Cause := omit,
talkerPriority := omit,
speechCodec := omit,
codecList := omit,
chosenEncryptionAlgorithm := omit,
chosenChannel := omit,
lCLS_BSS_Status := omit
}
}
}
}
template PDU_BSSAP tr_BSSMAP_HandoverPerformed
modifies tr_BSSAP_BSSMAP := {
pdu := {
bssmap := {
handoverPerformed := {
messageType := '17'O,
cause := ?,
cellIdentifier := ?,
chosenChannel := *,
chosenEncryptionAlgorithm := *,
speechVersion := *,
lSAIdentifier := *,
talkerPriority := *,
codecList := *,
speechCodec := *,
lCLS_BSS_Status := *
}
}
}
}
template BSSMAP_IE_IMSI ts_BSSMAP_Imsi(hexstring imsi_digits) := {
elementIdentifier := '08'O,
lengthIndicator := 0, /* overwritten */
typeOfIdentity := '001'B, /* IMSI */
oddEvenIndicator := f_hex_is_odd_length(imsi_digits),
digits := imsi_digits
}
template BSSMAP_IE_IMSI tr_BSSMAP_Imsi(template hexstring imsi_digits) := {
elementIdentifier := '08'O,
lengthIndicator := ?, /* overwritten */
typeOfIdentity := '001'B, /* IMSI */
oddEvenIndicator := ?,
digits := imsi_digits
}
template (value) BSSAMAP_IE_LastUsedEUTRANPLMNId ts_BSSMAP_LastUsedEUTRANPLMNId(OCT3 mcc_mnc) := {
elementIdentifier := '95'O,
mcc_mnc := mcc_mnc
}
template BSSAMAP_IE_LastUsedEUTRANPLMNId tr_BSSMAP_LastUsedEUTRANPLMNId(template OCT3 mcc_mnc) := {
elementIdentifier := '95'O,
mcc_mnc := mcc_mnc
}
function f_ts_BSSMAP_LastUsedEUTRANPLMNId(template (omit) OCT3 mcc_mnc)
return template (omit) BSSAMAP_IE_LastUsedEUTRANPLMNId {
if (not istemplatekind(mcc_mnc, "omit")) {
return ts_BSSMAP_LastUsedEUTRANPLMNId(valueof(mcc_mnc));
} else {
return omit;
}
}
function f_tr_BSSMAP_LastUsedEUTRANPLMNId(template OCT3 mcc_mnc)
return template BSSAMAP_IE_LastUsedEUTRANPLMNId {
if (istemplatekind(mcc_mnc, "*")) {
return *;
} else if (istemplatekind(mcc_mnc, "?")) {
return ?;
} else if (istemplatekind(mcc_mnc, "omit")) {
return omit;
} else {
return ts_BSSMAP_LastUsedEUTRANPLMNId(valueof(mcc_mnc));
}
}
template BSSMAP_FIELD_CellIdentificationList ts_BSSMAP_CIL_noCell := {
cIl_noCell := ''O
}
template (value) BSSMAP_FIELD_CellIdentificationList ts_BSSMAP_CIL_BSS := {
cIl_allInBSS := ''O
}
template BSSMAP_FIELD_CellIdentificationList tr_BSSMAP_CIL_BSS := {
cIl_allInBSS := ''O
}
template (value) BSSMAP_FIELD_CellIdentificationList
ts_BSSMAP_CIL_CGI(template (value) BSSMAP_FIELD_CellIdentificationList_CGI cgil) := {
cIl_CGI := cgil
}
template BSSMAP_FIELD_CellIdentificationList
tr_BSSMAP_CIL_CGI(template BSSMAP_FIELD_CellIdentificationList_CGI cgil) := {
cIl_CGI := cgil
}
template (value) BSSMAP_FIELD_CellIdentificationList
ts_BSSMAP_CIL_LAC_CI(template (value) BSSMAP_FIELD_CellIdentificationList_LAC_CI lac_cil) := {
cIl_LAC_CI := lac_cil
}
template BSSMAP_FIELD_CellIdentificationList
tr_BSSMAP_CIL_LAC_CI(template BSSMAP_FIELD_CellIdentificationList_LAC_CI lac_cil) := {
cIl_LAC_CI := lac_cil
}
template (value) BSSMAP_FIELD_CellIdentificationList
ts_BSSMAP_CIL_CI(template (value) RecordOfOCT2 cil) := {
cIl_CI := cil
}
template BSSMAP_FIELD_CellIdentificationList tr_BSSMAP_CIL_CI(template RecordOfOCT2 cil) := {
cIl_CI := cil
}
template (value) BSSMAP_FIELD_CellIdentificationList
ts_BSSMAP_CIL_LAI(template (value) BSSMAP_FIELD_CellIdentificationList_LAI lail) := {
cIl_LAI := lail
}
template BSSMAP_FIELD_CellIdentificationList
tr_BSSMAP_CIL_LAI(template BSSMAP_FIELD_CellIdentificationList_LAI lail) := {
cIl_LAI := lail
}
template (value) BSSMAP_FIELD_CellIdentificationList
ts_BSSMAP_CIL_LAC(template (value) RecordOfOCT2 lacl) := {
cIl_LAC := lacl
}
template BSSMAP_FIELD_CellIdentificationList tr_BSSMAP_CIL_LAC(template RecordOfOCT2 lacl) := {
cIl_LAC := lacl
}
function f_enc_mcc_mnc(GsmMcc mcc, GsmMnc mnc) return OCT3 {
if (lengthof(mnc) == 2) {
return hex2oct(mcc[1] & mcc[0] & 'F'H & mcc[2] & mnc[1] & mnc[0]);
} else {
return hex2oct(mcc[1] & mcc[0] & mnc[2] & mcc[2] & mnc[1] & mnc[0]);
}
}
function f_dec_mcc_mnc(in OCT3 mcc_mnc, out GsmMcc mcc, out GsmMnc mnc) {
var hexstring hs := oct2hex(mcc_mnc);
mcc := hs[1] & hs[0] & hs[3];
mnc := hs[5] & hs[4];
if (hs[2] == 'F'H) {
mnc := mnc & hs[2];
}
}
template (value) BSSMAP_FIELD_CellIdentification_CGI ts_BSSMAP_CI_CGI(GsmMcc mcc, GsmMnc mnc, GsmLac lac, GsmCellId ci) := {
mcc_mnc := f_enc_mcc_mnc(mcc, mnc),
lac := int2oct(lac, 2),
ci := int2oct(ci, 2)
}
template (present) BSSMAP_FIELD_CellIdentification_CGI tr_BSSMAP_CI_CGI(template (present) OCT3 mcc_mnc,
template (present) GsmLac lac,
template (present) GsmCellId ci) := {
mcc_mnc := mcc_mnc,
lac := f_tr_LAC(lac),
ci := f_tr_CI(ci)
}
template (value) BSSMAP_FIELD_CellIdentification_LAC_CI ts_BSSMAP_CI_LAC_CI(GsmLac lac, GsmCellId ci) := {
lac := int2oct(lac, 2),
ci := int2oct(ci, 2)
}
template (value) BSSMAP_FIELD_CellIdentification_LAI ts_BSSMAP_CI_LAI(GsmMcc mcc, GsmMnc mnc, GsmLac lac) := {
mcc_mnc := f_enc_mcc_mnc(mcc, mnc),
lac := int2oct(lac, 2)
}
template (value) OCT2 ts_BSSMAP_CI_LAC(GsmLac lac) := int2oct(lac, 2);
template (value) OCT2 ts_BSSMAP_CI_CI(GsmCellId ci) := int2oct(ci, 2);
template (value) BSSMAP_FIELD_CellIdentification_PLMN_LAC_RNC
ts_BSSMAP_CI_PLMN_LAC_RNC(GsmMcc mcc, GsmMnc mnc, GsmLac lac, uint16_t rnc_id) := {
mcc_mnc := f_enc_mcc_mnc(mcc, mnc),
lac := int2oct(lac, 2),
rncId := int2oct(rnc_id, 2)
}
template (value) BSSMAP_FIELD_CellIdentification_LAC_RNC ts_BSSMAP_CI_LAC_RNC(GsmLac lac, uint16_t rnc_id) := {
lac := int2oct(lac, 2),
rncId := int2oct(rnc_id, 2)
}
template BSSMAP_IE_ChannelNeeded ts_BSSMAP_IE_ChanNeeded(BIT2 chneed) := {
elementIdentifier := '24'O,
channel := chneed,
spare := '000000'B
}
template BSSMAP_IE_TMSI ts_BSSMAP_IE_TMSI(OCT4 tmsi) := {
elementIdentifier := '09'O,
lengthIndicator := 4,
tmsiOctets := tmsi
};
template BSSMAP_IE_TMSI tr_BSSMAP_IE_TMSI(template OCT4 tmsi) := {
elementIdentifier := '09'O,
lengthIndicator := 4,
tmsiOctets := tmsi
};
private function f_tmsi_or_omit(template OCT4 tmsi) return template BSSMAP_IE_TMSI {
var template BSSMAP_IE_TMSI ret;
if (ispresent(tmsi)) {
ret := ts_BSSMAP_IE_TMSI(valueof(tmsi));
} else {
ret := omit;
}
return ret;
}
template PDU_BSSAP ts_BSSMAP_Paging(hexstring imsi_digits,
template BSSMAP_FIELD_CellIdentificationList cid_list,
template OCT4 tmsi := omit,
template BSSMAP_IE_ChannelNeeded chneed := omit)
modifies ts_BSSAP_BSSMAP := {
pdu := {
bssmap := {
paging := {
messageType := '52'O,
iMSI := ts_BSSMAP_Imsi(imsi_digits),
tMSI := f_tmsi_or_omit(tmsi),
cellIdentifierList := ts_BSSMAP_IE_CidList(cid_list),
channelNeeded := chneed,
eMLPP_Priority := omit,
pagingInformation := omit /* only VGCS/VBS flag */
}
}
}
}
template PDU_BSSAP tr_BSSMAP_Paging(template hexstring imsi_digits := ?,
template OCT4 tmsi := *,
template BSSMAP_IE_ChannelNeeded chneed := *)
modifies tr_BSSAP_BSSMAP := {
pdu := {
bssmap := {
paging := {
messageType := '52'O,
iMSI := tr_BSSMAP_Imsi(imsi_digits),
tMSI := tr_BSSMAP_IE_TMSI(tmsi) ifpresent,
cellIdentifierList := ?,
channelNeeded := chneed,
eMLPP_Priority := omit,
pagingInformation := omit /* only VGCS/VBS flag */
}
}
}
}
template PDU_BSSAP ts_BSSMAP_CipherModeCmd(OCT1 alg, OCT8 key)
modifies ts_BSSAP_BSSMAP := {
pdu := {
bssmap := {
cipherModeCommand := {
messageType := '53'O,
layer3HeaderInfo := omit,
encryptionInformation := ts_BSSMAP_IE_EncrInfo(key, alg),
cipherResponseMode := omit,
kC128 := omit
}
}
}
}
template PDU_BSSAP ts_BSSMAP_CipherModeCmdKc128(OCT1 alg, OCT8 key, OCT16 kc128)
modifies ts_BSSAP_BSSMAP := {
pdu := {
bssmap := {
cipherModeCommand := {
messageType := '53'O,
layer3HeaderInfo := omit,
encryptionInformation := ts_BSSMAP_IE_EncrInfo(key, alg),
cipherResponseMode := omit,
kC128 := { '83'O, kc128 }
}
}
}
}
template PDU_BSSAP tr_BSSMAP_CipherModeCmd2(template BSSMAP_IE_EncryptionInformation encryptionInformation := *,
template BSSMAP_IE_KC128 kC128 := *)
modifies tr_BSSAP_BSSMAP := {
pdu := {
bssmap := {
cipherModeCommand := {
messageType := '53'O,
layer3HeaderInfo := *,
encryptionInformation := encryptionInformation,
cipherResponseMode := *,
kC128 := kC128
}
}
}
}
template PDU_BSSAP tr_BSSMAP_CipherModeCmd(template OCT1 alg, template OCT8 key, template BSSMAP_IE_KC128 kC128 := omit)
:= tr_BSSMAP_CipherModeCmd2(tr_BSSMAP_IE_EncrInfo(key, alg), kC128);
template PDU_BSSAP ts_BSSMAP_CipherModeCompl(OCT1 alg)
modifies ts_BSSAP_BSSMAP := {
pdu := {
bssmap := {
cipherModeComplete := {
messageType := '55'O,
layer3MessageContents := omit,
chosenEncryptionAlgorithm := {
elementIdentifier := '2C'O,
algorithmIdentifier := alg
}
}
}
}
}
template PDU_BSSAP ts_BSSMAP_CipherModeComplAlg(template BSSMAP_IE_ChosenEncryptionAlgorithm chosenEncryptionAlgorithm := ?)
modifies ts_BSSAP_BSSMAP := {
pdu := {
bssmap := {
cipherModeComplete := {
messageType := '55'O,
layer3MessageContents := omit,
chosenEncryptionAlgorithm := chosenEncryptionAlgorithm
}
}
}
}
template PDU_BSSAP tr_BSSMAP_CipherModeCompl(template OCT1 alg := ?) modifies tr_BSSAP_BSSMAP := {
pdu := {
bssmap := {
cipherModeComplete := {
messageType := '55'O,
layer3MessageContents := *,
chosenEncryptionAlgorithm := {
elementIdentifier := '2C'O,
algorithmIdentifier := alg
}
}
}
}
}
template PDU_BSSAP tr_BSSMAP_CipherModeRej modifies tr_BSSAP_BSSMAP := {
pdu := {
bssmap := {
cipherModeReject := {
messageType := '59'O,
cause := ?
}
}
}
}
template PDU_BSSAP tr_BSSMAP_ClassmarkReq modifies tr_BSSAP_BSSMAP := {
pdu := {
bssmap := {
classmarkRequest := {
messageType := '58'O,
talkerPriority := *
}
}
}
}
template BSSMAP_IE_ClassmarkInformationType2 ts_CM2_default := {
elementIdentifier := '12'O,
lengthIndicator := 0, /* overwritten */
/* CM1 */
rf_PowerCapability := '010'B, /* class3 */
a5_1 := '0'B, /* supported */
esind := '1'B, /* early classmark supported */
revisionLevel := '10'B, /* R99 */
spare1_1 := '0'B,
/* CM2 */
fc := '1'B, /* E-GSM support */
vgcs := '0'B,
vbs := '0'B,
sm_Capability := '1'B,
ss_ScreenIndicator := '00'B,
ps_Capability := '1'B,
spare2_1 := '0'B,
classmarkInformationType2_oct5 := {
a5_2 := '0'B, /* not available */
a5_3 := '1'B, /* available */
cmsp := '0'B, /* not supported */
solsa := '0'B, /* not suported */
ucs2 := '0'B, /* GSM alphabet preferred */
lcsvacap := '0'B, /* not supported */
spare := '0'B,
cm3 := '0'B /* no CM3 */
}
}
template BSSMAP_IE_ClassmarkInformationType3 ts_CM3_default := {
elementIdentifier := '13'O,
lengthIndicator := 0, /* overwritten */
classmark3ValuePart := '01'O /* A5/4 supported */
}
template PDU_BSSAP ts_BSSMAP_ClassmarkUpd(template BSSMAP_IE_ClassmarkInformationType2 cm2 := ts_CM2_default,
template BSSMAP_IE_ClassmarkInformationType3 cm3 := omit)
modifies ts_BSSAP_BSSMAP := {
pdu := {
bssmap := {
classmarkUpdate := {
messageType := '54'O,
classmarkInformationType2 := cm2,
classmarkInformationType3 := cm3,
talkerPriority := omit
}
}
}
}
template PDU_BSSAP tr_BSSMAP_ClassmarkUpd(template BSSMAP_IE_ClassmarkInformationType2 cm2 := *,
template BSSMAP_IE_ClassmarkInformationType3 cm3 := *)
modifies tr_BSSAP_BSSMAP := {
pdu := {
bssmap := {
classmarkUpdate := {
messageType := '54'O,
classmarkInformationType2 := cm2,
classmarkInformationType3 := cm3,
talkerPriority := *
}
}
}
}
template PDU_BSSAP ts_BSSMAP_ClassmarkRequest
modifies ts_BSSAP_BSSMAP := {
pdu := {
bssmap := {
classmarkRequest := {
messageType := '58'O,
talkerPriority := omit
}
}
}
}
template PDU_BSSAP tr_BSSMAP_ClassmarkRequest
modifies tr_BSSAP_BSSMAP := {
pdu := {
bssmap := {
classmarkRequest := {
messageType := '58'O,
talkerPriority := *
}
}
}
}
/* return Layer3 octetstring inside BSSAP PDU */
function f_bssap_extract_l3(PDU_BSSAP bssap) return template octetstring {
if (ischosen(bssap.pdu.bssmap)) {
var PDU_BSSMAP bssmap := bssap.pdu.bssmap;
if (ischosen(bssmap.completeLayer3Information)) {
return bssmap.completeLayer3Information.layer3Information.layer3info;
} else if (ischosen(bssmap.handoverRequestAck)) {
return bssmap.handoverRequestAck.layer3Information.layer3info;
} else if (ischosen(bssmap.handoverCommand)) {
return bssmap.handoverCommand.layer3Information.layer3info;
} else if (ischosen(bssmap.uplinkRequest)) {
return bssmap.uplinkRequest.layer3Information.layer3info;
} else if (ischosen(bssmap.uplinkRequestConfirmation)) {
return bssmap.uplinkRequestConfirmation.layer3Information.layer3info;
} else if (ischosen(bssmap.uplinkApplicationData)) {
return bssmap.uplinkApplicationData.layer3Information.layer3info;
} else if (ischosen(bssmap.rerouteCommand)) {
return bssmap.rerouteCommand.initialLayer3Information.layer3info;
} else {
return omit;
}
} else {
return bssap.pdu.dtap;
}
}
/* TS 29.205 B.2.1.9 */
template (value) GlobalCallReferenceValue ts_GCR(octetstring net_id, OCT2 node_id, OCT5 cref_id) := {
networkIDLengthIndicator := 0, /* overwritten */
networkID := net_id,
nodeIDLengthIndicator := 0, /* overwritten */
nodeID := node_id,
callReferenceIDLengthIndicator := 0, /* overwritten */
callReferenceID := cref_id
}
template GlobalCallReferenceValue tr_GCR(template octetstring net_id,
template OCT2 node_id,
template OCT5 cref_id) := {
networkIDLengthIndicator := ?,
networkID := net_id,
nodeIDLengthIndicator := ?,
nodeID := node_id,
callReferenceIDLengthIndicator := ?,
callReferenceID := cref_id
}
/* TS 47.008 3.2.2.115 */
template (value) BSSMAP_IE_GlobalCallReference ts_BSSMAP_IE_GCR(template (value) GlobalCallReferenceValue gcr) := {
elementIdentifier := '89'O,
lengthIndicator := 0, /* overwritten */
globalCallReferenceValue := gcr
}
template BSSMAP_IE_GlobalCallReference tr_BSSMAP_IE_GCR(template GlobalCallReferenceValue gcr) := {
elementIdentifier := '89'O,
lengthIndicator := ?,
globalCallReferenceValue := gcr
}
/* TS 48.008 3.2.2.116 */
const BIT4 LCLS_CFG_both_way := '0000'B;
const BIT4 LCLS_CFG_both_way_and_bicast_UL := '0001'B;
const BIT4 LCLS_CFG_both_way_and_send_DL := '0010'B;
const BIT4 LCLS_CFG_both_way_and_send_DL_block_local_DL := '0011'B;
const BIT4 LCLS_CFG_both_way_and_bicast_UL_send_DL := '0100'B;
const BIT4 LCLS_CFG_both_way_and_bicast_UL_send_DL_block_local_DL := '0101'B;
template (value) BSSMAP_IE_LCLS_Configuration ts_BSSMAP_IE_LclsCfg(BIT4 cfg_val) := {
elementIdentifier := '8A'O,
lCLS_ConfigurationValue := cfg_val,
spare := '0000'B
}
template BSSMAP_IE_LCLS_Configuration tr_BSSMAP_IE_LclsCfg(template BIT4 cfg_val) := {
elementIdentifier := '8A'O,
lCLS_ConfigurationValue := cfg_val,
spare := '0000'B
}
/* TS 48.008 3.2.2.117 */
const BIT4 LCLS_CSC_connect := '0000'B;
const BIT4 LCLS_CSC_do_not_connect := '0001'B;
const BIT4 LCLS_CSC_release_lcls := '0010'B;
const BIT4 LCLS_CSC_bicast_UL_at_handover := '0011'B;
const BIT4 LCLS_CSC_bicast_UL_and_recv_DL_at_handover := '0100'B;
template (value) BSSMAP_IE_LCLS_ConnectionStatusControl ts_BSSMAP_IE_LclsCsc(BIT4 csc) := {
elementIdentifier := '8B'O,
lCLS_ConnectionStatusControlValue := csc,
spare := '0000'B
}
template BSSMAP_IE_LCLS_ConnectionStatusControl tr_BSSMAP_IE_LclsCsc(template BIT4 csc) := {
elementIdentifier := '8B'O,
lCLS_ConnectionStatusControlValue := csc,
spare := '0000'B
}
/* TS 48.008 3.2.2.119 */
const BIT4 LCLS_STS_not_yet_ls := '0000'B;
const BIT4 LCLS_STS_not_possible_ls := '0001'B;
const BIT4 LCLS_STS_no_longer_ls := '0010'B;
const BIT4 LCLS_STS_req_lcls_not_supp := '0011'B;
const BIT4 LCLS_STS_locally_switched := '0100'B;
template (value) BSSMAP_IE_LCLS_BSS_Status ts_BSSMAP_IE_LclsSts(BIT4 sts) := {
elementIdentifier := '8D'O,
lCLS_BSS_StatusValue := sts,
spare := '0000'B
}
template BSSMAP_IE_LCLS_BSS_Status tr_BSSMAP_IE_LclsSts(template BIT4 sts) := {
elementIdentifier := '8D'O,
lCLS_BSS_StatusValue := sts,
spare := '0000'B
}
/* TS 48.008 3.2.1.91 */
template (value) PDU_BSSAP ts_BSSMAP_LclsConnCtrl(template (omit) BSSMAP_IE_LCLS_Configuration cfg,
template (omit) BSSMAP_IE_LCLS_ConnectionStatusControl csc) modifies ts_BSSAP_BSSMAP := {
pdu := {
bssmap := {
lCLS_ConnectControl := {
messageType := '74'O,
lCLS_Configuration := cfg,
lCLS_ConnectionStatusControl := csc
}
}
}
}
template PDU_BSSAP tr_BSSMAP_LclsConnCtrl(template BSSMAP_IE_LCLS_Configuration cfg,
template BSSMAP_IE_LCLS_ConnectionStatusControl csc)
modifies tr_BSSAP_BSSMAP := {
pdu := {
bssmap := {
lCLS_ConnectControl := {
messageType := '74'O,
lCLS_Configuration := cfg,
lCLS_ConnectionStatusControl := csc
}
}
}
}
/* TS 48.008 3.2.1.92 */
template (value) PDU_BSSAP ts_BSSMAP_LclsConnCtrlAck(template (value) BSSMAP_IE_LCLS_BSS_Status sts)
modifies ts_BSSAP_BSSMAP := {
pdu := {
bssmap := {
lCLS_connectControlAck := {
messageType := '75'O,
lCLS_BSS_Status := sts
}
}
}
}
template PDU_BSSAP tr_BSSMAP_LclsConnCtrlAck(template BSSMAP_IE_LCLS_BSS_Status sts)
modifies tr_BSSAP_BSSMAP := {
pdu := {
bssmap := {
lCLS_connectControlAck := {
messageType := '75'O,
lCLS_BSS_Status := sts
}
}
}
}
/* TS 48.008 3.2.1.93 */
template (value) PDU_BSSAP ts_BSSMAP_LclsNotification(template (omit) BSSMAP_IE_LCLS_BSS_Status sts,
template (omit) BSSMAP_IE_LCLS_BreakRequest brq)
modifies ts_BSSAP_BSSMAP := {
pdu := {
bssmap := {
lCLS_Notification := {
messageType := '76'O,
lCLS_BSS_Status := sts,
lCLS_BreakRequest := brq
}
}
}
}
template PDU_BSSAP tr_BSSMAP_LclsNotification(template BSSMAP_IE_LCLS_BSS_Status sts,
template BSSMAP_IE_LCLS_BreakRequest brq)
modifies tr_BSSAP_BSSMAP := {
pdu := {
bssmap := {
lCLS_Notification := {
messageType := '76'O,
lCLS_BSS_Status := sts,
lCLS_BreakRequest := brq
}
}
}
}
template PDU_BSSAP tr_BSSMAP_LclsNotificationSts(BIT4 sts)
modifies tr_BSSAP_BSSMAP := {
pdu := {
bssmap := {
lCLS_Notification := {
messageType := '76'O,
lCLS_BSS_Status := tr_BSSMAP_IE_LclsSts(sts),
lCLS_BreakRequest := omit
}
}
}
}
template PDU_BSSAP ts_BSSMAP_CommonId(hexstring imsi_digits,
template (omit) OCT3 last_eutran_plmn := omit)
modifies ts_BSSAP_BSSMAP := {
pdu := {
bssmap := {
commonID := {
messageType := '2F'O,
iMSI := ts_BSSMAP_Imsi(imsi_digits),
sNAAccessInformation := omit,
selectedPLMNId := omit,
lastUsedEUTRANPLMNId := f_ts_BSSMAP_LastUsedEUTRANPLMNId(last_eutran_plmn)
}
}
}
}
template PDU_BSSAP tr_BSSMAP_CommonId(template hexstring imsi_digits,
template BSSAMAP_IE_LastUsedEUTRANPLMNId lastUsedEUTRANPLMNId := *)
modifies tr_BSSAP_BSSMAP := {
pdu := {
bssmap := {
commonID := {
messageType := '2F'O,
iMSI := tr_BSSMAP_Imsi(imsi_digits),
sNAAccessInformation := *,
selectedPLMNId := *,
lastUsedEUTRANPLMNId := lastUsedEUTRANPLMNId
}
}
}
}
template PDU_BSSAP tr_BSSMAP_SAPInReject(template (present) GsmSapi sapi := ?,
template BSSMAP_IE_Cause cause := ?)
modifies tr_BSSAP_BSSMAP := {
pdu := {
bssmap := {
sAPInReject := {
messageType := '25'O,
dLCI := {
elementIdentifier := '18'O,
sapiValue := f_tr_SAPI(sapi),
spare := ?,
c1 := ?, c2 := ?
},
cause := cause
}
}
}
}
private function f_tr_SAPI(template (present) GsmSapi sapi)
return template (present) BIT3 {
if (istemplatekind(sapi, "?")) {
return ?;
} else {
return int2bit(valueof(sapi), 3);
}
}
template (value) BSSMAP_IE_LocationType ts_BSSMAP_IE_LocationType
:= {
elementIdentifier := '44'O,
lengthIndicator := 1,
locationInformation := '00'O,
positioningMethod := omit
}
template (value) BSSMAP_IE_LCSClientType
ts_BSSMAP_IE_LCSClientType(template (value) BIT4 category := '0010'B,
template (value) BIT4 subtype := '0000'B) := {
elementIdentifier := '48'O,
lengthIndicator := 0, /* overwritten */
subtype := subtype,
category := category
}
template (value) BSSMAP_IE_LCSPriority
ts_BSSMAP_IE_LCSPriority(template (value) OCT1 priority := '00'O) := {
elementIdentifier := '43'O,
lengthIndicator := 0, /* overwritten */
priority := priority
}
template (value) BSSMAP_IE_LCSQOS
ts_BSSMAP_IE_LCSQOS(template (value) BIT1 vCI := '0'B,
template (value) BIT1 vEL := '0'B,
template (value) BIT1 hAI := '1'B,
template (value) BIT7 hAV := '0010010'B,
template (value) BIT1 vAI := '0'B,
template (value) BIT7 vAV := '0000000'B) := {
elementIdentifier := '3E'O,
lengthIndicator := 0, /* overwritten */
vCI := vCI, /* Vertical Coordinate Indicator: VC requested ('1'B) or not ('0'B) */
vEL := vEL, /* report velocity if available (1) or not(0) */
spare_1_6 := '000000'B,
horizontalAccuracy := hAV, /* Accuracy Horizontal (HA) */
hAI := hAI, /* Horizontal Accuracy Indicator HA is specified (1) or not (0) */
verticalAccuracy := vAV, /* Accuracy Vertical (VA) */
vAI := vAI, /* Vertical Accuracy Indicator VA is specified (1) or not (0) */
spare_2_6 := '000000'B,
rTC := '00'B /* Response Time is not specified */
}
/* 3.2.2.55 */
template (value) BSSMAP_IE_GroupCallReference
ts_BSSMAP_IE_GroupCallRef(template (value) GroupCallRef group_call_ref) :={
elementIdentifier := '37'O,
lengthIndicator := 0, // overwritten
descrGroupbroadcastCallRef := group_call_ref
}
template (present) BSSMAP_IE_GroupCallReference
tr_BSSMAP_IE_GroupCallRef(template (present) GroupCallRef group_call_ref) :={
elementIdentifier := '37'O,
lengthIndicator := ?,
descrGroupbroadcastCallRef := group_call_ref
}
/* 3.2.2.88 */
template (value) BSSMAP_IE_VGCS_FeatureFlags
ts_BSSMAP_IE_VGCS_FeatureFlags(BIT1 tp_ind, BIT2 as_ind, BIT1 bss_res, BIT1 tcp) := {
elementIdentifier := '69'O,
lengthIndicator := 0, // overwritten
TP_Ind := tp_ind,
AS_Ind := as_ind,
BSS_Res := bss_res,
tCP := tcp,
spare := '000'B
};
template (present) BSSMAP_IE_VGCS_FeatureFlags
tr_BSSMAP_IE_VGCS_FeatureFlags(BIT1 tp_ind, BIT2 as_ind, BIT1 bss_res, BIT1 tcp) := {
elementIdentifier := '69'O,
lengthIndicator := ?,
TP_Ind := tp_ind,
AS_Ind := as_ind,
BSS_Res := bss_res,
tCP := tcp,
spare := ?
};
/* 3.2.2.98 */
template (value) BSSMAP_IE_ApplicationData
ts_BSSMAP_IE_ApplicationData(template (value) OCT9 adi) := {
elementIdentifier := '78'O,
lengthIndicator := 0, // overwritten
applicationDataInfo := adi
};
template (present) BSSMAP_IE_ApplicationData
tr_BSSMAP_IE_ApplicationData(template (present) OCT9 adi) := {
elementIdentifier := '78'O,
lengthIndicator := ?,
applicationDataInfo := adi
};
/* 3.2.2.99 */
template (value) BSSMAP_IE_DataIdentity
ts_BSSMAP_IE_DataIdentity(template (value) DataIdentity data_id) := {
elementIdentifier := '79'O,
lengthIndicator := 0, // overwritten
dataIdentityInfo := data_id
};
template (present) BSSMAP_IE_DataIdentity
tr_BSSMAP_IE_DataIdentity(template (present) DataIdentity data_id) := {
elementIdentifier := '79'O,
lengthIndicator := ?,
dataIdentityInfo := data_id
};
/* 3.2.2.52 */
template (value) BSSMAP_IE_AssignmentRequirement
ts_BSSMAP_IE_AssRequirement(template (value) OCT1 ass_rqm) := {
elementIdentifier := '33'O,
assignmentRequirement := ass_rqm
}
template (present) BSSMAP_IE_AssignmentRequirement
tr_BSSMAP_IE_AssRequirement(template (present) OCT1 ass_rqm) := {
elementIdentifier := '33'O,
assignmentRequirement := ass_rqm
}
/* 3.2.2.89 */
function ts_BSSMAP_IE_TalkerPriority(template (omit) BIT2 prio)
return template (omit) BSSMAP_IE_TalkerPriority {
if (istemplatekind(prio, "omit")) {
return omit;
} else {
var template (present) BSSMAP_IE_TalkerPriority tp := {
elementIdentifier := '6A'O,
priority := prio,
spare := '000000'B
};
return tp;
}
}
function tr_BSSMAP_IE_TalkerPriority(template BIT2 prio)
return template BSSMAP_IE_TalkerPriority {
if (istemplatekind(prio, "omit")) {
return omit;
} else if (istemplatekind(prio, "*")) {
return *;
} else {
var template BSSMAP_IE_TalkerPriority tp := {
elementIdentifier := '6A'O,
priority := prio,
spare := ?
}
return tp;
}
}
/* 3.2.2.90 */
template (value) BSSMAP_IE_EmergencySetIndication
ts_BSSMAP_IE_EmergencySetIndication := {
elementIdentifier := '6B'O
}
template (present) BSSMAP_IE_EmergencySetIndication
tr_BSSMAP_IE_EmergencySetIndication := {
elementIdentifier := '6B'O
}
/* Section 3.2.1.50 */
template (value) PDU_BSSAP
ts_BSSMAP_VGCS_VBS_Setup(template (value) GroupCallRef group_call_ref,
template (omit) BSSMAP_IE_VGCS_FeatureFlags feature_flags := omit)
modifies ts_BSSAP_BSSMAP := {
pdu := {
bssmap := {
vGCS_VBSSetup := {
messageType := '04'O,
groupCallReference := ts_BSSMAP_IE_GroupCallRef(group_call_ref),
priority := omit,
vGCS_FeatureFlags := feature_flags
}
}
}
}
template (present) PDU_BSSAP
tr_BSSMAP_VGCS_VBS_Setup(template (present) GroupCallRef group_call_ref,
template BSSMAP_IE_VGCS_FeatureFlags feature_flags := *)
modifies tr_BSSAP_BSSMAP := {
pdu := {
bssmap := {
vGCS_VBSSetup := {
messageType := '04'O,
groupCallReference := tr_BSSMAP_IE_GroupCallRef(group_call_ref),
priority := *,
vGCS_FeatureFlags := feature_flags
}
}
}
}
/* Section 3.2.1.51 */
template (value) PDU_BSSAP
ts_BSSMAP_VGCS_VBS_SetupAck(template (omit) BSSMAP_IE_VGCS_FeatureFlags feature_flags := omit)
modifies ts_BSSAP_BSSMAP := {
pdu := {
bssmap := {
vGCS_VBSSetupAck := {
messageType := '05'O,
vGCS_FeatureFlags := feature_flags
}
}
}
}
template (present) PDU_BSSAP
tr_BSSMAP_VGCS_VBS_SetupAck(template BSSMAP_IE_VGCS_FeatureFlags feature_flags := *)
modifies tr_BSSAP_BSSMAP := {
pdu := {
bssmap := {
vGCS_VBSSetupAck := {
messageType := '05'O,
vGCS_FeatureFlags := feature_flags
}
}
}
}
/* Section 3.2.1.52 */
template (value) PDU_BSSAP
ts_BSSMAP_VGCS_VBS_SetupRefuse(BssmapCause cause)
modifies ts_BSSAP_BSSMAP := {
pdu := {
bssmap := {
vGCS_VBSSetupRefuse := {
messageType := '06'O,
cause := ts_BSSMAP_IE_Cause(cause)
}
}
}
}
template (present) PDU_BSSAP
tr_BSSMAP_VGCS_VBS_SetupRefuse(template (present) myBSSMAP_Cause cause := ?)
modifies tr_BSSAP_BSSMAP := {
pdu := {
bssmap := {
vGCS_VBSSetupRefuse := {
messageType := '06'O,
cause := tr_BSSMAP_IE_Cause(cause)
}
}
}
}
/* Section 3.2.1.53 */
template (value) PDU_BSSAP
ts_BSSMAP_VGCS_VBS_AssignmentReq(template (value) BSSMAP_IE_ChannelType ch_type,
template (value) OCT1 ass_requirement,
template (value) BSSMAP_IE_CellIdentifier cell_id,
template (value) GroupCallRef group_call_ref,
template (omit) BSSMAP_IE_CircuitIdentityCode cic := omit,
template (omit) BSSMAP_IE_AoIP_TransportLayerAddress aoip := omit,
template (omit) OCT4 call_id := omit,
template (omit) BSSMAP_IE_SpeechCodecList codecList := omit)
modifies ts_BSSAP_BSSMAP := {
pdu := {
bssmap := {
vGCS_VBSAssignmentRequest := {
messageType := '07'O, /* overwritten */
channelType := ch_type,
assignmentRequirement := ts_BSSMAP_IE_AssRequirement(ass_requirement),
cellIdentifier := cell_id,
groupCallReference := ts_BSSMAP_IE_GroupCallRef(group_call_ref),
priority := omit,
circuitIdentityCode := cic,
downLinkDTX_Flag := omit,
encryptionInformation := omit,
vSTK_RAND := omit,
vSTK := omit,
cellIdentifierListSegment := omit,
aoIPTransportLayer := aoip,
callIdentifier := ts_BSSMAP_IE_CallIdentifier(call_id),
codecList := codecList
}
}
}
}
template (present) PDU_BSSAP
tr_BSSMAP_VGCS_VBS_AssignmentReq(template (present) BSSMAP_IE_ChannelType ch_type,
template (present) OCT1 ass_requirement,
template (present) BSSMAP_IE_CellIdentifier cell_id,
template (present) GroupCallRef group_call_ref,
template BSSMAP_IE_CircuitIdentityCode cic := *,
template BSSMAP_IE_AoIP_TransportLayerAddress aoip := *,
template OCT4 call_id := *,
template BSSMAP_IE_SpeechCodecList codecList := *)
modifies tr_BSSAP_BSSMAP := {
pdu := {
bssmap := {
vGCS_VBSAssignmentRequest := {
messageType := '07'O, /* overwritten */
channelType := ch_type,
assignmentRequirement := tr_BSSMAP_IE_AssRequirement(ass_requirement),
cellIdentifier := cell_id,
groupCallReference := tr_BSSMAP_IE_GroupCallRef(group_call_ref),
priority := omit,
circuitIdentityCode := cic,
downLinkDTX_Flag := omit,
encryptionInformation := omit,
vSTK_RAND := omit,
vSTK := omit,
cellIdentifierListSegment := omit,
aoIPTransportLayer := aoip,
callIdentifier := tr_BSSMAP_IE_CallIdentifier(call_id),
codecList := codecList
}
}
}
}
/* Section 3.2.1.54 */
template (value) PDU_BSSAP
ts_BSSMAP_VGCS_VBS_AssignmentRes(template (value) BSSMAP_IE_ChannelType ch_type,
template (value) BSSMAP_IE_CellIdentifier cell_id,
template (omit) BSSMAP_IE_ChosenChannel chosen_ch := omit,
template (omit) BSSMAP_IE_CircuitIdentityCode cic := omit,
template (omit) BSSMAP_IE_AoIP_TransportLayerAddress aoip := omit,
template (omit) BSSMAP_IE_SpeechCodec speech_codec := omit,
template (omit) OCT4 call_id := omit)
modifies ts_BSSAP_BSSMAP := {
pdu := {
bssmap := {
vGCS_VBSAssignmentResult := {
messageType := '1C'O, /* overwritten */
channelType := ch_type,
cellIdentifier := cell_id,
chosenChannel := chosen_ch,
circuitIdentityCode := cic,
circuitPool := omit,
aoIPTransportLayer := aoip,
speechCodec := speech_codec,
callIdentifier := ts_BSSMAP_IE_CallIdentifier(call_id)
}
}
}
}
template (present) PDU_BSSAP
tr_BSSMAP_VGCS_VBS_AssignmentRes(template (present) BSSMAP_IE_ChannelType ch_type,
template (present) BSSMAP_IE_CellIdentifier cell_id,
template BSSMAP_IE_ChosenChannel chosen_ch := *,
template BSSMAP_IE_CircuitIdentityCode cic := omit,
template BSSMAP_IE_AoIP_TransportLayerAddress aoip := *,
template BSSMAP_IE_SpeechCodec speech_codec := *,
template OCT4 call_id := *)
modifies tr_BSSAP_BSSMAP := {
pdu := {
bssmap := {
vGCS_VBSAssignmentResult := {
messageType := '1C'O, /* overwritten */
channelType := ch_type,
cellIdentifier := cell_id,
chosenChannel := chosen_ch,
circuitIdentityCode := cic,
circuitPool := *,
aoIPTransportLayer := aoip,
speechCodec := speech_codec,
callIdentifier := tr_BSSMAP_IE_CallIdentifier(call_id)
}
}
}
}
/* Section 3.2.1.55 */
template (value) PDU_BSSAP
ts_BSSMAP_VGCS_VBS_AssignmentFail(BssmapCause cause)
modifies ts_BSSAP_BSSMAP := {
pdu := {
bssmap := {
vGCS_VBSAssignmentFailure := {
messageType := '1D'O, /* overwritten */
cause := ts_BSSMAP_IE_Cause(cause),
/* we only implement AoIP for now... */
circuitPool := omit,
circuitPoolList := omit,
codecList := omit
}
}
}
}
template (present) PDU_BSSAP
tr_BSSMAP_VGCS_VBS_AssignmentFail(template (present) myBSSMAP_Cause cause := ?)
modifies tr_BSSAP_BSSMAP := {
pdu := {
bssmap := {
vGCS_VBSAssignmentFailure := {
messageType := '1D'O, /* overwritten */
cause := tr_BSSMAP_IE_Cause(cause),
/* we only implement AoIP for now... */
circuitPool := omit,
circuitPoolList := omit,
codecList := omit
}
}
}
}
/* Section 3.2.1.56 */
template (value) PDU_BSSAP
ts_BSSMAP_VGCS_VBS_QueuingInd
modifies ts_BSSAP_BSSMAP := {
pdu := {
bssmap := {
vGCS_VBSQueuingIndication := {
messageType := '1E'O
}
}
}
}
template (present) PDU_BSSAP
tr_BSSMAP_VGCS_VBS_QueuingInd
modifies tr_BSSAP_BSSMAP := {
pdu := {
bssmap := {
vGCS_VBSQueuingIndication := {
messageType := '1E'O
}
}
}
}
/* Section 3.2.1.57 */
template (value) PDU_BSSAP ts_BSSMAP_UplinkReq
modifies ts_BSSAP_BSSMAP := {
pdu := {
bssmap := {
uplinkRequest := {
messageType := '1F'O,
talkerPriority := omit,
cellIdentifier := omit,
layer3Information := omit,
mobileIdentity := omit
}
}
}
}
template (present) PDU_BSSAP tr_BSSMAP_UplinkReq
modifies tr_BSSAP_BSSMAP := {
pdu := {
bssmap := {
uplinkRequest := {
messageType := '1F'O,
talkerPriority := *,
cellIdentifier := *,
layer3Information := *,
mobileIdentity := *
}
}
}
}
template (value) PDU_BSSAP
ts_BSSMAP_UplinkReq_L3(template (value) BIT2 priority,
template (omit) BSSMAP_IE_CellIdentifier cell_id,
template (value) octetstring l3_info)
modifies ts_BSSAP_BSSMAP := {
pdu := {
bssmap := {
uplinkRequest := {
messageType := '1F'O,
talkerPriority := ts_BSSMAP_IE_TalkerPriority(priority),
cellIdentifier := cell_id,
layer3Information := ts_BSSMAP_IE_L3Info(l3_info),
mobileIdentity := omit
}
}
}
}
template (present) PDU_BSSAP
tr_BSSMAP_UplinkReq_L3(template (present) BIT2 priority,
template BSSMAP_IE_CellIdentifier cell_id,
template (present) octetstring l3_info)
modifies tr_BSSAP_BSSMAP := {
pdu := {
bssmap := {
uplinkRequest := {
messageType := '1F'O,
talkerPriority := tr_BSSMAP_IE_TalkerPriority(priority),
cellIdentifier := cell_id,
layer3Information := tr_BSSMAP_IE_L3Info(l3_info),
mobileIdentity := omit
}
}
}
}
template (value) PDU_BSSAP
ts_BSSMAP_UplinkReq_MI(template (omit) BIT2 priority,
template (omit) BSSMAP_IE_CellIdentifier cell_id,
template (value) BSSMAP_IE_MobileIdentity mobile_id)
modifies ts_BSSAP_BSSMAP := {
pdu := {
bssmap := {
uplinkRequest := {
messageType := '1F'O,
talkerPriority := ts_BSSMAP_IE_TalkerPriority(priority),
cellIdentifier := cell_id,
layer3Information := omit,
mobileIdentity := mobile_id
}
}
}
}
template (present) PDU_BSSAP
tr_BSSMAP_UplinkReq_MI(template BIT2 priority,
template (omit) BSSMAP_IE_CellIdentifier cell_id,
template (present) BSSMAP_IE_MobileIdentity mobile_id)
modifies tr_BSSAP_BSSMAP := {
pdu := {
bssmap := {
uplinkRequest := {
messageType := '1F'O,
talkerPriority := tr_BSSMAP_IE_TalkerPriority(priority),
cellIdentifier := cell_id,
layer3Information := omit,
mobileIdentity := mobile_id
}
}
}
}
/* 3.2.1.58 */
template (value) PDU_BSSAP
ts_BSSMAP_UplinkReqAck(template (omit) BIT2 priority,
template (omit) BSSMAP_IE_EmergencySetIndication ems := omit,
template (omit) BSSMAP_IE_TalkerIdentity talker_id := omit)
modifies ts_BSSAP_BSSMAP := {
pdu := {
bssmap := {
uplinkRequestAck := {
messageType := '27'O,
talkerPriority := ts_BSSMAP_IE_TalkerPriority(priority),
emergencySetIndication := ems,
talkerIdentity := talker_id
}
}
}
}
template (present) PDU_BSSAP
tr_BSSMAP_UplinkReqAck(template BIT2 priority,
template BSSMAP_IE_EmergencySetIndication ems := *,
template BSSMAP_IE_TalkerIdentity talker_id := *)
modifies tr_BSSAP_BSSMAP := {
pdu := {
bssmap := {
uplinkRequestAck := {
messageType := '27'O,
talkerPriority := tr_BSSMAP_IE_TalkerPriority(priority),
emergencySetIndication := ems,
talkerIdentity := talker_id
}
}
}
}
/* 3.2.1.59 */
template (value) PDU_BSSAP
ts_BSSMAP_UplinkReqConf(template (value) BSSMAP_IE_CellIdentifier cell_id,
template (omit) BSSMAP_IE_TalkerIdentity talker_id := omit,
template (value) octetstring l3_info)
modifies ts_BSSAP_BSSMAP := {
pdu := {
bssmap := {
uplinkRequestConfirmation := {
messageType := '49'O,
cellIdentifier := cell_id,
talkerIdentity := talker_id,
layer3Information := ts_BSSMAP_IE_L3Info(l3_info)
}
}
}
}
template (present) PDU_BSSAP
tr_BSSMAP_UplinkReqConf(template (present) BSSMAP_IE_CellIdentifier cell_id,
template BSSMAP_IE_TalkerIdentity talker_id := *,
template (present) octetstring l3_info)
modifies tr_BSSAP_BSSMAP := {
pdu := {
bssmap := {
uplinkRequestConfirmation := {
messageType := '49'O,
cellIdentifier := cell_id,
talkerIdentity := talker_id,
layer3Information := tr_BSSMAP_IE_L3Info(l3_info)
}
}
}
}
/* 3.2.1.60 */
template (value) PDU_BSSAP
ts_BSSMAP_UplinkRelInd(BssmapCause cause, template (omit) BIT2 prio)
modifies ts_BSSAP_BSSMAP := {
pdu := {
bssmap := {
uplinkReleaseIndication := {
messageType := '4A'O,
cause := ts_BSSMAP_IE_Cause(cause),
talkerPriority := ts_BSSMAP_IE_TalkerPriority(prio)
}
}
}
}
template (present) PDU_BSSAP
tr_BSSMAP_UplinkRelInd(template (present) myBSSMAP_Cause cause, template BIT2 prio)
modifies tr_BSSAP_BSSMAP := {
pdu := {
bssmap := {
uplinkReleaseIndication := {
messageType := '4A'O,
cause := tr_BSSMAP_IE_Cause(cause),
talkerPriority := tr_BSSMAP_IE_TalkerPriority(prio)
}
}
}
}
/* 3.2.1.61 */
template (value) PDU_BSSAP
ts_BSSMAP_UplinkRejCmd(BssmapCause cause,
template (omit) BIT2 cur_talker_prio := omit,
template (omit) BIT2 rej_talker_prio := omit,
template (omit) BSSMAP_IE_TalkerIdentity talker_id := omit)
modifies ts_BSSAP_BSSMAP := {
pdu := {
bssmap := {
uplinkRejectCommand := {
messageType := '4B'O,
cause := ts_BSSMAP_IE_Cause(cause),
currentTalkerPriority := ts_BSSMAP_IE_TalkerPriority(cur_talker_prio),
rejectedTalkerPriority := ts_BSSMAP_IE_TalkerPriority(rej_talker_prio),
talkerIdentity := talker_id
}
}
}
}
template (present) PDU_BSSAP
tr_BSSMAP_UplinkRejCmd(template (present) myBSSMAP_Cause cause,
template BIT2 cur_talker_prio := *,
template BIT2 rej_talker_prio := *,
template BSSMAP_IE_TalkerIdentity talker_id := *)
modifies tr_BSSAP_BSSMAP := {
pdu := {
bssmap := {
uplinkRejectCommand := {
messageType := '4B'O,
cause := tr_BSSMAP_IE_Cause(cause),
currentTalkerPriority := tr_BSSMAP_IE_TalkerPriority(cur_talker_prio),
rejectedTalkerPriority := tr_BSSMAP_IE_TalkerPriority(rej_talker_prio),
talkerIdentity := talker_id
}
}
}
}
/* 3.2.1.62 */
template (value) PDU_BSSAP
ts_BSSMAP_UplinkRelCmd(BssmapCause cause)
modifies ts_BSSAP_BSSMAP := {
pdu := {
bssmap := {
uplinkReleaseCommand := {
messageType := '4C'O,
cause := ts_BSSMAP_IE_Cause(cause)
}
}
}
}
template (present) PDU_BSSAP
tr_BSSMAP_UplinkRelCmd(template (present) myBSSMAP_Cause cause)
modifies tr_BSSAP_BSSMAP := {
pdu := {
bssmap := {
uplinkReleaseCommand := {
messageType := '4C'O,
cause := tr_BSSMAP_IE_Cause(cause)
}
}
}
}
/* 3.2.1.63 */
template (value) PDU_BSSAP
ts_BSSMAP_UplinkSeizedCmd(BssmapCause cause,
template (omit) BIT2 talker_prio := omit,
template (omit) BSSMAP_IE_EmergencySetIndication emerg := omit,
template (omit) BSSMAP_IE_TalkerIdentity talker_id := omit)
modifies ts_BSSAP_BSSMAP := {
pdu := {
bssmap := {
uplinkSeizedCommand := {
messageType := '4D'O,
cause := ts_BSSMAP_IE_Cause(cause),
talkerPriority := ts_BSSMAP_IE_TalkerPriority(talker_prio),
emergencySetIndication := emerg,
talkerIdentity := talker_id
}
}
}
}
template (present) PDU_BSSAP
tr_BSSMAP_UplinkSeizedCmd(template (present) myBSSMAP_Cause cause,
template BIT2 talker_prio := *,
template BSSMAP_IE_EmergencySetIndication emerg := *,
template BSSMAP_IE_TalkerIdentity talker_id := *)
modifies tr_BSSAP_BSSMAP := {
pdu := {
bssmap := {
uplinkSeizedCommand := {
messageType := '4D'O,
cause := tr_BSSMAP_IE_Cause(cause),
talkerPriority := tr_BSSMAP_IE_TalkerPriority(talker_prio),
emergencySetIndication := emerg,
talkerIdentity := talker_id
}
}
}
}
/* Section 3.2.1.82 */
template (value) PDU_BSSAP
ts_BSSMAP_NotificationData(template (value) OCT9 app_data, template (value) DataIdentity data_identity)
modifies ts_BSSAP_BSSMAP := {
pdu := {
bssmap := {
notificationData := {
messageType := '62'O,
applicationData := ts_BSSMAP_IE_ApplicationData(app_data),
dataIdentity := ts_BSSMAP_IE_DataIdentity(data_identity),
mSISDN := omit
}
}
}
}
template (present) PDU_BSSAP
tr_BSSMAP_NotificationData(template (present) OCT9 app_data, template (present) DataIdentity data_identity)
modifies ts_BSSAP_BSSMAP := {
pdu := {
bssmap := {
notificationData := {
messageType := '62'O,
applicationData := tr_BSSMAP_IE_ApplicationData(app_data),
dataIdentity := tr_BSSMAP_IE_DataIdentity(data_identity),
mSISDN := ?
}
}
}
}
template (value) PDU_BSSAP
ts_BSSMAP_Perform_Location_Request(template (omit) BSSMAP_IE_IMSI imsi,
template (omit) BSSMAP_IE_CellIdentifier cellIdentifier := omit,
template (omit) BSSMAP_IE_LCSClientType clientType := ts_BSSMAP_IE_LCSClientType,
template (omit) BSSMAP_IE_LCSPriority priority := ts_BSSMAP_IE_LCSPriority,
template (omit) BSSMAP_IE_LCSQOS qos := ts_BSSMAP_IE_LCSQOS)
modifies ts_BSSAP_BSSMAP := {
pdu := {
bssmap := {
performLocationRequest := {
messageType := '2B'O,
locationType := ts_BSSMAP_IE_LocationType,
cellIdentifier := cellIdentifier,
classmarkInformationType3 := omit,
lCS_ClientType := clientType,
chosenChannel := omit,
lCS_Priority := priority,
lCS_QOS := qos,
gPS_AssistanceData := omit,
aPDU := omit,
iMSI := imsi,
iMEI := omit,
gANSS_LocationType := omit,
gANSS_AssistanceData := omit
}
}
}
}
template (present) BSSMAP_IE_LocationEstimate tr_BSSMAP_IE_LocationEstimate(template (present) octetstring geo_loc := ?)
:= {
elementIdentifier := '45'O,
lengthIndicator := ?,
geographicLocation := geo_loc
}
function tr_BSSMAP_LcsCause(template (present) BSSMAP_LcsCause cause)
return template (omit) BSSMAP_IE_LCSCause {
if (istemplatekind(cause, "omit")) {
return omit;
}
var template BSSMAP_IE_LCSCause ie := {
elementIdentifier := '47'O,
lengthIndicator := 1,
causeValue := int2bit(enum2int(valueof(cause)), 8),
diagnosticValue := omit
}
return ie;
}
template (present) PDU_BSSAP tr_BSSMAP_Perform_Location_Response(
template BSSMAP_IE_LocationEstimate locationEstimate := *,
template BSSMAP_IE_PositioningData positioningData := *,
template BSSMAP_IE_LCSCause lCS_Cause := *
)
modifies tr_BSSAP_BSSMAP := {
pdu := {
bssmap := {
performLocationResponse := {
messageType := '2D'O,
locationEstimate := locationEstimate,
positioningData := positioningData,
decipheringKeys := *,
lCS_Cause := lCS_Cause,
velocityEstimate := *,
gANSS_PositioningData := *
}
}
}
}
template (present) PDU_BSSAP tr_BSSMAP_Perform_Location_Abort(template (present) BSSMAP_IE_LCSCause lCS_Cause := ?)
modifies tr_BSSAP_BSSMAP := {
pdu := {
bssmap := {
performLocationAbort := {
messageType := '2E'O,
lCS_Cause := lCS_Cause
}
}
}
}
} with { encode "RAW" };