blob: 7513196c80ba7b3eed52d9b6965485b210e6d4ab [file] [log] [blame]
Harald Weltef7b74072019-02-20 20:48:50 +01001module PCU_Tests_RAW_SNS {
2
3import from Osmocom_Types all;
4import from PCU_Tests all;
5import from PCU_Tests_RAW all;
Harald Weltec4d7beb2019-02-21 18:21:01 +01006import from Osmocom_Gb_Types all;
7import from NS_CodecPort all;
8import from NS_Types all;
Harald Weltef7b74072019-02-20 20:48:50 +01009
10/**********************************************************************************
11 * Modern Gb/IP bring-up test cases using IP Sub-Network Service (SNS)
12 **********************************************************************************/
13
Harald Weltec4d7beb2019-02-21 18:21:01 +010014/* perform inbound SNS-SIZE procedure */
Harald Weltebf768242019-02-21 22:19:21 +010015function f_incoming_sns_size(template (omit) NsCause cause := omit, integer idx := 0)
16runs on RAW_NS_CT {
Harald Welteb63c3a12019-02-22 23:27:12 +010017 log("f_incoming_sns_size(idx=", idx, ")");
Harald Weltec4d7beb2019-02-21 18:21:01 +010018 var PDU_NS rx;
19 /* expect one single SNS-SIZE with RESET flag; one remote v4 EP; no v6 EP */
Harald Weltebf768242019-02-21 22:19:21 +010020 rx := f_ns_exp(tr_SNS_SIZE(g_nsconfig[idx].nsei, rst_flag := true, max_nsvcs := 8,
21 num_v4 := 4, num_v6 := omit), idx);
22 NSCP[idx].send(t_NS_Send(g_ns_conn_id[idx], ts_SNS_SIZE_ACK(g_nsconfig[idx].nsei, cause)));
Harald Weltec4d7beb2019-02-21 18:21:01 +010023}
24
25/* perform outbound SNS-SIZE procedure */
Harald Weltebf768242019-02-21 22:19:21 +010026function f_outgoing_sns_size(template (omit) NsCause cause := omit, integer idx:= 0)
27runs on RAW_NS_CT {
Harald Welteb63c3a12019-02-22 23:27:12 +010028 log("f_outgoing_sns_size(idx=", idx, ")");
Harald Weltec4d7beb2019-02-21 18:21:01 +010029 var PDU_NS rx;
Harald Weltebf768242019-02-21 22:19:21 +010030 NSCP[idx].send(t_NS_Send(g_ns_conn_id[idx], ts_SNS_SIZE(g_nsconfig[idx].nsei, rst_flag := true, max_nsvcs := 1,
Harald Weltec4d7beb2019-02-21 18:21:01 +010031 num_v4 := 1, num_v6 := omit)
32 ));
33 /* expect one single SNS-SIZE with RESET flag; one remote v4 EP; no v6 EP */
Harald Weltebf768242019-02-21 22:19:21 +010034 rx := f_ns_exp(tr_SNS_SIZE_ACK(g_nsconfig[idx].nsei, cause), idx);
Harald Weltec4d7beb2019-02-21 18:21:01 +010035}
36
37/* perform inbound SNS-CONFIG procedure */
Harald Weltebf768242019-02-21 22:19:21 +010038function f_incoming_sns_config(template (omit) NsCause cause := omit, integer idx := 0)
39runs on RAW_NS_CT {
Harald Welteb63c3a12019-02-22 23:27:12 +010040 log("f_incoming_sns_config(idx=", idx, ")");
Harald Weltec4d7beb2019-02-21 18:21:01 +010041 var PDU_NS rx;
Harald Welte7e6a35c2019-03-16 18:36:08 +010042 var template IP4_Elements v4_elem := { tr_SNS_IPv4(mp_nsconfig.remote_ip,
43 mp_nsconfig.remote_udp_port) };
44 rx := f_ns_exp(tr_SNS_CONFIG(g_nsconfig[idx].nsei, end_flag := true, v4 := v4_elem), idx);
Harald Weltebf768242019-02-21 22:19:21 +010045 NSCP[idx].send(t_NS_Send(g_ns_conn_id[idx], ts_SNS_CONFIG_ACK(g_nsconfig[idx].nsei, cause)));
Harald Weltec4d7beb2019-02-21 18:21:01 +010046}
47
48/* perform outbound SNS-CONFIG procedure */
Harald Weltebf768242019-02-21 22:19:21 +010049function f_outgoing_sns_config(template (omit) NsCause cause := omit, integer idx := 0)
50runs on RAW_NS_CT {
Harald Welteb63c3a12019-02-22 23:27:12 +010051 log("f_outgoing_sns_config(idx=", idx, ")");
Harald Weltec4d7beb2019-02-21 18:21:01 +010052 var PDU_NS rx;
Harald Weltebf768242019-02-21 22:19:21 +010053 var template (omit) IP4_Elements v4 := { ts_SNS_IPv4(g_nsconfig[idx].local_ip,
54 g_nsconfig[idx].local_udp_port) }
55 NSCP[idx].send(t_NS_Send(g_ns_conn_id[idx], ts_SNS_CONFIG(g_nsconfig[idx].nsei, true, v4)));
56 rx := f_ns_exp(tr_SNS_CONFIG_ACK(g_nsconfig[idx].nsei, cause), idx);
Harald Weltec4d7beb2019-02-21 18:21:01 +010057}
58
Harald Weltebf768242019-02-21 22:19:21 +010059/* perform outbound SNS-CONFIG procedure (separate endpoints: 1 for control, 1 for user */
60function f_outgoing_sns_config_1c1u(template (omit) NsCause cause := omit, integer idx := 0)
61runs on RAW_NS_CT {
Harald Welteb63c3a12019-02-22 23:27:12 +010062 log("f_outgoing_sns_config_1c1u(idx=", idx, ")");
Harald Weltebf768242019-02-21 22:19:21 +010063 var PDU_NS rx;
64 var template (omit) IP4_Elements v4 := { ts_SNS_IPv4(g_nsconfig[0].local_ip,
65 g_nsconfig[0].local_udp_port, 1, 0),
66 ts_SNS_IPv4(g_nsconfig[1].local_ip,
67 g_nsconfig[1].local_udp_port, 0, 1) };
68 NSCP[idx].send(t_NS_Send(g_ns_conn_id[idx], ts_SNS_CONFIG(g_nsconfig[idx].nsei, true, v4)));
69 rx := f_ns_exp(tr_SNS_CONFIG_ACK(g_nsconfig[idx].nsei, cause), idx);
70}
71
Harald Welteecd159e2019-03-16 13:36:07 +010072/* perform outbound SNS-CONFIG procedure (separate endpoints: 1 for control, 1 for user */
73function f_outgoing_sns_config_1c1u_separate(template (omit) NsCause cause := omit, integer idx := 0)
74runs on RAW_NS_CT {
75 log("f_outgoing_sns_config_1c1u_separate(idx=", idx, ")");
76 var PDU_NS rx;
77 var template (omit) IP4_Elements v4 := { ts_SNS_IPv4(g_nsconfig[1].local_ip,
78 g_nsconfig[1].local_udp_port, 1, 0),
79 ts_SNS_IPv4(g_nsconfig[2].local_ip,
80 g_nsconfig[2].local_udp_port, 0, 1) };
81 NSCP[idx].send(t_NS_Send(g_ns_conn_id[idx], ts_SNS_CONFIG(g_nsconfig[idx].nsei, true, v4)));
82 rx := f_ns_exp(tr_SNS_CONFIG_ACK(g_nsconfig[idx].nsei, cause), idx);
83}
84
Harald Welte630d0e62019-02-22 23:26:40 +010085function f_outgoing_sns_add(integer idx_add, uint8_t w_sig := 1, uint8_t w_user := 1, integer idx := 0)
86runs on RAW_NS_CT {
87 log("f_outgoing_sns_add(idx_add=", idx_add, ")");
88 var PDU_NS rx;
89 var template (omit) IP4_Elements v4 := { ts_SNS_IPv4(g_nsconfig[idx_add].local_ip,
90 g_nsconfig[idx_add].local_udp_port,
91 w_sig, w_user) };
92 NSCP[idx].send(t_NS_Send(g_ns_conn_id[idx], ts_SNS_ADD(g_nsconfig[idx].nsei, 23, v4)));
93 rx := f_ns_exp(tr_SNS_ACK(g_nsconfig[idx].nsei, 23, omit, v4));
94}
95
96function f_outgoing_sns_del(integer idx_del, uint8_t w_sig := 1, uint8_t w_user := 1, integer idx := 0)
97runs on RAW_NS_CT {
98 log("f_outgoing_sns_del(idx_del=", idx_del, ")");
99 var PDU_NS rx;
100 var template (omit) IP4_Elements v4 := { ts_SNS_IPv4(g_nsconfig[idx_del].local_ip,
101 g_nsconfig[idx_del].local_udp_port,
102 w_sig, w_user) };
103 NSCP[idx].send(t_NS_Send(g_ns_conn_id[idx], ts_SNS_DEL(g_nsconfig[idx].nsei, 24, omit, v4)));
104 rx := f_ns_exp(tr_SNS_ACK(g_nsconfig[idx].nsei, 24, omit, v4));
105}
106
Harald Welte72099552019-02-23 15:09:22 +0100107function f_outgoing_sns_chg_weight(integer idx_chg, uint8_t w_sig, uint8_t w_user, integer idx := 0)
108runs on RAW_NS_CT {
109 log("f_outgoing_sns_chg_weight(idx_chg=", idx_chg, ")");
110 var PDU_NS rx;
111 var template (omit) IP4_Elements v4 := { ts_SNS_IPv4(g_nsconfig[idx_chg].local_ip,
112 g_nsconfig[idx_chg].local_udp_port,
113 w_sig, w_user) };
114 NSCP[idx].send(t_NS_Send(g_ns_conn_id[idx], ts_SNS_CHG_WEIGHT(g_nsconfig[idx].nsei, 25, v4)));
115 rx := f_ns_exp(tr_SNS_ACK(g_nsconfig[idx].nsei, 25, omit, v4));
116}
117
118
119
Harald Welte630d0e62019-02-22 23:26:40 +0100120
Harald Weltebf768242019-02-21 22:19:21 +0100121
Harald Weltef7b74072019-02-20 20:48:50 +0100122/* PCU-originated SNS-SIZE: successful case */
Harald Welteea3c7e92019-03-01 19:34:55 +0100123testcase TC_sns_po_size_success() runs on RAW_Test_CT {
Harald Weltef7b74072019-02-20 20:48:50 +0100124 f_init_ns_codec();
125 f_init_pcuif();
126 f_incoming_sns_size();
127 f_sleep(1.0);
128 setverdict(pass);
129}
130
131/* PCU-originated SNS-SIZE: NACK from our side */
Harald Welteea3c7e92019-03-01 19:34:55 +0100132testcase TC_sns_po_size_nack() runs on RAW_Test_CT {
Harald Weltef7b74072019-02-20 20:48:50 +0100133 f_init_ns_codec();
134 f_init_pcuif();
135 f_incoming_sns_size(NS_CAUSE_PROTOCOL_ERROR_UNSPEIFIED);
136 /* FIXME: ensure we don't get a SNS-CONFIG */
137 /* FIXME: ensure we get re-transmitted SNS-SIZE attempts */
138 f_sleep(10.0);
139 setverdict(pass);
140}
141
142/* PCU-originated SNS-CONFIG: successful case */
Harald Welteea3c7e92019-03-01 19:34:55 +0100143testcase TC_sns_po_config_success() runs on RAW_Test_CT {
Harald Weltef7b74072019-02-20 20:48:50 +0100144 f_init_ns_codec();
145 f_init_pcuif();
146 f_incoming_sns_size();
147 f_incoming_sns_config();
148 f_sleep(1.0);
149 setverdict(pass);
150}
151
152/* PCU-originated SNS-CONFIG: successful case */
Harald Welteea3c7e92019-03-01 19:34:55 +0100153testcase TC_sns_po_config_nack() runs on RAW_Test_CT {
Harald Weltef7b74072019-02-20 20:48:50 +0100154 f_init_ns_codec();
155 f_init_pcuif();
156 f_incoming_sns_size();
157 f_incoming_sns_config(NS_CAUSE_PROTOCOL_ERROR_UNSPEIFIED);
158 /* FIXME: ensure we get re-transmitted SNS-CONFIG attempts */
159 f_sleep(10.0);
160 setverdict(pass);
161}
162
163
164/* SGSN-originated SNS-SIZE: successful case */
Harald Welteea3c7e92019-03-01 19:34:55 +0100165testcase TC_sns_so_config_success() runs on RAW_Test_CT {
Harald Weltef7b74072019-02-20 20:48:50 +0100166 f_init_ns_codec();
167 f_init_pcuif();
168 f_incoming_sns_size();
169 f_incoming_sns_config();
170 f_outgoing_sns_config();
171
172 /* wait for one ALIVE cycle, then ACK any further ALIVE in the background */
173 as_rx_alive_tx_ack(oneshot := true);
174 activate(as_rx_alive_tx_ack());
175
176 f_outgoing_ns_alive();
177
178 /* Expect BVC-RESET for signaling (0) and ptp BVCI */
179 as_rx_bvc_reset_tx_ack(0, oneshot := true);
180 as_rx_bvc_reset_tx_ack(mp_gb_cfg.bvci, oneshot := true);
181 as_rx_bvc_unblock_tx_ack(mp_gb_cfg.bvci, oneshot := true);
182
183 /* wait for one FLOW-CONTROL BVC and then ACK any further in the future */
Harald Welte33ad57b2019-03-15 17:14:14 +0100184 as_rx_bvc_fc_tx_ack(mp_gb_cfg.bvci, oneshot := true);
185 activate(as_rx_bvc_fc_tx_ack(mp_gb_cfg.bvci));
Harald Weltef7b74072019-02-20 20:48:50 +0100186 setverdict(pass);
187}
188
Harald Welte64d07312019-03-20 09:48:39 +0100189private function f_sns_bringup_1c1u(boolean sgsn_originated_reset := false) runs on RAW_Test_CT {
Harald Welte630d0e62019-02-22 23:26:40 +0100190 /* Activate two NS codec ports */
191 f_init_ns_codec();
192 f_init_ns_codec(1);
193 f_init_pcuif();
194 /* Perform Size + BSS-originated config */
195 f_incoming_sns_size();
196 f_incoming_sns_config();
197 /* perform SGSN-originated config using idx==0 for signalling and idx==1 for user traffic */
198 f_outgoing_sns_config_1c1u();
199
200 /* wait for one ALIVE cycle, then ACK any further ALIVE in the background
201 * for both NS-VCs */
202 as_rx_alive_tx_ack(oneshot := true, idx := 0);
203 activate(as_rx_alive_tx_ack(idx := 0));
204 as_rx_alive_tx_ack(oneshot := true, idx := 1);
205 activate(as_rx_alive_tx_ack(idx := 1));
206
207 /* perform outgoing ALIVE procedure for both NS-VCs */
208 f_outgoing_ns_alive(0);
209 f_outgoing_ns_alive(1);
210
Harald Welte64d07312019-03-20 09:48:39 +0100211 if (sgsn_originated_reset) {
212 f_tx_bvc_reset_rx_ack(0);
213 f_tx_bvc_reset_rx_ack(mp_gb_cfg.bvci);
214 } else {
215 /* Expect BVC-RESET for signaling (0) and ptp BVCI */
216 as_rx_bvc_reset_tx_ack(0, oneshot := true);
217 as_rx_bvc_reset_tx_ack(mp_gb_cfg.bvci, oneshot := true);
218 }
Harald Welte630d0e62019-02-22 23:26:40 +0100219 /* Expect UNBLOCK for ptp BVCI on signaling NS-VC (idx==0) */
220 as_rx_bvc_unblock_tx_ack(mp_gb_cfg.bvci, oneshot := true);
221
222 /* wait for one FLOW-CONTROL BVC and then ACK any further in the future. Flow
223 * control happens on the p-t-p BVCI and hence on index 1 */
224 as_rx_bvc_fc_tx_ack(mp_gb_cfg.bvci, oneshot := true, idx := 1);
225 activate(as_rx_bvc_fc_tx_ack(mp_gb_cfg.bvci, idx := 1));
226}
227
228/* Test full IP-SNS bring-up with two NS-VCs, one sig-only and one user-only */
Harald Welteea3c7e92019-03-01 19:34:55 +0100229testcase TC_sns_1c1u() runs on RAW_Test_CT {
Harald Welte630d0e62019-02-22 23:26:40 +0100230 f_sns_bringup_1c1u();
231 setverdict(pass);
232}
233
Harald Welte64d07312019-03-20 09:48:39 +0100234private function f_sns_bringup_1c1u_separate(boolean sgsn_originated_reset := false) runs on RAW_Test_CT {
Harald Welteecd159e2019-03-16 13:36:07 +0100235 /* Activate two NS codec ports */
236 f_init_ns_codec();
237 f_init_ns_codec(1);
238 f_init_ns_codec(2);
239 f_init_pcuif();
240 /* Perform Size + BSS-originated config */
241 f_incoming_sns_size();
242 f_incoming_sns_config();
243 /* perform SGSN-originated config using idx==0 for signalling and idx==1 for user traffic */
244 f_outgoing_sns_config_1c1u_separate();
245
246 /* wait for one ALIVE cycle, then ACK any further ALIVE in the background
247 * for both NS-VCs */
248 as_rx_alive_tx_ack(oneshot := true, idx := 1);
249 activate(as_rx_alive_tx_ack(idx := 1));
250 as_rx_alive_tx_ack(oneshot := true, idx := 2);
251 activate(as_rx_alive_tx_ack(idx := 2));
252 /* ensure there's no NS-ALIVE received on idx==0 */
253 f_ensure_no_ns(t_NS_ALIVE, idx := 0);
254
255 /* perform outgoing ALIVE procedure for both NS-VCs */
256 f_outgoing_ns_alive(1);
257 f_outgoing_ns_alive(2);
258 /* ensure there's no response to NS-ALIVE sent on idx==0 */
259 f_outgoing_ns_alive_no_ack(idx := 0);
260
Harald Welte64d07312019-03-20 09:48:39 +0100261 if (sgsn_originated_reset) {
262 f_tx_bvc_reset_rx_ack(0, idx := 1);
263 f_tx_bvc_reset_rx_ack(mp_gb_cfg.bvci, idx := 1);
264 } else {
265 /* Expect BVC-RESET for signaling BVCI=0 and ptp BVCI */
266 as_rx_bvc_reset_tx_ack(0, oneshot := true, idx := 1);
267 as_rx_bvc_reset_tx_ack(mp_gb_cfg.bvci, oneshot := true, idx := 1);
268 }
Harald Welteecd159e2019-03-16 13:36:07 +0100269 /* Expect UNBLOCK for ptp BVCI on signaling NS-VC (idx==1) */
270 as_rx_bvc_unblock_tx_ack(mp_gb_cfg.bvci, oneshot := true, idx := 1);
271
272 /* wait for one FLOW-CONTROL BVC and then ACK any further in the future. Flow
273 * control happens on the p-t-p BVCI and hence on index 1 */
274 as_rx_bvc_fc_tx_ack(mp_gb_cfg.bvci, oneshot := true, idx := 2);
275 activate(as_rx_bvc_fc_tx_ack(mp_gb_cfg.bvci, idx := 2));
276}
277
278/* Test full IP-SNS bring-up with two NS-VCs, one sig-only and one user-only - and where
279 * the initial IP/port for the SNS procedure is *not* part of the NS-VCs later */
280testcase TC_sns_1c1u_separate() runs on RAW_Test_CT {
281 f_sns_bringup_1c1u_separate();
282 setverdict(pass);
283}
284
Harald Welte64d07312019-03-20 09:48:39 +0100285/* Test full IP-SNS bring-up with two NS-VCs, one sig-only and one user-only and use
286 * SGSN-originated BVC-RESET rather than BSS-originated */
287testcase TC_sns_1c1u_so_bvc_reset() runs on RAW_Test_CT {
288 f_sns_bringup_1c1u_separate(sgsn_originated_reset := true);
289 setverdict(pass);
290}
291
292/* Transmit BVC-RESET before NS-ALIVE of PCU was ACKed: expect no response */
293testcase TC_sns_1c1u_so_bvc_reset_too_early() runs on RAW_Test_CT {
294 /* Activate two NS codec ports */
295 f_init_ns_codec();
296 f_init_ns_codec(1);
297 f_init_ns_codec(2);
298 f_init_pcuif();
299 /* Perform Size + BSS-originated config */
300 f_incoming_sns_size();
301 f_incoming_sns_config();
302 /* perform SGSN-originated config using idx==0 for signalling and idx==1 for user traffic */
303 f_outgoing_sns_config_1c1u_separate();
304
305 /* DON'T ACK ANY INBOUND NS-ALIVE HERE! */
306
307 /* perform outgoing ALIVE procedure for both NS-VCs */
308 f_outgoing_ns_alive(1);
309 f_outgoing_ns_alive(2);
310 /* ensure there's no response to NS-ALIVE sent on idx==0 */
311 f_outgoing_ns_alive_no_ack(idx := 0);
312
313 /* Transmit BVC-RESET and expect no ACK*/
314 f_tx_bvc_reset_rx_ack(0, idx := 1, exp_ack := false);
315 f_tx_bvc_reset_rx_ack(mp_gb_cfg.bvci, idx := 1, exp_ack := false);
316}
317
Harald Welte630d0e62019-02-22 23:26:40 +0100318/* Test adding new IP endpoints at runtime */
Harald Welteea3c7e92019-03-01 19:34:55 +0100319testcase TC_sns_add() runs on RAW_Test_CT {
Harald Welte630d0e62019-02-22 23:26:40 +0100320 f_sns_bringup_1c1u();
321
322 /* crate another NS codec port on the tester side */
323 f_init_ns_codec(2);
324
325 f_outgoing_sns_add(idx_add := 2, w_sig := 0, w_user := 1, idx := 0);
326
327 /* wait for one ALIVE cycle, then ACK any further ALIVE in the background */
328 as_rx_alive_tx_ack(oneshot := true, idx := 2);
329 activate(as_rx_alive_tx_ack(idx := 2));
330
331 f_outgoing_ns_alive(2);
332 /* TODO: Should we expect FLOW-CONTROL BVC here too? */
333 setverdict(pass);
334}
335
336/* Test deleting IP endpoints at runtime */
Harald Welteea3c7e92019-03-01 19:34:55 +0100337testcase TC_sns_del() runs on RAW_Test_CT {
Harald Welte630d0e62019-02-22 23:26:40 +0100338 f_sns_bringup_1c1u();
339
340 f_outgoing_sns_del(idx_del := 1, w_sig := 0, w_user := 1, idx := 0);
341 /* FIXME: ensure we don't receive anything on just-deleted NS-VC anymore */
342 setverdict(pass);
343}
344
Harald Welte72099552019-02-23 15:09:22 +0100345/* Test changing weights at runtime */
Harald Welteea3c7e92019-03-01 19:34:55 +0100346testcase TC_sns_chg_weight() runs on RAW_Test_CT {
Harald Welte72099552019-02-23 15:09:22 +0100347 f_sns_bringup_1c1u();
348
349 /* change w_user from 1 to 200 */
350 f_outgoing_sns_chg_weight(idx_chg := 1, w_sig := 0, w_user := 200, idx := 0);
351 setverdict(pass);
352}
353
Harald Welte16e92f42019-03-02 00:03:44 +0100354import from PCUIF_Types all;
355import from PCUIF_CodecPort all;
356
357private function f_pcuif_tx(template (value) PCUIF_Message msg) runs on RAW_PCU_CT {
358 PCU.send(t_SD_PCUIF(g_pcu_conn_id, msg));
359}
360
Harald Welte3b335832019-03-15 22:38:06 +0100361altstep as_pcu_activate() runs on RAW_PCU_CT {
362 var PCUIF_send_data sd;
363 [] PCU.receive(t_SD_PCUIF(g_pcu_conn_id, tr_PCUIF_ACT_REQ(?, ?, ?))) -> value sd { repeat; }
364
365}
366
Harald Welte16e92f42019-03-02 00:03:44 +0100367testcase TC_pcuif_rach() runs on RAW_Test_CT {
368 f_sns_bringup_1c1u();
Harald Welte3b335832019-03-15 22:38:06 +0100369 activate(as_pcu_activate());
Harald Welte16e92f42019-03-02 00:03:44 +0100370
371 f_pcuif_tx(ts_PCUIF_RACH_IND(bts_nr:=0, ra:=23, is_11bit:=0, burst_type:=BURST_TYPE_0,
372 fn:=42, arfcn:=871, qta:=0));
373 PCU.receive(t_SD_PCUIF(g_pcu_conn_id,
374 tr_PCUIF_DATA_REQ(bts_nr:=0, trx_nr:=0, ts_nr:=0, block_nr:=?, fn:=?,
375 sapi:=PCU_IF_SAPI_AGCH, data:=?)));
376 setverdict(pass);
377}
378
Harald Welte630d0e62019-02-22 23:26:40 +0100379
380
Harald Weltef7b74072019-02-20 20:48:50 +0100381control {
382 execute( TC_sns_po_size_success() );
383 execute( TC_sns_po_size_nack() );
384 execute( TC_sns_po_config_success() );
385 execute( TC_sns_po_config_nack() );
386 execute( TC_sns_so_config_success() );
Harald Welte630d0e62019-02-22 23:26:40 +0100387 execute( TC_sns_1c1u() );
Harald Welteecd159e2019-03-16 13:36:07 +0100388 execute( TC_sns_1c1u_separate() );
Harald Welte64d07312019-03-20 09:48:39 +0100389 execute( TC_sns_1c1u_so_bvc_reset() );
390 execute( TC_sns_1c1u_so_bvc_reset_too_early() );
Harald Welte630d0e62019-02-22 23:26:40 +0100391 execute( TC_sns_add() );
392 execute( TC_sns_del() );
Harald Welte72099552019-02-23 15:09:22 +0100393 execute( TC_sns_chg_weight() );
Harald Welte16e92f42019-03-02 00:03:44 +0100394
395 execute( TC_pcuif_rach() );
Harald Weltef7b74072019-02-20 20:48:50 +0100396}
397
398}