blob: 0a6af5918ae81a1c20ccacb6123d0bfdd036664e [file] [log] [blame]
Harald Welte023b61b2020-09-12 20:41:05 +02001module FRNET_Tests {
2
3import from General_Types all;
4import from Osmocom_Types all;
5import from Osmocom_Gb_Types all;
6
7import from NS_Emulation all;
8import from BSSGP_Emulation all;
Harald Weltee58e5b72021-02-04 13:20:29 +01009import from LLC_Types all;
10import from LLC_Templates all;
Harald Welte023b61b2020-09-12 20:41:05 +020011
12modulepar {
Harald Weltede6f3ee2020-11-11 19:01:46 +010013 integer mp_num_bvc := 10;
Harald Welte023b61b2020-09-12 20:41:05 +020014 NSConfigurations mp_nsconfig := {
15 {
Harald Welte023b61b2020-09-12 20:41:05 +020016 nsei := 123,
17 role_sgsn := true,
Harald Welte90f19742020-11-06 19:34:40 +010018 handle_sns := false,
19 nsvc := {
20 {
21 provider := {
22 fr := {
Harald Welte92009302021-01-26 15:45:14 +010023 netdev := "hdlcnet1",
Alexander Couzens6a363192021-07-09 22:15:47 +020024 dlci := 21
Harald Welte90f19742020-11-06 19:34:40 +010025 }
26 },
Harald Weltebfff7172021-02-04 10:46:55 +010027 nsvci := 101
28 }, {
29 provider := {
30 fr := {
31 netdev := "hdlcnet2",
Alexander Couzens6a363192021-07-09 22:15:47 +020032 dlci := 22
Harald Weltebfff7172021-02-04 10:46:55 +010033 }
34 },
35 nsvci := 102
36 }, {
37 provider := {
38 fr := {
39 netdev := "hdlcnet3",
Alexander Couzens6a363192021-07-09 22:15:47 +020040 dlci := 23
Harald Weltebfff7172021-02-04 10:46:55 +010041 }
42 },
43 nsvci := 103
44 }, {
45 provider := {
46 fr := {
47 netdev := "hdlcnet4",
Alexander Couzens6a363192021-07-09 22:15:47 +020048 dlci := 24
Harald Weltebfff7172021-02-04 10:46:55 +010049 }
50 },
51 nsvci := 104
Harald Welte90f19742020-11-06 19:34:40 +010052 }
53 }
Harald Welte023b61b2020-09-12 20:41:05 +020054 }
55 };
56}
57
58type record GbInstance {
59 NS_CT vc_NS,
60 BSSGP_CT vc_BSSGP,
61 BssgpConfig cfg
62};
63
Harald Weltede6f3ee2020-11-11 19:01:46 +010064type record of GbInstance GbInstances;
65type record of NSConfiguration NSConfigurations;
66type record of BssgpCellId BssgpCellIds;
Harald Welte023b61b2020-09-12 20:41:05 +020067
68type component test_CT {
69 var GbInstances g_gb;
70};
71
Harald Welted6de9842020-11-12 21:50:10 +010072
73private function CreateCallback(BssgpBvci bvci, BssgpCellId cell_id, OCT4 tlli, BssgpDecoded dec) runs on BSSGP_BVC_CT {
Harald Weltee58e5b72021-02-04 13:20:29 +010074 if (ischosen(dec.bssgp.pDU_BSSGP_UL_UNITDATA)) {
75 var PDU_LLC llc_rx := dec_PDU_LLC(dec.bssgp.pDU_BSSGP_UL_UNITDATA.lLC_PDU.lLC_PDU)
76 select (llc_rx) {
77 case (tr_LLC_UI(sapi := '0010'B)) {
78 //log("BVCI=", bvci, ", CellId=", cell_id, ", TLLI=", tlli, ", BSSGP=", dec);
79 /* mirror back as DL-UNITDATA */
80 BVC.send(ts_ptp_BnsUdReq(ts_BSSGP_DL_UD(tlli, dec.bssgp.pDU_BSSGP_UL_UNITDATA.lLC_PDU.lLC_PDU), bvci, oct2int(tlli)));
81 }
82 case else {
83 /* simply ignore any inbound traffic for now */
84 }
85 }
86 }
Harald Welted6de9842020-11-12 21:50:10 +010087}
88
Harald Welte023b61b2020-09-12 20:41:05 +020089private function f_init_gb(inout GbInstance gb, charstring id, integer offset) runs on test_CT {
90 var charstring id_idx := id & int2str(offset);
Pau Espin Pedrol494e8b32022-02-22 16:46:23 +010091 gb.vc_NS := NS_CT.create(id_idx & "-NSemu") alive;
92 gb.vc_BSSGP := BSSGP_CT.create(id_idx & "-BSSGPemu") alive;
Harald Welte023b61b2020-09-12 20:41:05 +020093 connect(gb.vc_BSSGP:BSCP, gb.vc_NS:NS_SP);
94 gb.vc_NS.start(NSStart(mp_nsconfig[offset], id_idx));
95 gb.vc_BSSGP.start(BssgpStart(gb.cfg, testcasename()));
96}
97
Harald Weltede6f3ee2020-11-11 19:01:46 +010098function f_gen_bvc(integer base, integer idx) return BssgpBvcConfig {
99 var BssgpBvcConfig bvc := {
100 bvci := base + 100 + idx,
101 cell_id := {
102 ra_id := {
103 lai := {
104 mcc_mnc := '262F42'H,
105 lac := base + 300 + idx
Harald Welte023b61b2020-09-12 20:41:05 +0200106 },
Harald Weltede6f3ee2020-11-11 19:01:46 +0100107 rac := 1
108 },
109 cell_id := base + 600 + idx
110 },
Harald Welte4d112c92020-11-12 19:48:31 +0100111 depth := BSSGP_DECODE_DEPTH_LLC,
Harald Welted6de9842020-11-12 21:50:10 +0100112 create_cb := refers(CreateCallback)
Harald Welte023b61b2020-09-12 20:41:05 +0200113 };
Harald Weltede6f3ee2020-11-11 19:01:46 +0100114 return bvc;
115}
116
117testcase TC_foo() runs on test_CT {
118
119 for (var integer i := 0; i < lengthof(mp_nsconfig); i := i+1) {
120 g_gb[i].cfg := {
121 nsei := mp_nsconfig[i].nsei,
122 sgsn_role := true,
123 bvc := { }
124 };
125 /* create 'mp_num_bvc' number of BVCs */
126 for (var integer j := 0; j < mp_num_bvc; j := j+1) {
127 g_gb[i].cfg.bvc := g_gb[i].cfg.bvc & { f_gen_bvc(i * 1000, j) };
128 }
129 f_init_gb(g_gb[i], "gb", i);
130 }
131
Harald Welte023b61b2020-09-12 20:41:05 +0200132 while (true) {
133 f_sleep(100.0);
134 }
135}
136
Harald Welted0770752020-11-11 19:03:41 +0100137control {
138 execute( TC_foo() );
139}
140
Harald Welte023b61b2020-09-12 20:41:05 +0200141
142}