BSSMAP_Templates: Add templates for various PAGING options
This commit is contained in:
parent
51d74101b8
commit
72cecfa26c
|
@ -2,6 +2,7 @@ module BSSMAP_Templates {
|
|||
|
||||
import from General_Types all;
|
||||
import from Osmocom_Types all;
|
||||
import from GSM_Types all;
|
||||
import from BSSAP_Types all;
|
||||
|
||||
type integer BssmapCause;
|
||||
|
@ -443,17 +444,68 @@ template BSSMAP_IE_IMSI ts_BSSMAP_Imsi(hexstring imsi_digits) := {
|
|||
digits := imsi_digits
|
||||
}
|
||||
|
||||
template PDU_BSSAP ts_BSSMAP_Paging(hexstring imsi_digits, BSSMAP_FIELD_CellIdentificationList cid_list,
|
||||
template integer tmsi := omit)
|
||||
template BSSMAP_FIELD_CellIdentificationList ts_BSSMAP_CIL_noCell := {
|
||||
cIl_noCell := ''O
|
||||
}
|
||||
|
||||
private function f_enc_mcc_mnc(GsmMcc mcc, GsmMnc mnc) return OCT3 {
|
||||
return hex2oct(mcc[1] & mcc[0] & mnc[0] & mnc[3] & mnc[2]);
|
||||
}
|
||||
|
||||
template 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 BSSMAP_FIELD_CellIdentification_LAC_CI ts_BSSMAP_CI_LAC_CI(GsmLac lac, GsmCellId ci) := {
|
||||
lac := int2oct(lac, 2),
|
||||
ci := int2oct(ci, 2)
|
||||
}
|
||||
|
||||
template 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 OCT2 ts_BSSMAP_CI_CI(GsmCellId ci) := int2oct(ci, 2);
|
||||
template OCT2 ts_BSSMAP_CI_LAC(GsmLac lac) := int2oct(lac, 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
|
||||
};
|
||||
|
||||
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 := '51'O,
|
||||
iMSI := ts_BSSMAP_Imsi(imsi_digits),
|
||||
tMSI := omit, // FIXME: convert tmsi,
|
||||
cellIdentifierList := ts_BSSMAP_IE_CidList(cid_list),
|
||||
channelNeeded := omit,
|
||||
tMSI := f_tmsi_or_omit(tmsi),
|
||||
cellIdentifierList := ts_BSSMAP_IE_CidList(valueof(cid_list)),
|
||||
channelNeeded := chneed,
|
||||
eMLPP_Priority := omit,
|
||||
pagingInformation := omit /* only VGCS/VBS flag */
|
||||
}
|
||||
|
|
|
@ -17,6 +17,10 @@ module GSM_Types {
|
|||
type integer GsmTsc (0..7) with { variant "FIELDLENGTH(8)" };
|
||||
type uint32_t GsmTmsi;
|
||||
type uint32_t GprsTlli;
|
||||
type hexstring GsmMcc length(3);
|
||||
type hexstring GsmMnc length(2 .. 3);
|
||||
type uint16_t GsmLac;
|
||||
type uint16_t GsmCellId;
|
||||
|
||||
type enumerated GprsCodingScheme {
|
||||
CS1, CS2, CS3, CS4
|
||||
|
|
Loading…
Reference in New Issue