blob: c4f6b6e0f3b2f18f422f10e749dd3bb0294f999d [file] [log] [blame]
Pau Espin Pedrol8dd59fb2020-04-29 15:08:16 +02001module PCU_Tests_SNS {
Harald Weltef7b74072019-02-20 20:48:50 +01002
Harald Welte34b5a952019-05-27 11:54:11 +02003/* Osmocom PCU test suite for IP Sub-Network-Service (SNS) in TTCN-3
4 * (C) 2018-2019 Harald Welte <laforge@gnumonks.org>
5 * All rights reserved.
6 *
7 * Released under the terms of GNU General Public License, Version 2 or
8 * (at your option) any later version.
9 *
10 * SPDX-License-Identifier: GPL-2.0-or-later
11 */
12
Harald Weltef7b74072019-02-20 20:48:50 +010013import from Osmocom_Types all;
Pau Espin Pedrol8dd59fb2020-04-29 15:08:16 +020014import from PCU_Tests_NS all;
Pau Espin Pedrol0e6ed2e2020-04-29 14:33:13 +020015import from SGSN_Components all;
Harald Weltec4d7beb2019-02-21 18:21:01 +010016import from Osmocom_Gb_Types all;
Harald Welte90f19742020-11-06 19:34:40 +010017import from NS_Emulation all;
Harald Weltec4d7beb2019-02-21 18:21:01 +010018import from NS_Types all;
Alexander Couzens3c268da2020-09-07 04:25:05 +020019import from RAW_NS all;
Harald Weltef7b74072019-02-20 20:48:50 +010020
21/**********************************************************************************
22 * Modern Gb/IP bring-up test cases using IP Sub-Network Service (SNS)
23 **********************************************************************************/
24
Harald Weltef7b74072019-02-20 20:48:50 +010025/* PCU-originated SNS-SIZE: successful case */
Harald Welteea3c7e92019-03-01 19:34:55 +010026testcase TC_sns_po_size_success() runs on RAW_Test_CT {
Alexander Couzens2beaa202020-09-11 20:08:41 +020027 f_init_ns_codec(mp_nsconfig);
Harald Weltef7b74072019-02-20 20:48:50 +010028 f_init_pcuif();
29 f_incoming_sns_size();
30 f_sleep(1.0);
31 setverdict(pass);
Alexander Couzensc3165722021-01-11 02:51:45 +010032 f_clean_ns_codec();
Harald Weltef7b74072019-02-20 20:48:50 +010033}
34
35/* PCU-originated SNS-SIZE: NACK from our side */
Harald Welteea3c7e92019-03-01 19:34:55 +010036testcase TC_sns_po_size_nack() runs on RAW_Test_CT {
Alexander Couzens2beaa202020-09-11 20:08:41 +020037 f_init_ns_codec(mp_nsconfig);
Harald Weltef7b74072019-02-20 20:48:50 +010038 f_init_pcuif();
39 f_incoming_sns_size(NS_CAUSE_PROTOCOL_ERROR_UNSPEIFIED);
40 /* FIXME: ensure we don't get a SNS-CONFIG */
41 /* FIXME: ensure we get re-transmitted SNS-SIZE attempts */
42 f_sleep(10.0);
43 setverdict(pass);
Alexander Couzensc3165722021-01-11 02:51:45 +010044 f_clean_ns_codec();
Harald Weltef7b74072019-02-20 20:48:50 +010045}
46
47/* PCU-originated SNS-CONFIG: successful case */
Harald Welteea3c7e92019-03-01 19:34:55 +010048testcase TC_sns_po_config_success() runs on RAW_Test_CT {
Alexander Couzens2beaa202020-09-11 20:08:41 +020049 f_init_ns_codec(mp_nsconfig);
Harald Weltef7b74072019-02-20 20:48:50 +010050 f_init_pcuif();
51 f_incoming_sns_size();
52 f_incoming_sns_config();
53 f_sleep(1.0);
54 setverdict(pass);
Alexander Couzensc3165722021-01-11 02:51:45 +010055 f_clean_ns_codec();
Harald Weltef7b74072019-02-20 20:48:50 +010056}
57
58/* PCU-originated SNS-CONFIG: successful case */
Harald Welteea3c7e92019-03-01 19:34:55 +010059testcase TC_sns_po_config_nack() runs on RAW_Test_CT {
Alexander Couzens2beaa202020-09-11 20:08:41 +020060 f_init_ns_codec(mp_nsconfig);
Harald Weltef7b74072019-02-20 20:48:50 +010061 f_init_pcuif();
62 f_incoming_sns_size();
63 f_incoming_sns_config(NS_CAUSE_PROTOCOL_ERROR_UNSPEIFIED);
64 /* FIXME: ensure we get re-transmitted SNS-CONFIG attempts */
65 f_sleep(10.0);
66 setverdict(pass);
Alexander Couzensc3165722021-01-11 02:51:45 +010067 f_clean_ns_codec();
Harald Weltef7b74072019-02-20 20:48:50 +010068}
69
70
71/* SGSN-originated SNS-SIZE: successful case */
Harald Welteea3c7e92019-03-01 19:34:55 +010072testcase TC_sns_so_config_success() runs on RAW_Test_CT {
Alexander Couzens2beaa202020-09-11 20:08:41 +020073 f_init_ns_codec(mp_nsconfig);
Harald Weltef7b74072019-02-20 20:48:50 +010074 f_init_pcuif();
75 f_incoming_sns_size();
76 f_incoming_sns_config();
77 f_outgoing_sns_config();
78
79 /* wait for one ALIVE cycle, then ACK any further ALIVE in the background */
80 as_rx_alive_tx_ack(oneshot := true);
81 activate(as_rx_alive_tx_ack());
82
83 f_outgoing_ns_alive();
84
85 /* Expect BVC-RESET for signaling (0) and ptp BVCI */
Harald Weltee97e3af2020-10-09 14:56:54 +020086 as_rx_bvc_reset_tx_ack(0, omit, omit, oneshot := true);
87 as_rx_bvc_reset_tx_ack(mp_gb_cfg.bvc[0].bvci, mp_gb_cfg.bvc[0].cell_id, omit, oneshot := true);
Harald Welte5339b2e2020-10-04 22:52:56 +020088 as_rx_bvc_unblock_tx_ack(mp_gb_cfg.bvc[0].bvci, oneshot := true);
Harald Weltef7b74072019-02-20 20:48:50 +010089
90 /* wait for one FLOW-CONTROL BVC and then ACK any further in the future */
Harald Welte5339b2e2020-10-04 22:52:56 +020091 as_rx_bvc_fc_tx_ack(mp_gb_cfg.bvc[0].bvci, oneshot := true);
92 activate(as_rx_bvc_fc_tx_ack(mp_gb_cfg.bvc[0].bvci));
Harald Weltef7b74072019-02-20 20:48:50 +010093 setverdict(pass);
Alexander Couzensc3165722021-01-11 02:51:45 +010094 f_clean_ns_codec();
Harald Weltef7b74072019-02-20 20:48:50 +010095}
96
Harald Welte64d07312019-03-20 09:48:39 +010097private function f_sns_bringup_1c1u(boolean sgsn_originated_reset := false) runs on RAW_Test_CT {
Harald Welte630d0e62019-02-22 23:26:40 +010098 /* Activate two NS codec ports */
Alexander Couzens2beaa202020-09-11 20:08:41 +020099 f_init_ns_codec(mp_nsconfig);
100 f_init_ns_codec(mp_nsconfig, 1);
Harald Welte630d0e62019-02-22 23:26:40 +0100101 f_init_pcuif();
102 /* Perform Size + BSS-originated config */
103 f_incoming_sns_size();
104 f_incoming_sns_config();
105 /* perform SGSN-originated config using idx==0 for signalling and idx==1 for user traffic */
106 f_outgoing_sns_config_1c1u();
107
108 /* wait for one ALIVE cycle, then ACK any further ALIVE in the background
109 * for both NS-VCs */
110 as_rx_alive_tx_ack(oneshot := true, idx := 0);
111 activate(as_rx_alive_tx_ack(idx := 0));
112 as_rx_alive_tx_ack(oneshot := true, idx := 1);
113 activate(as_rx_alive_tx_ack(idx := 1));
114
115 /* perform outgoing ALIVE procedure for both NS-VCs */
116 f_outgoing_ns_alive(0);
117 f_outgoing_ns_alive(1);
118
Harald Welte64d07312019-03-20 09:48:39 +0100119 if (sgsn_originated_reset) {
Alexander Couzens195c9e72020-10-26 23:09:16 +0100120 /* Expect BVC-RESET, but ignore it to prevent a race condition of BVC RESETs */
121 var template PDU_NS pdu := tr_NS_UNITDATA(t_SduCtrlB, 0, decmatch tr_BVC_RESET(?, 0, omit));
122 f_ns_exp(pdu);
123 /* SGSN originated BVC-RESET on an uninitialized signalling BVC */
Harald Weltee97e3af2020-10-09 14:56:54 +0200124 f_tx_bvc_reset_rx_ack(0, omit, omit);
Alexander Couzens195c9e72020-10-26 23:09:16 +0100125
126 /* Expect BVC-RESET PTP BVC, but ignore it to prevent a race condition of BVC RESETs */
127 pdu := tr_NS_UNITDATA(t_SduCtrlB, 0, decmatch tr_BVC_RESET(?, mp_gb_cfg.bvc[0].bvci, mp_gb_cfg.bvc[0].cell_id));
128 f_ns_exp(pdu);
129 /* SGSN originated BVC-RESET on an uninitialized PTP BVC */
Harald Weltee97e3af2020-10-09 14:56:54 +0200130 f_tx_bvc_reset_rx_ack(mp_gb_cfg.bvc[0].bvci, omit, mp_gb_cfg.bvc[0].cell_id);
Harald Welte64d07312019-03-20 09:48:39 +0100131 } else {
Alexander Couzens195c9e72020-10-26 23:09:16 +0100132 /* Expect BVC-RESET for signaling BVCI=0 */
Harald Weltee97e3af2020-10-09 14:56:54 +0200133 as_rx_bvc_reset_tx_ack(0, omit, omit, oneshot := true);
Alexander Couzens195c9e72020-10-26 23:09:16 +0100134 /* Expect BVC-RESET from the PCU on PTP BVC */
Harald Weltee97e3af2020-10-09 14:56:54 +0200135 as_rx_bvc_reset_tx_ack(mp_gb_cfg.bvc[0].bvci, mp_gb_cfg.bvc[0].cell_id, omit, oneshot := true);
Harald Welte64d07312019-03-20 09:48:39 +0100136 }
Harald Welte630d0e62019-02-22 23:26:40 +0100137 /* Expect UNBLOCK for ptp BVCI on signaling NS-VC (idx==0) */
Harald Welte5339b2e2020-10-04 22:52:56 +0200138 as_rx_bvc_unblock_tx_ack(mp_gb_cfg.bvc[0].bvci, oneshot := true);
Harald Welte630d0e62019-02-22 23:26:40 +0100139
140 /* wait for one FLOW-CONTROL BVC and then ACK any further in the future. Flow
141 * control happens on the p-t-p BVCI and hence on index 1 */
Harald Welte5339b2e2020-10-04 22:52:56 +0200142 as_rx_bvc_fc_tx_ack(mp_gb_cfg.bvc[0].bvci, oneshot := true, idx := 1);
143 activate(as_rx_bvc_fc_tx_ack(mp_gb_cfg.bvc[0].bvci, idx := 1));
Harald Welte630d0e62019-02-22 23:26:40 +0100144}
145
146/* Test full IP-SNS bring-up with two NS-VCs, one sig-only and one user-only */
Harald Welteea3c7e92019-03-01 19:34:55 +0100147testcase TC_sns_1c1u() runs on RAW_Test_CT {
Harald Welte630d0e62019-02-22 23:26:40 +0100148 f_sns_bringup_1c1u();
149 setverdict(pass);
Alexander Couzensc3165722021-01-11 02:51:45 +0100150 f_clean_ns_codec();
Harald Welte630d0e62019-02-22 23:26:40 +0100151}
152
Harald Welte64d07312019-03-20 09:48:39 +0100153private function f_sns_bringup_1c1u_separate(boolean sgsn_originated_reset := false) runs on RAW_Test_CT {
Harald Welteecd159e2019-03-16 13:36:07 +0100154 /* Activate two NS codec ports */
Alexander Couzens2beaa202020-09-11 20:08:41 +0200155 f_init_ns_codec(mp_nsconfig);
156 f_init_ns_codec(mp_nsconfig, 1);
157 f_init_ns_codec(mp_nsconfig, 2);
Harald Welteecd159e2019-03-16 13:36:07 +0100158 f_init_pcuif();
159 /* Perform Size + BSS-originated config */
160 f_incoming_sns_size();
161 f_incoming_sns_config();
162 /* perform SGSN-originated config using idx==0 for signalling and idx==1 for user traffic */
163 f_outgoing_sns_config_1c1u_separate();
164
165 /* wait for one ALIVE cycle, then ACK any further ALIVE in the background
166 * for both NS-VCs */
167 as_rx_alive_tx_ack(oneshot := true, idx := 1);
168 activate(as_rx_alive_tx_ack(idx := 1));
169 as_rx_alive_tx_ack(oneshot := true, idx := 2);
170 activate(as_rx_alive_tx_ack(idx := 2));
171 /* ensure there's no NS-ALIVE received on idx==0 */
172 f_ensure_no_ns(t_NS_ALIVE, idx := 0);
173
174 /* perform outgoing ALIVE procedure for both NS-VCs */
175 f_outgoing_ns_alive(1);
176 f_outgoing_ns_alive(2);
177 /* ensure there's no response to NS-ALIVE sent on idx==0 */
178 f_outgoing_ns_alive_no_ack(idx := 0);
179
Harald Welte64d07312019-03-20 09:48:39 +0100180 if (sgsn_originated_reset) {
Alexander Couzens195c9e72020-10-26 23:09:16 +0100181 /* Expect BVC-RESET, but ignore it to prevent a race condition of BVC RESETs */
182 var template PDU_NS pdu := tr_NS_UNITDATA(t_SduCtrlB, 0, decmatch tr_BVC_RESET(?, 0, omit));
183 f_ns_exp(pdu, idx := 1);
184 /* SGSN originated BVC-RESET on an uninitialized sign BVC */
Harald Weltee97e3af2020-10-09 14:56:54 +0200185 f_tx_bvc_reset_rx_ack(0, omit, omit, idx := 1);
Alexander Couzens195c9e72020-10-26 23:09:16 +0100186
187 /* Expect BVC-RESET PTP BVC, but ignore it to prevent a race condition of BVC RESETs */
188 pdu := tr_NS_UNITDATA(t_SduCtrlB, 0, decmatch tr_BVC_RESET(?, mp_gb_cfg.bvc[0].bvci, mp_gb_cfg.bvc[0].cell_id));
189 f_ns_exp(pdu, idx := 1);
Harald Weltee97e3af2020-10-09 14:56:54 +0200190 f_tx_bvc_reset_rx_ack(mp_gb_cfg.bvc[0].bvci, omit, mp_gb_cfg.bvc[0].cell_id, idx := 1);
Harald Welte64d07312019-03-20 09:48:39 +0100191 } else {
Alexander Couzens195c9e72020-10-26 23:09:16 +0100192 /* Expect BVC-RESET for signaling BVCI=0 */
Harald Weltee97e3af2020-10-09 14:56:54 +0200193 as_rx_bvc_reset_tx_ack(0, omit, omit, oneshot := true, idx := 1);
Alexander Couzens195c9e72020-10-26 23:09:16 +0100194 /* Expect BVC-RESET from the PCU on PTP BVC */
Harald Weltee97e3af2020-10-09 14:56:54 +0200195 as_rx_bvc_reset_tx_ack(mp_gb_cfg.bvc[0].bvci, mp_gb_cfg.bvc[0].cell_id, omit, oneshot := true, idx := 1);
Harald Welte64d07312019-03-20 09:48:39 +0100196 }
Harald Welteecd159e2019-03-16 13:36:07 +0100197 /* Expect UNBLOCK for ptp BVCI on signaling NS-VC (idx==1) */
Harald Welte5339b2e2020-10-04 22:52:56 +0200198 as_rx_bvc_unblock_tx_ack(mp_gb_cfg.bvc[0].bvci, oneshot := true, idx := 1);
Harald Welteecd159e2019-03-16 13:36:07 +0100199
200 /* wait for one FLOW-CONTROL BVC and then ACK any further in the future. Flow
201 * control happens on the p-t-p BVCI and hence on index 1 */
Harald Welte5339b2e2020-10-04 22:52:56 +0200202 as_rx_bvc_fc_tx_ack(mp_gb_cfg.bvc[0].bvci, oneshot := true, idx := 2);
203 activate(as_rx_bvc_fc_tx_ack(mp_gb_cfg.bvc[0].bvci, idx := 2));
Harald Welteecd159e2019-03-16 13:36:07 +0100204}
205
206/* Test full IP-SNS bring-up with two NS-VCs, one sig-only and one user-only - and where
207 * the initial IP/port for the SNS procedure is *not* part of the NS-VCs later */
208testcase TC_sns_1c1u_separate() runs on RAW_Test_CT {
209 f_sns_bringup_1c1u_separate();
210 setverdict(pass);
Alexander Couzensc3165722021-01-11 02:51:45 +0100211 f_clean_ns_codec();
Harald Welteecd159e2019-03-16 13:36:07 +0100212}
213
Harald Welte64d07312019-03-20 09:48:39 +0100214/* Test full IP-SNS bring-up with two NS-VCs, one sig-only and one user-only and use
215 * SGSN-originated BVC-RESET rather than BSS-originated */
216testcase TC_sns_1c1u_so_bvc_reset() runs on RAW_Test_CT {
217 f_sns_bringup_1c1u_separate(sgsn_originated_reset := true);
218 setverdict(pass);
Alexander Couzensc3165722021-01-11 02:51:45 +0100219 f_clean_ns_codec();
Harald Welte64d07312019-03-20 09:48:39 +0100220}
221
222/* Transmit BVC-RESET before NS-ALIVE of PCU was ACKed: expect no response */
223testcase TC_sns_1c1u_so_bvc_reset_too_early() runs on RAW_Test_CT {
224 /* Activate two NS codec ports */
Alexander Couzens2beaa202020-09-11 20:08:41 +0200225 f_init_ns_codec(mp_nsconfig);
226 f_init_ns_codec(mp_nsconfig, 1);
227 f_init_ns_codec(mp_nsconfig, 2);
Harald Welte64d07312019-03-20 09:48:39 +0100228 f_init_pcuif();
229 /* Perform Size + BSS-originated config */
230 f_incoming_sns_size();
231 f_incoming_sns_config();
232 /* perform SGSN-originated config using idx==0 for signalling and idx==1 for user traffic */
233 f_outgoing_sns_config_1c1u_separate();
234
235 /* DON'T ACK ANY INBOUND NS-ALIVE HERE! */
236
237 /* perform outgoing ALIVE procedure for both NS-VCs */
238 f_outgoing_ns_alive(1);
239 f_outgoing_ns_alive(2);
240 /* ensure there's no response to NS-ALIVE sent on idx==0 */
241 f_outgoing_ns_alive_no_ack(idx := 0);
242
243 /* Transmit BVC-RESET and expect no ACK*/
Harald Weltee97e3af2020-10-09 14:56:54 +0200244 f_tx_bvc_reset_rx_ack(0, omit, omit, idx := 1, exp_ack := false);
245 f_tx_bvc_reset_rx_ack(mp_gb_cfg.bvc[0].bvci, omit, mp_gb_cfg.bvc[0].cell_id, idx := 1, exp_ack := false);
Alexander Couzensc3165722021-01-11 02:51:45 +0100246 f_clean_ns_codec();
Harald Welte64d07312019-03-20 09:48:39 +0100247}
248
Harald Welte630d0e62019-02-22 23:26:40 +0100249/* Test adding new IP endpoints at runtime */
Harald Welteea3c7e92019-03-01 19:34:55 +0100250testcase TC_sns_add() runs on RAW_Test_CT {
Harald Welte630d0e62019-02-22 23:26:40 +0100251 f_sns_bringup_1c1u();
252
Alexander Couzens2373afc2020-12-09 02:19:49 +0100253 /* create another NS codec port on the tester side */
Alexander Couzens2beaa202020-09-11 20:08:41 +0200254 f_init_ns_codec(mp_nsconfig, 2);
Harald Welte630d0e62019-02-22 23:26:40 +0100255
256 f_outgoing_sns_add(idx_add := 2, w_sig := 0, w_user := 1, idx := 0);
257
258 /* wait for one ALIVE cycle, then ACK any further ALIVE in the background */
259 as_rx_alive_tx_ack(oneshot := true, idx := 2);
260 activate(as_rx_alive_tx_ack(idx := 2));
261
262 f_outgoing_ns_alive(2);
Harald Welte630d0e62019-02-22 23:26:40 +0100263 setverdict(pass);
Alexander Couzensc3165722021-01-11 02:51:45 +0100264 f_clean_ns_codec();
Harald Welte630d0e62019-02-22 23:26:40 +0100265}
266
Alexander Couzens2a0ac802020-12-09 02:19:29 +0100267/* Test adding an already present IP endpoint at runtime */
268testcase TC_sns_add_nack() runs on RAW_Test_CT {
269 f_sns_bringup_1c1u();
270
271 f_outgoing_sns_add(idx_add := 0, w_sig := 0, w_user := 1, idx := 0, cause := NS_CAUSE_PROTOCOL_ERROR_UNSPEIFIED);
272 setverdict(pass);
Alexander Couzensc3165722021-01-11 02:51:45 +0100273 f_clean_ns_codec();
Alexander Couzens2a0ac802020-12-09 02:19:29 +0100274}
275
Harald Welte630d0e62019-02-22 23:26:40 +0100276/* Test deleting IP endpoints at runtime */
Harald Welteea3c7e92019-03-01 19:34:55 +0100277testcase TC_sns_del() runs on RAW_Test_CT {
Harald Welte630d0e62019-02-22 23:26:40 +0100278 f_sns_bringup_1c1u();
279
280 f_outgoing_sns_del(idx_del := 1, w_sig := 0, w_user := 1, idx := 0);
281 /* FIXME: ensure we don't receive anything on just-deleted NS-VC anymore */
282 setverdict(pass);
Alexander Couzensc3165722021-01-11 02:51:45 +0100283 f_clean_ns_codec();
Harald Welte630d0e62019-02-22 23:26:40 +0100284}
285
Harald Welte72099552019-02-23 15:09:22 +0100286/* Test changing weights at runtime */
Harald Welteea3c7e92019-03-01 19:34:55 +0100287testcase TC_sns_chg_weight() runs on RAW_Test_CT {
Harald Welte72099552019-02-23 15:09:22 +0100288 f_sns_bringup_1c1u();
289
290 /* change w_user from 1 to 200 */
291 f_outgoing_sns_chg_weight(idx_chg := 1, w_sig := 0, w_user := 200, idx := 0);
292 setverdict(pass);
Alexander Couzensc3165722021-01-11 02:51:45 +0100293 f_clean_ns_codec();
Harald Welte72099552019-02-23 15:09:22 +0100294}
295
Harald Welte16e92f42019-03-02 00:03:44 +0100296import from PCUIF_Types all;
297import from PCUIF_CodecPort all;
298
Harald Welte3b335832019-03-15 22:38:06 +0100299altstep as_pcu_activate() runs on RAW_PCU_CT {
300 var PCUIF_send_data sd;
301 [] PCU.receive(t_SD_PCUIF(g_pcu_conn_id, tr_PCUIF_ACT_REQ(?, ?, ?))) -> value sd { repeat; }
302
303}
304
Harald Welte16e92f42019-03-02 00:03:44 +0100305testcase TC_pcuif_rach() runs on RAW_Test_CT {
306 f_sns_bringup_1c1u();
Harald Welte3b335832019-03-15 22:38:06 +0100307 activate(as_pcu_activate());
Harald Welte16e92f42019-03-02 00:03:44 +0100308
Vadim Yanitskiy36558d92019-11-17 02:23:51 +0700309 f_pcuif_tx(ts_PCUIF_RACH_IND(bts_nr:=0, trx_nr:=0, ts_nr:=0, ra:=23,
310 is_11bit:=0, burst_type:=BURST_TYPE_0,
Harald Welte16e92f42019-03-02 00:03:44 +0100311 fn:=42, arfcn:=871, qta:=0));
312 PCU.receive(t_SD_PCUIF(g_pcu_conn_id,
313 tr_PCUIF_DATA_REQ(bts_nr:=0, trx_nr:=0, ts_nr:=0, block_nr:=?, fn:=?,
314 sapi:=PCU_IF_SAPI_AGCH, data:=?)));
315 setverdict(pass);
Alexander Couzensc3165722021-01-11 02:51:45 +0100316 f_clean_ns_codec();
Harald Welte16e92f42019-03-02 00:03:44 +0100317}
318
Harald Welte630d0e62019-02-22 23:26:40 +0100319
320
Harald Weltef7b74072019-02-20 20:48:50 +0100321control {
322 execute( TC_sns_po_size_success() );
323 execute( TC_sns_po_size_nack() );
324 execute( TC_sns_po_config_success() );
325 execute( TC_sns_po_config_nack() );
326 execute( TC_sns_so_config_success() );
Harald Welte630d0e62019-02-22 23:26:40 +0100327 execute( TC_sns_1c1u() );
Harald Welteecd159e2019-03-16 13:36:07 +0100328 execute( TC_sns_1c1u_separate() );
Harald Welte64d07312019-03-20 09:48:39 +0100329 execute( TC_sns_1c1u_so_bvc_reset() );
330 execute( TC_sns_1c1u_so_bvc_reset_too_early() );
Harald Welte630d0e62019-02-22 23:26:40 +0100331 execute( TC_sns_add() );
Alexander Couzens2a0ac802020-12-09 02:19:29 +0100332 execute( TC_sns_add_nack() );
Harald Welte630d0e62019-02-22 23:26:40 +0100333 execute( TC_sns_del() );
Harald Welte72099552019-02-23 15:09:22 +0100334 execute( TC_sns_chg_weight() );
Harald Welte16e92f42019-03-02 00:03:44 +0100335
336 execute( TC_pcuif_rach() );
Harald Weltef7b74072019-02-20 20:48:50 +0100337}
338
339}