bsc: add first test to verify System Information on RSL startup
Change-Id: I6a8ef404087efee491390dc1d2452ac323f145f0
This commit is contained in:
parent
eacec8abb5
commit
5e686dce2d
|
@ -59,6 +59,9 @@ import from BSSMAP_Templates all;
|
|||
|
||||
import from SCCPasp_Types all;
|
||||
|
||||
import from GSM_SystemInformation all;
|
||||
import from GSM_RestOctets all;
|
||||
|
||||
const integer NUM_BTS := 3;
|
||||
const integer NUM_MSC := 3;
|
||||
const float T3101_MAX := 12.0;
|
||||
|
@ -84,6 +87,358 @@ const CounterNameVals counternames_msc_mscpool := {
|
|||
{ "mscpool:subscr:paged", 0 }
|
||||
};
|
||||
|
||||
/* Set of all System Information received during one RSL port's startup.
|
||||
* Note that some System Information may be sent on RSL, but lacking actual SI data, to indicate that the BTS should not
|
||||
* broadcast that SI type. That will be reflected as 'omit' here.
|
||||
*/
|
||||
type record SystemInformationConfig {
|
||||
SystemInformationType1 si1 optional,
|
||||
SystemInformationType2 si2 optional,
|
||||
SystemInformationType2bis si2bis optional,
|
||||
SystemInformationType2ter si2ter optional,
|
||||
record of SI2quaterRestOctets si2quater optional,
|
||||
SystemInformationType3 si3 optional,
|
||||
SystemInformationType4 si4 optional,
|
||||
/* TODO: replace with proper decoding of SI13, implement SI13 in GSM_SystemInformation.ttcn */
|
||||
octetstring si13 optional,
|
||||
SystemInformationType5 si5 optional,
|
||||
SystemInformationType5bis si5bis optional,
|
||||
SystemInformationType5ter si5ter optional,
|
||||
SystemInformationType6 si6 optional
|
||||
};
|
||||
|
||||
const SystemInformationConfig SystemInformationConfig_omit := {
|
||||
si1 := omit,
|
||||
si2 := omit,
|
||||
si2bis := omit,
|
||||
si2ter := omit,
|
||||
si2quater := omit,
|
||||
si3 := omit,
|
||||
si4 := omit,
|
||||
si13 := omit,
|
||||
si5 := omit,
|
||||
si5bis := omit,
|
||||
si5ter := omit,
|
||||
si6 := omit
|
||||
};
|
||||
|
||||
/* tr_EUTRAN_CellDesc with defaults used in BSC_Tests.ttcn */
|
||||
template EUTRAN_CellDesc tr_EUTRAN_CellDesc_default(template (present) uint16_t e_arfcn := ?,
|
||||
template uint3_t meas_bw := 3)
|
||||
:= tr_EUTRAN_CellDesc(e_arfcn := e_arfcn,
|
||||
meas_bw_presence := '1'B,
|
||||
meas_bw := meas_bw);
|
||||
|
||||
/* tr_EUTRAN_NeighbourCells with defaults used in BSC_Tests.ttcn */
|
||||
template EUTRAN_NeighbourCells tr_EUTRAN_NeighbourCells_default(template EUTRAN_CellDescs cell_desc_list := { tr_EUTRAN_CellDesc_default },
|
||||
template uint3_t prio := 3,
|
||||
template (present) uint5_t thresh_high := 20,
|
||||
template uint5_t thresh_low := 10,
|
||||
template uint5_t qrxlevmin := 22)
|
||||
:= tr_EUTRAN_NeighbourCells(
|
||||
cell_desc_list := cell_desc_list,
|
||||
prio_presence := '1'B,
|
||||
prio := prio,
|
||||
thresh_high := thresh_high,
|
||||
thresh_low_presence := '1'B,
|
||||
thresh_low := thresh_low,
|
||||
qrxlevmin_presence := '1'B,
|
||||
qrxlevmin := qrxlevmin);
|
||||
|
||||
template SystemInformationConfig SystemInformationConfig_default := {
|
||||
si1 := {
|
||||
cell_chan_desc := '8FB38000000000000000000000000000'O,
|
||||
rach_control := {
|
||||
max_retrans := RACH_MAX_RETRANS_7,
|
||||
tx_integer := '1001'B,
|
||||
cell_barr_access := false,
|
||||
re_not_allowed := true,
|
||||
acc := '0000010000000000'B
|
||||
},
|
||||
rest_octets := ?
|
||||
},
|
||||
si2 := {
|
||||
bcch_freq_list := '00000000000000000000000000000000'O,
|
||||
ncc_permitted := '11111111'B,
|
||||
rach_control := {
|
||||
max_retrans := RACH_MAX_RETRANS_7,
|
||||
tx_integer := '1001'B,
|
||||
cell_barr_access := false,
|
||||
re_not_allowed := true,
|
||||
acc := '0000010000000000'B
|
||||
}
|
||||
},
|
||||
si2bis := omit,
|
||||
si2ter := {
|
||||
extd_bcch_freq_list := '8E320000000000000000000000000800'O,
|
||||
rest_octets := ?
|
||||
},
|
||||
si2quater := {
|
||||
tr_SI2quaterRestOctets_EUTRAN( repeated_neigh_cells := { tr_EUTRAN_NeighbourCells_default } )
|
||||
},
|
||||
si3 := {
|
||||
cell_id := 0,
|
||||
lai := {
|
||||
mcc_mnc := '001F01'H,
|
||||
lac := 1
|
||||
},
|
||||
ctrl_chan_desc := {
|
||||
msc_r99 := true,
|
||||
att := true,
|
||||
bs_ag_blks_res := 1,
|
||||
ccch_conf := CCHAN_DESC_1CCCH_COMBINED,
|
||||
si22ind := false,
|
||||
cbq3 := CBQ3_IU_MODE_NOT_SUPPORTED,
|
||||
spare := '00'B,
|
||||
bs_pa_mfrms := 3,
|
||||
t3212 := 30
|
||||
},
|
||||
cell_options := {
|
||||
dn_ind := false,
|
||||
pwrc := false,
|
||||
dtx := MS_SHALL_USE_UL_DTX,
|
||||
radio_link_tout_div4 := 7
|
||||
},
|
||||
cell_sel_par := {
|
||||
cell_resel_hyst_2dB := 2,
|
||||
ms_txpwr_max_cch := 7,
|
||||
acs := '0'B,
|
||||
neci := true,
|
||||
rxlev_access_min := 0
|
||||
},
|
||||
rach_control := {
|
||||
max_retrans := RACH_MAX_RETRANS_7,
|
||||
tx_integer := '1001'B,
|
||||
cell_barr_access := false,
|
||||
re_not_allowed := true,
|
||||
acc := '0000010000000000'B
|
||||
},
|
||||
rest_octets := {
|
||||
sel_params := {
|
||||
presence := '0'B,
|
||||
params := omit
|
||||
},
|
||||
pwr_offset := {
|
||||
presence := '0'B,
|
||||
offset := omit
|
||||
},
|
||||
si_2ter_ind := '1'B,
|
||||
early_cm_ind := '0'B,
|
||||
sched_where := {
|
||||
presence := '0'B,
|
||||
where := omit
|
||||
},
|
||||
gprs_ind := {
|
||||
presence := '1'B,
|
||||
ind := {
|
||||
ra_colour := 0,
|
||||
si13_pos := '0'B
|
||||
}
|
||||
},
|
||||
umts_early_cm_ind := '1'B,
|
||||
si2_quater_ind := {
|
||||
presence := '1'B,
|
||||
ind := '0'B
|
||||
},
|
||||
iu_mode_ind := omit,
|
||||
si21_ind := {
|
||||
presence := '0'B,
|
||||
pos := omit
|
||||
}
|
||||
}
|
||||
},
|
||||
si4 := {
|
||||
lai := {
|
||||
mcc_mnc := '001F01'H,
|
||||
lac := 1
|
||||
},
|
||||
cell_sel_par := {
|
||||
cell_resel_hyst_2dB := 2,
|
||||
ms_txpwr_max_cch := 7,
|
||||
acs := '0'B,
|
||||
neci := true,
|
||||
rxlev_access_min := 0
|
||||
},
|
||||
rach_control := {
|
||||
max_retrans := RACH_MAX_RETRANS_7,
|
||||
tx_integer := '1001'B,
|
||||
cell_barr_access := false,
|
||||
re_not_allowed := true,
|
||||
acc := '0000010000000000'B
|
||||
},
|
||||
cbch_chan_desc := omit,
|
||||
cbch_mobile_alloc := omit,
|
||||
rest_octets := {
|
||||
sel_params := {
|
||||
presence := '0'B,
|
||||
params := omit
|
||||
},
|
||||
pwr_offset := {
|
||||
presence := '0'B,
|
||||
offset := omit
|
||||
},
|
||||
gprs_ind := {
|
||||
presence := '1'B,
|
||||
ind := {
|
||||
ra_colour := 0,
|
||||
si13_pos := '0'B
|
||||
}
|
||||
},
|
||||
s_presence := '0'B,
|
||||
s := omit
|
||||
}
|
||||
},
|
||||
si13 := '9000185A6FC9E08410AB2B2B2B2B2B2B2B2B2B2B'O,
|
||||
si5 := {
|
||||
bcch_freq_list := '10000000000000000000000000000000'O
|
||||
},
|
||||
si5bis := omit,
|
||||
si5ter := {
|
||||
extd_bcch_freq_list := '9E050020000000000000000000000000'O
|
||||
},
|
||||
si6 := {
|
||||
cell_id := 0,
|
||||
lai := {
|
||||
mcc_mnc := '001F01'H,
|
||||
lac := 1
|
||||
},
|
||||
cell_options := {
|
||||
dtx_ext := '1'B,
|
||||
pwrc := false,
|
||||
dtx := '01'B,
|
||||
radio_link_timeout := '0111'B
|
||||
},
|
||||
ncc_permitted := '11111111'B,
|
||||
rest_octets := ?
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
/* List of all the System Information received on all RSL ports */
|
||||
type record of SystemInformationConfig SystemInformationConfig_list;
|
||||
|
||||
function f_sysinfo_dec_raw(inout SystemInformationConfig si, RSL_Message rsl)
|
||||
{
|
||||
var RSL_IE_Body sysinfo_type_ie;
|
||||
var RSL_IE_SysinfoType si_type;
|
||||
var octetstring data;
|
||||
|
||||
if (f_rsl_find_ie(rsl, RSL_IE_SYSINFO_TYPE, sysinfo_type_ie) == false) {
|
||||
setverdict(fail, "Cannot find RSL_IE_SYSINFO_TYPE");
|
||||
mtc.stop;
|
||||
}
|
||||
si_type := sysinfo_type_ie.sysinfo_type;
|
||||
|
||||
if (rsl.msg_type == RSL_MT_BCCH_INFO) {
|
||||
var RSL_IE_Body bcch_ie;
|
||||
if (f_rsl_find_ie(rsl, RSL_IE_FULL_BCCH_INFO, bcch_ie)) {
|
||||
data := bcch_ie.other.payload;
|
||||
}
|
||||
} else if (rsl.msg_type == RSL_MT_SACCH_FILL) {
|
||||
var RSL_IE_Body l3_ie;
|
||||
if (f_rsl_find_ie(rsl, RSL_IE_L3_INFO, l3_ie)) {
|
||||
data := l3_ie.l3_info.payload;
|
||||
}
|
||||
} else {
|
||||
setverdict(fail, "Don't understand this System Information message");
|
||||
mtc.stop;
|
||||
}
|
||||
|
||||
var boolean handled := false;
|
||||
|
||||
if (rsl.msg_type == RSL_MT_BCCH_INFO) {
|
||||
handled := true;
|
||||
|
||||
if (si_type == RSL_SYSTEM_INFO_1) {
|
||||
if (not isbound(data)) {
|
||||
si.si1 := omit;
|
||||
} else {
|
||||
si.si1 := dec_SystemInformation(data).payload.si1;
|
||||
}
|
||||
} else if (si_type == RSL_SYSTEM_INFO_2) {
|
||||
if (not isbound(data)) {
|
||||
si.si2 := omit;
|
||||
} else {
|
||||
si.si2 := dec_SystemInformation(data).payload.si2;
|
||||
}
|
||||
} else if (si_type == RSL_SYSTEM_INFO_2bis) {
|
||||
if (not isbound(data)) {
|
||||
si.si2bis := omit;
|
||||
} else {
|
||||
si.si2bis := dec_SystemInformation(data).payload.si2bis;
|
||||
}
|
||||
} else if (si_type == RSL_SYSTEM_INFO_2ter) {
|
||||
if (not isbound(data)) {
|
||||
si.si2ter := omit;
|
||||
} else {
|
||||
si.si2ter := dec_SystemInformation(data).payload.si2ter;
|
||||
}
|
||||
} else if (si_type == RSL_SYSTEM_INFO_2quater) {
|
||||
if (not isbound(data)) {
|
||||
si.si2quater := {};
|
||||
} else {
|
||||
var SystemInformationType2quater decoded := dec_SystemInformation(data).payload.si2quater;
|
||||
/* this is a *record* of SI2quaterRestOctets! (multiplexed) */
|
||||
si.si2quater[decoded.rest_octets.si2quater_index] := decoded.rest_octets;
|
||||
}
|
||||
} else if (si_type == RSL_SYSTEM_INFO_3) {
|
||||
if (not isbound(data)) {
|
||||
si.si3 := omit;
|
||||
} else {
|
||||
si.si3 := dec_SystemInformation(data).payload.si3;
|
||||
}
|
||||
} else if (si_type == RSL_SYSTEM_INFO_4) {
|
||||
if (not isbound(data)) {
|
||||
si.si4 := omit;
|
||||
} else {
|
||||
si.si4 := dec_SystemInformation(data).payload.si4;
|
||||
}
|
||||
} else if (si_type == RSL_SYSTEM_INFO_13) {
|
||||
if (not isbound(data)) {
|
||||
si.si13 := omit;
|
||||
} else {
|
||||
si.si13 := dec_SystemInformation(data).payload.other;
|
||||
}
|
||||
} else {
|
||||
handled := false;
|
||||
}
|
||||
} else if (rsl.msg_type == RSL_MT_SACCH_FILL) {
|
||||
handled := true;
|
||||
|
||||
if (si_type == RSL_SYSTEM_INFO_5) {
|
||||
if (not isbound(data)) {
|
||||
si.si5 := omit;
|
||||
} else {
|
||||
si.si5 := dec_SystemInformation(data).payload.si5;
|
||||
}
|
||||
} else if (si_type == RSL_SYSTEM_INFO_5bis) {
|
||||
if (not isbound(data)) {
|
||||
si.si5bis := omit;
|
||||
} else {
|
||||
si.si5bis := dec_SystemInformation(data).payload.si5bis;
|
||||
}
|
||||
} else if (si_type == RSL_SYSTEM_INFO_5ter) {
|
||||
if (not isbound(data)) {
|
||||
si.si5ter := omit;
|
||||
} else {
|
||||
si.si5ter := dec_SystemInformation(data).payload.si5ter;
|
||||
}
|
||||
} else if (si_type == RSL_SYSTEM_INFO_6) {
|
||||
if (not isbound(data)) {
|
||||
si.si6 := omit;
|
||||
} else {
|
||||
si.si6 := dec_SystemInformation(data).payload.si6;
|
||||
}
|
||||
} else {
|
||||
handled := false;
|
||||
}
|
||||
}
|
||||
|
||||
if (not handled) {
|
||||
setverdict(fail, "Unexpected SI type in ", rsl.msg_type, " message: ", si_type);
|
||||
}
|
||||
}
|
||||
|
||||
type component test_CT extends CTRL_Adapter_CT {
|
||||
/* Array of per-BTS state */
|
||||
var BTS_State bts[NUM_BTS];
|
||||
|
@ -117,6 +472,9 @@ type component test_CT extends CTRL_Adapter_CT {
|
|||
timer T_guard := 30.0;
|
||||
|
||||
var CounterNameValsList g_ctr_msc;
|
||||
|
||||
/* System Information bytes as received during RSL startup, for each RSL[idx]. */
|
||||
var SystemInformationConfig_list g_system_information := {};
|
||||
}
|
||||
|
||||
modulepar {
|
||||
|
@ -425,6 +783,54 @@ private function f_logp(charstring log_msg) runs on MSC_ConnHdlr
|
|||
f_vty_transceive(BSCVTY, "logp lglobal notice " & log_msg);
|
||||
}
|
||||
|
||||
private function f_sysinfo_seen(integer rsl_idx, RSL_Message rsl) runs on test_CT
|
||||
{
|
||||
if (rsl_idx >= lengthof(g_system_information)) {
|
||||
g_system_information[rsl_idx] := SystemInformationConfig_omit
|
||||
}
|
||||
f_sysinfo_dec_raw(g_system_information[rsl_idx], rsl);
|
||||
}
|
||||
|
||||
altstep as_catch_RSL_sysinfo(integer rsl_idx) runs on test_CT {
|
||||
var ASP_RSL_Unitdata rx_rsl_ud;
|
||||
|
||||
/* For handler_mode := false, receiving the RSL bootstrap messages directly on IPA_RSL */
|
||||
[] IPA_RSL[rsl_idx].receive(tr_ASP_RSL_UD(tr_RSL_NO_BCCH_INFO)) -> value rx_rsl_ud {
|
||||
f_sysinfo_seen(rsl_idx, rx_rsl_ud.rsl);
|
||||
repeat;
|
||||
}
|
||||
[] IPA_RSL[rsl_idx].receive(tr_ASP_RSL_UD(tr_RSL_BCCH_INFO)) -> value rx_rsl_ud {
|
||||
f_sysinfo_seen(rsl_idx, rx_rsl_ud.rsl);
|
||||
repeat;
|
||||
}
|
||||
[] IPA_RSL[rsl_idx].receive(tr_ASP_RSL_UD(tr_RSL_NO_SACCH_FILL)) -> value rx_rsl_ud {
|
||||
f_sysinfo_seen(rsl_idx, rx_rsl_ud.rsl);
|
||||
repeat;
|
||||
}
|
||||
[] IPA_RSL[rsl_idx].receive(tr_ASP_RSL_UD(tr_RSL_SACCH_FILL)) -> value rx_rsl_ud {
|
||||
f_sysinfo_seen(rsl_idx, rx_rsl_ud.rsl);
|
||||
repeat;
|
||||
}
|
||||
|
||||
/* For handler_mode := true, receiving the RSL bootstrap messages via RSL_Emulation */
|
||||
[] RSL_CCHAN[rsl_idx].receive(tr_ASP_RSL_UD(tr_RSL_NO_BCCH_INFO)) -> value rx_rsl_ud {
|
||||
f_sysinfo_seen(rsl_idx, rx_rsl_ud.rsl);
|
||||
repeat;
|
||||
}
|
||||
[] RSL_CCHAN[rsl_idx].receive(tr_ASP_RSL_UD(tr_RSL_BCCH_INFO)) -> value rx_rsl_ud {
|
||||
f_sysinfo_seen(rsl_idx, rx_rsl_ud.rsl);
|
||||
repeat;
|
||||
}
|
||||
[] RSL_CCHAN[rsl_idx].receive(tr_ASP_RSL_UD(tr_RSL_NO_SACCH_FILL)) -> value rx_rsl_ud {
|
||||
f_sysinfo_seen(rsl_idx, rx_rsl_ud.rsl);
|
||||
repeat;
|
||||
}
|
||||
[] RSL_CCHAN[rsl_idx].receive(tr_ASP_RSL_UD(tr_RSL_SACCH_FILL)) -> value rx_rsl_ud {
|
||||
f_sysinfo_seen(rsl_idx, rx_rsl_ud.rsl);
|
||||
repeat;
|
||||
}
|
||||
}
|
||||
|
||||
/* global initialization function
|
||||
* \param nr_bts Number of BTSs we should start/bring up
|
||||
* \param handler_mode Start an RSL_Emulation_CT component (true) or not (false).
|
||||
|
@ -484,6 +890,32 @@ runs on test_CT {
|
|||
f_wait_oml(bts_idx, "connected", 5.0);
|
||||
}
|
||||
|
||||
function f_init_bts_and_check_sysinfo(integer bts_idx := 0, boolean handler_mode := false,
|
||||
template SystemInformationConfig expect_si)
|
||||
runs on test_CT {
|
||||
var default sysinfo := activate(as_catch_RSL_sysinfo(bts_idx));
|
||||
|
||||
f_init_bts(bts_idx, handler_mode);
|
||||
|
||||
/* Give some time to (hopefully/most likely) collect all system informations from RSL startup.
|
||||
* We could stop as soon as all expected SI are received, but then we might miss SI that we don't expect and
|
||||
* that might be sent afterwards. So rather give a generous timeout and be quite sure to catch all SI.
|
||||
*/
|
||||
f_sleep(5.0);
|
||||
log("RSL ", bts_idx, " SYSTEM INFORMATION: ", g_system_information[bts_idx]);
|
||||
|
||||
deactivate(sysinfo);
|
||||
|
||||
if (match(g_system_information[bts_idx], expect_si)) {
|
||||
setverdict(pass);
|
||||
} else {
|
||||
log("RSL ", bts_idx, ": EXPECTED SI: ", expect_si);
|
||||
log("RSL ", bts_idx, ": GOT SI: ", g_system_information[bts_idx]);
|
||||
setverdict(fail, "received SI does not match expectations");
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
/* expect to receive a RSL message matching a specified template on a given BTS / stream */
|
||||
function f_exp_ipa_rx(integer bts_nr, template RSL_Message t_rx, float t_secs := 2.0, IpaStreamId sid := IPAC_PROTO_RSL_TRX0)
|
||||
runs on test_CT return RSL_Message {
|
||||
|
@ -1273,8 +1705,10 @@ testcase TC_rll_est_ind_inval_sacch() runs on test_CT {
|
|||
setverdict(pass);
|
||||
}
|
||||
|
||||
|
||||
|
||||
testcase TC_si_default() runs on test_CT {
|
||||
f_init(0);
|
||||
f_init_bts_and_check_sysinfo(0, expect_si := SystemInformationConfig_default);
|
||||
}
|
||||
|
||||
testcase TC_ctrl_msc_connection_status() runs on test_CT {
|
||||
var charstring ctrl_resp;
|
||||
|
@ -5237,6 +5671,8 @@ control {
|
|||
execute( TC_ctrl_location() );
|
||||
}
|
||||
|
||||
execute( TC_si_default() );
|
||||
|
||||
/* RSL DCHAN Channel ACtivation / Deactivation */
|
||||
execute( TC_chan_act_noreply() );
|
||||
execute( TC_chan_act_counter() );
|
||||
|
|
|
@ -67,7 +67,7 @@ FILES="TELNETasp_PT.cc TELNETasp_PT.hh TELNETasp_PortType.ttcn"
|
|||
gen_links $DIR $FILES
|
||||
|
||||
DIR=../library
|
||||
FILES="Misc_Helpers.ttcn General_Types.ttcn Osmocom_Types.ttcn GSM_Types.ttcn Osmocom_VTY_Functions.ttcn Native_Functions.ttcn Native_FunctionDefs.cc IPA_Types.ttcn IPA_CodecPort.ttcn IPA_CodecPort_CtrlFunct.ttcn IPA_CodecPort_CtrlFunctDef.cc IPA_Emulation.ttcnpp L3_Templates.ttcn BSSMAP_Templates.ttcn RAN_Emulation.ttcnpp RLCMAC_CSN1_Templates.ttcn RLCMAC_CSN1_Types.ttcn GSM_RR_Types.ttcn RSL_Types.ttcn RSL_Emulation.ttcn MGCP_Emulation.ttcn MGCP_Types.ttcn MGCP_Templates.ttcn MGCP_CodecPort.ttcn MGCP_CodecPort_CtrlFunct.ttcn MGCP_CodecPort_CtrlFunctDef.cc BSSAP_CodecPort.ttcn RAN_Adapter.ttcnpp Osmocom_CTRL_Types.ttcn Osmocom_CTRL_Functions.ttcn Osmocom_CTRL_Adapter.ttcn RTP_CodecPort.ttcn RTP_CodecPort_CtrlFunct.ttcn RTP_CodecPort_CtrlFunctDef.cc RTP_Emulation.ttcn IuUP_Types.ttcn IuUP_EncDec.cc IuUP_Emulation.ttcn SCCP_Templates.ttcn IPA_Testing.ttcn "
|
||||
FILES="Misc_Helpers.ttcn General_Types.ttcn Osmocom_Types.ttcn GSM_Types.ttcn Osmocom_VTY_Functions.ttcn Native_Functions.ttcn Native_FunctionDefs.cc IPA_Types.ttcn IPA_CodecPort.ttcn IPA_CodecPort_CtrlFunct.ttcn IPA_CodecPort_CtrlFunctDef.cc IPA_Emulation.ttcnpp L3_Templates.ttcn BSSMAP_Templates.ttcn RAN_Emulation.ttcnpp RLCMAC_CSN1_Templates.ttcn RLCMAC_CSN1_Types.ttcn GSM_RR_Types.ttcn RSL_Types.ttcn RSL_Emulation.ttcn MGCP_Emulation.ttcn MGCP_Types.ttcn MGCP_Templates.ttcn MGCP_CodecPort.ttcn MGCP_CodecPort_CtrlFunct.ttcn MGCP_CodecPort_CtrlFunctDef.cc BSSAP_CodecPort.ttcn RAN_Adapter.ttcnpp Osmocom_CTRL_Types.ttcn Osmocom_CTRL_Functions.ttcn Osmocom_CTRL_Adapter.ttcn RTP_CodecPort.ttcn RTP_CodecPort_CtrlFunct.ttcn RTP_CodecPort_CtrlFunctDef.cc RTP_Emulation.ttcn IuUP_Types.ttcn IuUP_EncDec.cc IuUP_Emulation.ttcn SCCP_Templates.ttcn IPA_Testing.ttcn GSM_SystemInformation.ttcn GSM_RestOctets.ttcn "
|
||||
FILES+="CBSP_Types.ttcn CBSP_Templates.ttcn "
|
||||
FILES+="CBSP_CodecPort.ttcn CBSP_CodecPort_CtrlFunct.ttcn CBSP_CodecPort_CtrlFunctdef.cc CBSP_Adapter.ttcn "
|
||||
gen_links $DIR $FILES
|
||||
|
|
Loading…
Reference in New Issue