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; modulepar { integer mp_num_bvc := 10; NSConfigurations mp_nsconfig := { { nsei := 123, role_sgsn := true, handle_sns := false, nsvc := { { provider := { fr := { netdev := "hdlc2", dlci := 123 } }, nsvci := 123 } } } }; } 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 { /* 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() ); } }