143 lines
3.0 KiB
Plaintext
143 lines
3.0 KiB
Plaintext
module FRNET_Tests {
|
|
|
|
import from General_Types all;
|
|
import from Osmocom_Types all;
|
|
import from Osmocom_Gb_Types all;
|
|
|
|
import from NS_Emulation all;
|
|
import from BSSGP_Emulation all;
|
|
import from LLC_Types all;
|
|
import from LLC_Templates all;
|
|
|
|
modulepar {
|
|
integer mp_num_bvc := 10;
|
|
NSConfigurations mp_nsconfig := {
|
|
{
|
|
nsei := 123,
|
|
role_sgsn := true,
|
|
handle_sns := false,
|
|
nsvc := {
|
|
{
|
|
provider := {
|
|
fr := {
|
|
netdev := "hdlcnet1",
|
|
dlci := 21
|
|
}
|
|
},
|
|
nsvci := 101
|
|
}, {
|
|
provider := {
|
|
fr := {
|
|
netdev := "hdlcnet2",
|
|
dlci := 22
|
|
}
|
|
},
|
|
nsvci := 102
|
|
}, {
|
|
provider := {
|
|
fr := {
|
|
netdev := "hdlcnet3",
|
|
dlci := 23
|
|
}
|
|
},
|
|
nsvci := 103
|
|
}, {
|
|
provider := {
|
|
fr := {
|
|
netdev := "hdlcnet4",
|
|
dlci := 24
|
|
}
|
|
},
|
|
nsvci := 104
|
|
}
|
|
}
|
|
}
|
|
};
|
|
}
|
|
|
|
type record GbInstance {
|
|
NS_CT vc_NS,
|
|
BSSGP_CT vc_BSSGP,
|
|
BssgpConfig cfg
|
|
};
|
|
|
|
type record of GbInstance GbInstances;
|
|
type record of NSConfiguration NSConfigurations;
|
|
type record of BssgpCellId BssgpCellIds;
|
|
|
|
type component test_CT {
|
|
var GbInstances g_gb;
|
|
};
|
|
|
|
|
|
private function CreateCallback(BssgpBvci bvci, BssgpCellId cell_id, OCT4 tlli, BssgpDecoded dec) runs on BSSGP_BVC_CT {
|
|
if (ischosen(dec.bssgp.pDU_BSSGP_UL_UNITDATA)) {
|
|
var PDU_LLC llc_rx := dec_PDU_LLC(dec.bssgp.pDU_BSSGP_UL_UNITDATA.lLC_PDU.lLC_PDU)
|
|
select (llc_rx) {
|
|
case (tr_LLC_UI(sapi := '0010'B)) {
|
|
//log("BVCI=", bvci, ", CellId=", cell_id, ", TLLI=", tlli, ", BSSGP=", dec);
|
|
/* mirror back as DL-UNITDATA */
|
|
BVC.send(ts_ptp_BnsUdReq(ts_BSSGP_DL_UD(tlli, dec.bssgp.pDU_BSSGP_UL_UNITDATA.lLC_PDU.lLC_PDU), bvci, oct2int(tlli)));
|
|
}
|
|
case else {
|
|
/* simply ignore any inbound traffic for now */
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
private function f_init_gb(inout GbInstance gb, charstring id, integer offset) runs on test_CT {
|
|
var charstring id_idx := id & int2str(offset);
|
|
gb.vc_NS := NS_CT.create(id_idx & "-NSemu");
|
|
gb.vc_BSSGP := BSSGP_CT.create(id_idx & "-BSSGPemu");
|
|
connect(gb.vc_BSSGP:BSCP, gb.vc_NS:NS_SP);
|
|
gb.vc_NS.start(NSStart(mp_nsconfig[offset], id_idx));
|
|
gb.vc_BSSGP.start(BssgpStart(gb.cfg, testcasename()));
|
|
}
|
|
|
|
function f_gen_bvc(integer base, integer idx) return BssgpBvcConfig {
|
|
var BssgpBvcConfig bvc := {
|
|
bvci := base + 100 + idx,
|
|
cell_id := {
|
|
ra_id := {
|
|
lai := {
|
|
mcc_mnc := '262F42'H,
|
|
lac := base + 300 + idx
|
|
},
|
|
rac := 1
|
|
},
|
|
cell_id := base + 600 + idx
|
|
},
|
|
depth := BSSGP_DECODE_DEPTH_LLC,
|
|
create_cb := refers(CreateCallback)
|
|
};
|
|
return bvc;
|
|
}
|
|
|
|
testcase TC_foo() runs on test_CT {
|
|
|
|
for (var integer i := 0; i < lengthof(mp_nsconfig); i := i+1) {
|
|
g_gb[i].cfg := {
|
|
nsei := mp_nsconfig[i].nsei,
|
|
sgsn_role := true,
|
|
bvc := { }
|
|
};
|
|
/* create 'mp_num_bvc' number of BVCs */
|
|
for (var integer j := 0; j < mp_num_bvc; j := j+1) {
|
|
g_gb[i].cfg.bvc := g_gb[i].cfg.bvc & { f_gen_bvc(i * 1000, j) };
|
|
}
|
|
f_init_gb(g_gb[i], "gb", i);
|
|
}
|
|
|
|
while (true) {
|
|
f_sleep(100.0);
|
|
}
|
|
}
|
|
|
|
control {
|
|
execute( TC_foo() );
|
|
}
|
|
|
|
|
|
}
|