155 lines
3.6 KiB
Plaintext
155 lines
3.6 KiB
Plaintext
module L3_Templates {
|
|
|
|
/* L3 Templates, building on top of MobileL3*_Types from Ericsson.
|
|
*
|
|
* (C) 2017 by Harald Welte <laforge@gnumonks.org>
|
|
* All rights reserved.
|
|
*
|
|
* Released under the terms of GNU General Public License, Version 2 or
|
|
* (at your option) any later version.
|
|
*/
|
|
|
|
import from General_Types all;
|
|
import from MobileL3_Types all;
|
|
import from MobileL3_CommonIE_Types all;
|
|
import from MobileL3_MM_Types all;
|
|
import from MobileL3_RRM_Types all;
|
|
|
|
type enumerated CmServiceType {
|
|
CM_TYPE_MO_CALL ('0001'B),
|
|
CM_TYPE_EMERG_CALL ('0010'B),
|
|
CM_TYPE_MO_SMS ('0100'B),
|
|
CM_TYPE_SS_ACT ('1000'B)
|
|
}
|
|
|
|
|
|
/* send template fro Mobile Identity (TMSI) */
|
|
template MobileIdentityLV ts_MI_TMSI_LV(OCT4 tmsi) := {
|
|
lengthIndicator := 0, /* overwritten */
|
|
mobileIdentityV := {
|
|
typeOfIdentity := '000'B, /* overwritten */
|
|
oddEvenInd_identity := {
|
|
tmsi_ptmsi := {
|
|
oddevenIndicator := '0'B,
|
|
fillerDigit := '1111'B,
|
|
octets := tmsi
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
private function f_enc_IMSI_L3(hexstring digits) return IMSI_L3 {
|
|
var IMSI_L3 l3;
|
|
var integer len := lengthof(digits);
|
|
if (len rem 2 == 1) { /* modulo remainder */
|
|
l3.oddevenIndicator := '1'B;
|
|
l3.fillerDigit := '1111'B;
|
|
} else {
|
|
l3.oddevenIndicator := '0'B;
|
|
l3.fillerDigit := omit;
|
|
}
|
|
l3.digits := digits;
|
|
return l3;
|
|
}
|
|
|
|
/* send template fro Mobile Identity (IMSI) */
|
|
template (value) MobileIdentityLV ts_MI_IMSI_LV(hexstring imsi_digits) := {
|
|
lengthIndicator := 0, /* overwritten */
|
|
mobileIdentityV := {
|
|
typeOfIdentity := '000'B, /* overwritten */
|
|
oddEvenInd_identity := {
|
|
imsi := f_enc_IMSI_L3(imsi_digits)
|
|
}
|
|
}
|
|
}
|
|
|
|
/* Send template for Classmark 2 */
|
|
template (value) MobileStationClassmark2_LV ts_CM2 := {
|
|
lengthIndicator := 0,
|
|
rf_PowerCapability := '000'B,
|
|
a5_1 := '0'B,
|
|
esind := '1'B,
|
|
revisionLevel := '10'B,
|
|
spare1_1 := '0'B,
|
|
mobileStationClassmark2_oct4 := omit,
|
|
mobileStationClassmark2_oct5 := omit
|
|
};
|
|
|
|
/* Send template for CM SERVICE REQUEST */
|
|
template (value) PDU_ML3_MS_NW ts_CM_SERV_REQ(BIT4 serv_type, MobileIdentityLV mi_lv) := {
|
|
discriminator := '0000'B, /* overwritten */
|
|
tiOrSkip := {
|
|
skipIndicator := '0000'B
|
|
},
|
|
msgs := {
|
|
mm := {
|
|
cMServiceRequest := {
|
|
messageType := '000000'B, /* overwritten */
|
|
nsd := '00'B,
|
|
cm_ServiceType := serv_type,
|
|
cipheringKeySequenceNumber := { '000'B, '0'B },
|
|
mobileStationClassmark2 := ts_CM2,
|
|
mobileIdentity := mi_lv,
|
|
priorityLevel := omit,
|
|
additionalUpdateParameterTV := omit,
|
|
deviceProperties := omit
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
/* Send template for PAGING RESPONSE */
|
|
template (value) PDU_ML3_MS_NW ts_PAG_RESP(MobileIdentityLV mi_lv) := {
|
|
discriminator := '0000'B, /* overwritten */
|
|
tiOrSkip := {
|
|
skipIndicator := '0000'B
|
|
},
|
|
msgs := {
|
|
rrm := {
|
|
pagingResponse := {
|
|
messageType := '00000000'B, /* overwritten */
|
|
cipheringKeySequenceNumber := { '000'B, '0'B },
|
|
spare1_4 := '0000'B,
|
|
mobileStationClassmark := ts_CM2,
|
|
mobileIdentity := mi_lv,
|
|
additionalUpdateParameters := omit
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
template (value) PDU_ML3_MS_NW ts_RRM_ModeModifyAck(ChannelDescription2_V desc, ChannelMode_V mode) := {
|
|
discriminator := '0000'B, /* overwritten */
|
|
tiOrSkip := {
|
|
skipIndicator := '0000'B
|
|
},
|
|
msgs := {
|
|
rrm := {
|
|
channelModeModifyAck := {
|
|
messageType := '00010111'B,
|
|
channelDescription := desc,
|
|
channelMode := mode,
|
|
extendedTSCSet := omit
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
template (value) PDU_ML3_MS_NW ts_RRM_CiphModeCompl := {
|
|
discriminator := '0000'B, /* overwritten */
|
|
tiOrSkip := {
|
|
skipIndicator := '0000'B
|
|
},
|
|
msgs := {
|
|
rrm := {
|
|
cipheringModeComplete := {
|
|
messageType := '00110010'B,
|
|
mobileEquipmentIdentity := omit
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
}
|