bts: Type Definition + Template for SI3; Send SI3 at start of test

The BTS needs some of the SI3 parameters like BS_AG_BLKS_RES for
internal computations, so make sure we send it after the connection
has been established.

Change-Id: I5dc3724f79e669f52593cd776806d84b4dd4bf5c
This commit is contained in:
Harald Welte 2018-02-24 14:09:45 +01:00
parent 874c22393e
commit 7484fc41b4
4 changed files with 142 additions and 1 deletions

View File

@ -12,6 +12,7 @@ import from LAPDm_Types all;
import from Osmocom_CTRL_Adapter all;
import from RSL_Types all;
import from IPA_Types all;
import from IPA_Emulation all;
import from RSL_Emulation all;
@ -20,6 +21,9 @@ import from TRXC_Types all;
import from TRXC_CodecPort all;
import from TRXC_CodecPort_CtrlFunct all;
import from L3_Templates all;
import from MobileL3_CommonIE_Types all;
/* The tests assume a BTS with the following timeslot configuration:
* TS0 : Combined CCCH + SDCCH/4
* TS1 .. TS 4: TCH/F
@ -75,11 +79,62 @@ type record ConnHdlrPars {
ConnL1Pars l1_pars
}
/* Default SYSTEM INFORMATION 3 */
template (value) GsmRrMessage ts_SI3_default := {
header := t_RrHeader(SYSTEM_INFORMATION_TYPE_3, 0),
payload := {
si3 := {
cell_id := 23,
lai := {
mcc_mnc := '262F42'H,
lac := 42
},
ctrl_chan_desc := {
msc_r99 := true,
att := true,
bs_ag_blks_res := 1,
ccch_conf := CCHAN_DESC_1CCCH_COMBINED,
si22_ind := false,
cbq3 := CBQ3_IU_MODE_NOT_SUPPORTED,
spare := '00'B,
bs_pa_mfrms := 0, /* 2 multiframes */
t3212 := 1 /* 6 minutes */
},
cell_opts := {
dn_ind := false,
pwrc := false,
dtx := MS_MAY_USE_UL_DTX,
radio_link_tout_div4 := 4/4
},
cell_sel_pars := {
cell_resel_hyst_2dB := 0,
ms_txpwr_max_cch := 0,
acs := '0'B,
neci := true,
rxlev_access_min := 0
},
rach_ctrl_pars := {
max_retrans := RACH_MAX_RETRANS_1,
tx_integer := '0000'B, /* 3 slots */
cell_bar_access := false,
re_not_allowed := true,
acc := '1111111111111111'B
},
rest_octets := ''O
}
}
}
/* global init function */
function f_init(charstring id) runs on test_CT {
f_init_rsl(id);
RSL_CCHAN.receive(ASP_IPA_Event:{up_down := ASP_IPA_EVENT_UP});
/* Send SI3 to the BTS, it is needed for various computations */
var GsmRrMessage si3 := valueof(ts_SI3_default);
log("Sending SI3 ", si3);
var octetstring si3_enc := enc_GsmRrMessage(si3);
RSL_CCHAN.send(ts_RSL_UD(ts_RSL_BCCH_INFO(RSL_SYSTEM_INFO_3, si3_enc)));
}
type function void_fn(charstring id) runs on ConnHdlr;
@ -99,6 +154,17 @@ runs on test_CT return ConnHdlr {
return vc_conn;
}
template ASP_RSL_Unitdata ts_RSL_UD(template RSL_Message rsl, IpaStreamId sid := IPAC_PROTO_RSL_TRX0) := {
streamId := sid,
rsl := rsl
}
template ASP_RSL_Unitdata tr_RSL_UD(template RSL_Message rsl,
template IpaStreamId sid := IPAC_PROTO_RSL_TRX0) := {
streamId := sid,
rsl := rsl
}
private altstep as_Tguard() runs on ConnHdlr {
[] g_Tguard.timeout {
setverdict(fail, "Tguard timeout");

View File

@ -366,6 +366,68 @@ module GSM_RR_Types {
uint3_t non_drx_timer
} with { variant "" };
/* 44.018 10.5.2.3 */
type enumerated CellOptions_DTX {
MS_MAY_USE_UL_DTX ('00'B),
MS_SHALL_USE_UL_DTX ('01'B),
MS_SHALL_NOT_USE_UL_DTX ('10'B)
} with { variant "FIELDLENGTH(2)" };
type record CellOptions {
boolean dn_ind,
boolean pwrc,
CellOptions_DTX dtx,
uint4_t radio_link_tout_div4
} with { variant "" };
/* 44.018 10.5.2.4 */
type record CellSelectionPars {
uint3_t cell_resel_hyst_2dB,
uint5_t ms_txpwr_max_cch,
BIT1 acs,
boolean neci,
uint6_t rxlev_access_min
} with { variant "" };
/* 44.018 10.5.2.29 */
type enumerated RachCtrlPar_MR {
RACH_MAX_RETRANS_1 ('00'B),
RACH_MAX_RETRANS_2 ('01'B),
RACH_MAX_RETRANS_4 ('10'B),
RACH_MAX_RETRANS_7 ('11'B)
} with { variant "FIELDLENGTH(2)" };
type record RachControlPars {
RachCtrlPar_MR max_retrans,
BIT4 tx_integer,
boolean cell_bar_access,
boolean re_not_allowed,
BIT16 acc
} with { variant "" };
/* 44.018 10.5.2.11 */
type enumerated CtrlChanDesc_CC {
CCHAN_DESC_1CCCH_NOT_COMBINED ('000'B),
CCHAN_DESC_1CCCH_COMBINED ('001'B),
CCHAN_DESC_2CCCH_NOT_COMBINED ('010'B),
CCHAN_DESC_3CCCH_NOT_COMBINED ('100'B),
CCHAN_DESC_4CCCH_NOT_COMBINED ('110'B)
} with { variant "FIELDLENGTH(3)" };
type enumerated CBQ3 {
CBQ3_IU_MODE_NOT_SUPPORTED ('00'B),
CBQ3_IU_MODE_MS_BARRED ('01'B),
CBQ3_IU_MODE_NOT_BARRED ('10'B)
} with { variant "FIELDLENGTH(2)" };
type record CtrlChanDesc {
boolean msc_r99,
boolean att,
uint3_t bs_ag_blks_res,
CtrlChanDesc_CC ccch_conf,
boolean si22_ind,
CBQ3 cbq3,
BIT2 spare,
uint3_t bs_pa_mfrms, /* off by 2 */
uint8_t t3212
} with { variant "" };
/* 24.008 10.5.5.15 */
type record RoutingAreaIdentification {
LocationAreaIdentification lai,
@ -577,6 +639,16 @@ module GSM_RR_Types {
RestOctets rest_octets
} with { variant "" };
/* 9.1.35 */
type record SystemInformationType3 {
CellIdentity cell_id,
LocationAreaIdentification lai,
CtrlChanDesc ctrl_chan_desc,
CellOptions cell_opts,
CellSelectionPars cell_sel_pars,
RachControlPars rach_ctrl_pars,
RestOctets rest_octets
} with { variant (rest_octets) "FIELDLENGTH(4)" };
type union RrUnion {
/*
@ -584,13 +656,13 @@ module GSM_RR_Types {
SystemInformationType2 si2,
SystemInformationType2bis si2bis,
SystemInformationType2ter si2ter,
SystemInformationType3 si3,
SystemInformationType4 si4,
SystemInformationType5 si5,
SystemInformationType5bis si5bis,
SystemInformationType5ter si5ter,
SystemInformationType6 si6,
*/
SystemInformationType3 si3,
ImmediateAssignment imm_ass,
ImmediateAssignmentReject imm_ass_rej,
PagingRequestType1 pag_req_1,

View File

@ -75,6 +75,7 @@ group SimpleNativeTypes {
type bitstring BIT16 length(16) with { variant "FIELDLENGTH(16)" };
type bitstring BIT24 length(24) with { variant "FIELDLENGTH(24)" };
type bitstring BIT31 length(31) with { variant "FIELDLENGTH(31)" };
type bitstring BIT32 length(32) with { variant "FIELDLENGTH(32)" };
type bitstring BIT56 length(56) with { variant "FIELDLENGTH(56)" };
//****************************************************

View File

@ -2093,6 +2093,8 @@ function f_gen_msisdn(integer suffix) return hexstring {
return f_concat_pad(12, '49123'H, suffix);
}
external function enc_MobileIdentityLV(in MobileIdentityLV si) return octetstring
with { extension "prototype(convert) encode(RAW)" };
}