Vadim Yanitskiy | 7387813 | 2021-05-05 02:22:45 +0200 | [diff] [blame] | 1 | module BTS_Tests_VAMOS { |
| 2 | |
| 3 | /* Integration Tests for OsmoBTS |
| 4 | * |
| 5 | * (C) 2021 by sysmocom - s.m.f.c. GmbH <info@sysmocom.de> |
| 6 | * Author: Vadim Yanitskiy <vyanitskiy@sysmocom.de> |
| 7 | * |
| 8 | * All rights reserved. |
| 9 | * |
| 10 | * Released under the terms of GNU General Public License, Version 2 or |
| 11 | * (at your option) any later version. |
| 12 | * |
| 13 | * SPDX-License-Identifier: GPL-2.0-or-later |
| 14 | * |
| 15 | * This module contains VAMOS specific test cases. |
| 16 | */ |
| 17 | |
| 18 | import from Misc_Helpers all; |
| 19 | import from General_Types all; |
| 20 | import from Osmocom_Types all; |
| 21 | import from GSM_Types all; |
| 22 | import from L1CTL_PortType all; |
| 23 | import from L1CTL_Types all; |
| 24 | import from LAPDm_Types all; |
| 25 | import from IPA_Emulation all; |
| 26 | import from GSM_RR_Types all; |
| 27 | import from L3_Templates all; |
| 28 | |
| 29 | import from RSL_Emulation all; |
| 30 | import from RSL_Types all; |
| 31 | |
| 32 | import from BTS_Tests all; |
| 33 | |
| 34 | private type record of ChanNrModeSet ChanNrModeTest; |
| 35 | private type record of ChanNrMode ChanNrModeSet; |
| 36 | private type record ChanNrMode { |
| 37 | RslChannelNr chan_nr, |
| 38 | RSL_IE_ChannelMode chan_mode |
| 39 | }; |
| 40 | |
| 41 | /* VFF: V0(TCH/F) & V1(TCH/F), 2 channels total */ |
| 42 | private template (value) ChanNrModeTest |
| 43 | ChanNrModeTestVFF(uint3_t tn) := { |
| 44 | { |
| 45 | { ts_RslChanNr_Bm(tn), /* V0(TCH/F), signalling */ |
| 46 | ts_RSL_ChanMode_SIGN(RSL_CHRT_OSMO_TCH_F_VAMOS) }, |
| 47 | { ts_RslChanNr_Osmo_VAMOS_Bm(tn), /* V1(TCH/F), signalling */ |
| 48 | ts_RSL_ChanMode_SIGN(RSL_CHRT_OSMO_TCH_F_VAMOS) } |
| 49 | }, |
| 50 | { |
| 51 | { ts_RslChanNr_Bm(tn), /* V0(TCH/F), FR codec */ |
| 52 | ts_RSL_ChanMode(RSL_CHRT_OSMO_TCH_F_VAMOS, RSL_CMOD_SP_GSM1) }, |
| 53 | { ts_RslChanNr_Osmo_VAMOS_Bm(tn), /* V1(TCH/F), signalling */ |
| 54 | ts_RSL_ChanMode_SIGN(RSL_CHRT_OSMO_TCH_F_VAMOS) } |
| 55 | }, |
| 56 | { |
| 57 | { ts_RslChanNr_Bm(tn), /* V0(TCH/F), EFR codec */ |
| 58 | ts_RSL_ChanMode(RSL_CHRT_OSMO_TCH_F_VAMOS, RSL_CMOD_SP_GSM2) }, |
| 59 | { ts_RslChanNr_Osmo_VAMOS_Bm(tn), /* V1(TCH/F), AMR codec */ |
| 60 | ts_RSL_ChanMode(RSL_CHRT_OSMO_TCH_F_VAMOS, RSL_CMOD_SP_GSM3) } |
| 61 | }, |
| 62 | { |
| 63 | { ts_RslChanNr_Bm(tn), /* V0(TCH/F), AMR codec */ |
| 64 | ts_RSL_ChanMode(RSL_CHRT_OSMO_TCH_F_VAMOS, RSL_CMOD_SP_GSM3) }, |
| 65 | { ts_RslChanNr_Osmo_VAMOS_Bm(tn), /* V1(TCH/F), AMR codec */ |
| 66 | ts_RSL_ChanMode(RSL_CHRT_OSMO_TCH_F_VAMOS, RSL_CMOD_SP_GSM3) } |
| 67 | } |
| 68 | }; |
| 69 | |
| 70 | /* VHH: V0(TCH/H0) & V1(TCH/H0) + V0(TCH/H1) & V1(TCH/H1), 4 channels total */ |
| 71 | private template (value) ChanNrModeTest |
| 72 | ChanNrModeTestVHH(uint3_t tn) := { |
| 73 | { |
| 74 | { ts_RslChanNr_Lm(tn, 0), /* V0(TCH/H0), signalling */ |
| 75 | ts_RSL_ChanMode_SIGN(RSL_CHRT_OSMO_TCH_H_VAMOS) }, |
| 76 | { ts_RslChanNr_Lm(tn, 1), /* V0(TCH/H1), signalling */ |
| 77 | ts_RSL_ChanMode_SIGN(RSL_CHRT_OSMO_TCH_H_VAMOS) }, |
| 78 | { ts_RslChanNr_Osmo_VAMOS_Lm(tn, 0), /* V1(TCH/H0), signalling */ |
| 79 | ts_RSL_ChanMode_SIGN(RSL_CHRT_OSMO_TCH_H_VAMOS) }, |
| 80 | { ts_RslChanNr_Osmo_VAMOS_Lm(tn, 1), /* V1(TCH/H1), signalling */ |
| 81 | ts_RSL_ChanMode_SIGN(RSL_CHRT_OSMO_TCH_H_VAMOS) } |
| 82 | }, |
| 83 | { |
| 84 | { ts_RslChanNr_Lm(tn, 0), /* V0(TCH/H0), signalling */ |
| 85 | ts_RSL_ChanMode_SIGN(RSL_CHRT_OSMO_TCH_H_VAMOS) }, |
| 86 | { ts_RslChanNr_Lm(tn, 1), /* V0(TCH/H1), HR codec */ |
| 87 | ts_RSL_ChanMode(RSL_CHRT_OSMO_TCH_H_VAMOS, RSL_CMOD_SP_GSM1) }, |
| 88 | { ts_RslChanNr_Osmo_VAMOS_Lm(tn, 0), /* V1(TCH/H0), HR codec */ |
| 89 | ts_RSL_ChanMode(RSL_CHRT_OSMO_TCH_H_VAMOS, RSL_CMOD_SP_GSM1) }, |
| 90 | { ts_RslChanNr_Osmo_VAMOS_Lm(tn, 1), /* V1(TCH/H1), signalling */ |
| 91 | ts_RSL_ChanMode_SIGN(RSL_CHRT_OSMO_TCH_H_VAMOS) } |
| 92 | }, |
| 93 | { |
| 94 | { ts_RslChanNr_Lm(tn, 0), /* V0(TCH/H0), HR codec */ |
| 95 | ts_RSL_ChanMode(RSL_CHRT_OSMO_TCH_H_VAMOS, RSL_CMOD_SP_GSM1) }, |
| 96 | { ts_RslChanNr_Lm(tn, 1), /* V0(TCH/H1), AMR codec */ |
| 97 | ts_RSL_ChanMode(RSL_CHRT_OSMO_TCH_H_VAMOS, RSL_CMOD_SP_GSM3) }, |
| 98 | { ts_RslChanNr_Osmo_VAMOS_Lm(tn, 0), /* V1(TCH/H0), signalling */ |
| 99 | ts_RSL_ChanMode_SIGN(RSL_CHRT_OSMO_TCH_H_VAMOS) }, |
| 100 | { ts_RslChanNr_Osmo_VAMOS_Lm(tn, 1), /* V1(TCH/H1), signalling */ |
| 101 | ts_RSL_ChanMode_SIGN(RSL_CHRT_OSMO_TCH_H_VAMOS) } |
| 102 | }, |
| 103 | { |
| 104 | { ts_RslChanNr_Lm(tn, 0), /* V0(TCH/H0), AMR codec */ |
| 105 | ts_RSL_ChanMode(RSL_CHRT_OSMO_TCH_H_VAMOS, RSL_CMOD_SP_GSM3) }, |
| 106 | { ts_RslChanNr_Lm(tn, 1), /* V0(TCH/H1), AMR codec */ |
| 107 | ts_RSL_ChanMode(RSL_CHRT_OSMO_TCH_H_VAMOS, RSL_CMOD_SP_GSM3) }, |
| 108 | { ts_RslChanNr_Osmo_VAMOS_Lm(tn, 0), /* V1(TCH/H0), AMR codec */ |
| 109 | ts_RSL_ChanMode(RSL_CHRT_OSMO_TCH_H_VAMOS, RSL_CMOD_SP_GSM3) }, |
| 110 | { ts_RslChanNr_Osmo_VAMOS_Lm(tn, 1), /* V1(TCH/H1), AMR codec */ |
| 111 | ts_RSL_ChanMode(RSL_CHRT_OSMO_TCH_H_VAMOS, RSL_CMOD_SP_GSM3) } |
| 112 | } |
| 113 | }; |
| 114 | |
| 115 | /* HVHH: TCH/H0 + V0(TCH/H1) & V1(TCH/H1), 3 channels total (mixed) */ |
| 116 | private template (value) ChanNrModeTest |
| 117 | ChanNrModeTestHVHH(uint3_t tn) := { |
| 118 | { |
| 119 | { ts_RslChanNr_Lm(tn, 0), /* TCH/H0, signalling */ |
| 120 | ts_RSL_ChanMode_SIGN(RSL_CHRT_TCH_H) }, |
| 121 | { ts_RslChanNr_Lm(tn, 1), /* V0(TCH/H1), signalling */ |
| 122 | ts_RSL_ChanMode_SIGN(RSL_CHRT_OSMO_TCH_H_VAMOS) }, |
| 123 | { ts_RslChanNr_Osmo_VAMOS_Lm(tn, 1), /* V1(TCH/H1), signalling */ |
| 124 | ts_RSL_ChanMode_SIGN(RSL_CHRT_OSMO_TCH_H_VAMOS) } |
| 125 | }, |
| 126 | { |
| 127 | { ts_RslChanNr_Lm(tn, 0), /* TCH/H0, signalling */ |
| 128 | ts_RSL_ChanMode_SIGN(RSL_CHRT_TCH_H) }, |
| 129 | { ts_RslChanNr_Lm(tn, 1), /* V0(TCH/H1), AMR codec */ |
| 130 | ts_RSL_ChanMode(RSL_CHRT_OSMO_TCH_H_VAMOS, RSL_CMOD_SP_GSM3) }, |
| 131 | { ts_RslChanNr_Osmo_VAMOS_Lm(tn, 1), /* V1(TCH/H1), AMR codec */ |
| 132 | ts_RSL_ChanMode(RSL_CHRT_OSMO_TCH_H_VAMOS, RSL_CMOD_SP_GSM3) } |
| 133 | }, |
| 134 | { |
| 135 | { ts_RslChanNr_Lm(tn, 0), /* TCH/H0, HR codec */ |
| 136 | ts_RSL_ChanMode(RSL_CHRT_TCH_H, RSL_CMOD_SP_GSM1) }, |
| 137 | { ts_RslChanNr_Lm(tn, 1), /* V0(TCH/H1), HR codec */ |
| 138 | ts_RSL_ChanMode(RSL_CHRT_OSMO_TCH_H_VAMOS, RSL_CMOD_SP_GSM1) }, |
| 139 | { ts_RslChanNr_Osmo_VAMOS_Lm(tn, 1), /* V1(TCH/H1), AMR codec */ |
| 140 | ts_RSL_ChanMode(RSL_CHRT_OSMO_TCH_H_VAMOS, RSL_CMOD_SP_GSM3) } |
| 141 | }, |
| 142 | { |
| 143 | { ts_RslChanNr_Lm(tn, 0), /* TCH/H0, AMR codec */ |
| 144 | ts_RSL_ChanMode(RSL_CHRT_TCH_H, RSL_CMOD_SP_GSM3) }, |
| 145 | { ts_RslChanNr_Lm(tn, 1), /* V0(TCH/H1), AMR codec */ |
| 146 | ts_RSL_ChanMode(RSL_CHRT_OSMO_TCH_H_VAMOS, RSL_CMOD_SP_GSM3) }, |
| 147 | { ts_RslChanNr_Osmo_VAMOS_Lm(tn, 1), /* V1(TCH/H1), AMR codec */ |
| 148 | ts_RSL_ChanMode(RSL_CHRT_OSMO_TCH_H_VAMOS, RSL_CMOD_SP_GSM3) } |
| 149 | } |
| 150 | }; |
| 151 | |
| 152 | private template (value) RSL_IE |
| 153 | ts_RSL_IE_OsmoTSC := { |
| 154 | iei := RSL_IE_OSMO_TRAINING_SEQUENCE, |
| 155 | body := { |
| 156 | osmo_training_sequence := { |
| 157 | len := 0, /* overridden */ |
| 158 | tsc_set := f_rnd_int(4), |
| 159 | tsc := f_rnd_int(8) |
| 160 | } |
| 161 | } |
| 162 | } |
| 163 | |
| 164 | private function f_TC_vamos_exec_async(in ChanNrModeTest test, void_fn handler) |
| 165 | runs on test_CT { |
| 166 | /* Up to 4 simultenious lchans */ |
| 167 | var ConnHdlrPars pars[4]; |
| 168 | var ConnHdlr vc_conn[4]; |
| 169 | |
| 170 | f_init(); |
| 171 | |
| 172 | for (var integer i := 0; i < lengthof(test); i := i + 1) { |
| 173 | /* Start a ConnHdlr component for each logical channel */ |
| 174 | for (var integer ch := 0; ch < lengthof(test[i]); ch := ch + 1) { |
| 175 | pars[ch] := valueof(t_Pars(test[i][ch].chan_nr, |
| 176 | test[i][ch].chan_mode)); |
| 177 | vc_conn[ch] := f_start_handler(handler, pars[ch], l1ctl := false); |
| 178 | } |
| 179 | |
| 180 | /* Wait for all ConnHdlr components to finish */ |
| 181 | for (var integer ch := 0; ch < lengthof(test[i]); ch := ch + 1) { |
| 182 | vc_conn[ch].done; |
| 183 | } |
| 184 | } |
Vadim Yanitskiy | beda697 | 2021-06-21 12:50:07 +0200 | [diff] [blame] | 185 | |
| 186 | Misc_Helpers.f_shutdown(__BFILE__, __LINE__); |
Vadim Yanitskiy | 7387813 | 2021-05-05 02:22:45 +0200 | [diff] [blame] | 187 | } |
| 188 | |
| 189 | private function f_TC_vamos_chan_act(charstring id) |
| 190 | runs on ConnHdlr { |
| 191 | var RSL_IE tsc_ie := valueof(ts_RSL_IE_OsmoTSC); |
| 192 | |
| 193 | /* CHANnel ACTIVation with Osmocom specific TSC IE */ |
| 194 | f_rsl_chan_act(g_pars.chan_mode, more_ies := { tsc_ie }); |
| 195 | |
| 196 | /* Hold the channel for a while */ |
| 197 | f_sleep(0.3); |
| 198 | |
| 199 | /* DEACTivate the channel */ |
| 200 | f_rsl_chan_deact(); |
| 201 | f_rslem_unregister(0, g_chan_nr); |
| 202 | } |
| 203 | |
| 204 | /* VFF: V0(TCH/F) & V1(TCH/F), 2 channels total */ |
| 205 | testcase TC_vamos_chan_act_vff() runs on test_CT { /* TCH/F on TS1 */ |
| 206 | var ChanNrModeTest test := valueof(ChanNrModeTestVFF(1)); |
| 207 | f_TC_vamos_exec_async(test, refers(f_TC_vamos_chan_act)); |
| 208 | } |
| 209 | testcase TC_vamos_chan_act_dyn_ipa_vff() runs on test_CT { /* TCH/F+PDCH on TS3 */ |
| 210 | var ChanNrModeTest test := valueof(ChanNrModeTestVFF(3)); |
| 211 | f_TC_vamos_exec_async(test, refers(f_TC_vamos_chan_act)); |
| 212 | } |
| 213 | testcase TC_vamos_chan_act_dyn_osmo_vff() runs on test_CT { /* TCH/F+TCH/H+PDCH on TS4 */ |
| 214 | var ChanNrModeTest test := valueof(ChanNrModeTestVFF(4)); |
| 215 | f_TC_vamos_exec_async(test, refers(f_TC_vamos_chan_act)); |
| 216 | } |
| 217 | |
| 218 | /* VHH: V0(TCH/H0) & V1(TCH/H0) + V0(TCH/H1) & V1(TCH/H1), 4 channels total */ |
| 219 | testcase TC_vamos_chan_act_vhh() runs on test_CT { |
| 220 | var ChanNrModeTest test := valueof(ChanNrModeTestVHH(5)); |
| 221 | f_TC_vamos_exec_async(test, refers(f_TC_vamos_chan_act)); /* TCH/H on TS5 */ |
| 222 | } |
| 223 | testcase TC_vamos_chan_act_dyn_osmo_vhh() runs on test_CT { /* TCH/F+TCH/H+PDCH on TS4 */ |
| 224 | var ChanNrModeTest test := valueof(ChanNrModeTestVHH(4)); |
| 225 | f_TC_vamos_exec_async(test, refers(f_TC_vamos_chan_act)); |
| 226 | } |
| 227 | |
| 228 | /* HVHH: TCH/H0 + V0(TCH/H1) & V1(TCH/H1), 3 channels total (mixed) */ |
| 229 | testcase TC_vamos_chan_act_hvhh() runs on test_CT { |
| 230 | var ChanNrModeTest test := valueof(ChanNrModeTestHVHH(5)); |
| 231 | f_TC_vamos_exec_async(test, refers(f_TC_vamos_chan_act)); /* TCH/H on TS5 */ |
| 232 | } |
| 233 | testcase TC_vamos_chan_act_dyn_osmo_hvhh() runs on test_CT { /* TCH/F+TCH/H+PDCH on TS4 */ |
| 234 | var ChanNrModeTest test := valueof(ChanNrModeTestHVHH(4)); |
| 235 | f_TC_vamos_exec_async(test, refers(f_TC_vamos_chan_act)); |
| 236 | } |
| 237 | |
Vadim Yanitskiy | 4c58c6a | 2021-05-31 20:04:56 +0200 | [diff] [blame] | 238 | private function f_TC_vamos_chan_mode_modify(charstring id) |
| 239 | runs on ConnHdlr { |
| 240 | var RSL_IE tsc_ie := valueof(ts_RSL_IE_OsmoTSC); |
| 241 | |
| 242 | /* CHANnel ACTIVation with Osmocom specific IEs */ |
| 243 | f_rsl_chan_act(g_pars.chan_mode, more_ies := { tsc_ie }); |
| 244 | |
| 245 | /* If we're in signalling mode, modify to speech */ |
| 246 | if (g_pars.chan_mode.spd_ind == RSL_SPDI_SIGN) { |
| 247 | g_pars.chan_mode.spd_ind := RSL_SPDI_SPEECH; |
| 248 | g_pars.chan_mode.coding_alg_rate := RSL_CMOD_SP_GSM1; |
| 249 | } else { /* ... or vice versa */ |
| 250 | g_pars.chan_mode.spd_ind := RSL_SPDI_SIGN; |
| 251 | g_pars.chan_mode.coding_alg_rate := RSL_CMOD_NO_RESOURCE; |
| 252 | } |
| 253 | |
| 254 | var RSL_Message rsl := valueof(ts_RSL_MODE_MODIFY_REQ(g_chan_nr, g_pars.chan_mode)); |
| 255 | rsl.ies := rsl.ies & { tsc_ie }; |
| 256 | RSL.send(rsl); |
| 257 | |
| 258 | timer T := 1.0; |
| 259 | T.start; |
| 260 | alt { |
| 261 | [] RSL.receive(tr_RSL_MODE_MODIFY_ACK(g_chan_nr)) { setverdict(pass); } |
| 262 | [] RSL.receive(tr_RSL_MODE_MODIFY_NACK(g_chan_nr, ?)) { |
| 263 | Misc_Helpers.f_shutdown(__BFILE__, __LINE__, fail, |
| 264 | "Rx MODE MODIFY NACK"); |
| 265 | } |
| 266 | [] T.timeout { |
| 267 | Misc_Helpers.f_shutdown(__BFILE__, __LINE__, fail, |
| 268 | "Timeout waiting for MODE MODIFY (N)ACK"); |
| 269 | } |
| 270 | } |
| 271 | |
| 272 | /* DEACTivate the channel */ |
| 273 | f_rsl_chan_deact(); |
| 274 | f_rslem_unregister(0, g_chan_nr); |
| 275 | } |
| 276 | |
| 277 | /* VFF: V0(TCH/F) & V1(TCH/F), 2 channels total */ |
| 278 | testcase TC_vamos_chan_mode_modify_vff() runs on test_CT { /* TCH/F on TS1 */ |
| 279 | var ChanNrModeTest test := valueof(ChanNrModeTestVFF(1)); |
| 280 | f_TC_vamos_exec_async(test, refers(f_TC_vamos_chan_mode_modify)); |
| 281 | } |
| 282 | testcase TC_vamos_chan_mode_modify_dyn_ipa_vff() runs on test_CT { /* TCH/F+PDCH on TS3 */ |
| 283 | var ChanNrModeTest test := valueof(ChanNrModeTestVFF(3)); |
| 284 | f_TC_vamos_exec_async(test, refers(f_TC_vamos_chan_mode_modify)); |
| 285 | } |
| 286 | testcase TC_vamos_chan_mode_modify_dyn_osmo_vff() runs on test_CT { /* TCH/F+TCH/H+PDCH on TS4 */ |
| 287 | var ChanNrModeTest test := valueof(ChanNrModeTestVFF(4)); |
| 288 | f_TC_vamos_exec_async(test, refers(f_TC_vamos_chan_mode_modify)); |
| 289 | } |
| 290 | |
| 291 | /* VHH: V0(TCH/H0) & V1(TCH/H0) + V0(TCH/H1) & V1(TCH/H1), 4 channels total */ |
| 292 | testcase TC_vamos_chan_mode_modify_vhh() runs on test_CT { |
| 293 | var ChanNrModeTest test := valueof(ChanNrModeTestVHH(5)); |
| 294 | f_TC_vamos_exec_async(test, refers(f_TC_vamos_chan_mode_modify)); /* TCH/H on TS5 */ |
| 295 | } |
| 296 | testcase TC_vamos_chan_mode_modify_dyn_osmo_vhh() runs on test_CT { /* TCH/F+TCH/H+PDCH on TS4 */ |
| 297 | var ChanNrModeTest test := valueof(ChanNrModeTestVHH(4)); |
| 298 | f_TC_vamos_exec_async(test, refers(f_TC_vamos_chan_mode_modify)); |
| 299 | } |
| 300 | |
| 301 | /* HVHH: TCH/H0 + V0(TCH/H1) & V1(TCH/H1), 3 channels total (mixed) */ |
| 302 | testcase TC_vamos_chan_mode_modify_hvhh() runs on test_CT { |
| 303 | var ChanNrModeTest test := valueof(ChanNrModeTestHVHH(5)); |
| 304 | f_TC_vamos_exec_async(test, refers(f_TC_vamos_chan_mode_modify)); /* TCH/H on TS5 */ |
| 305 | } |
| 306 | testcase TC_vamos_chan_mode_modify_dyn_osmo_hvhh() runs on test_CT { /* TCH/F+TCH/H+PDCH on TS4 */ |
| 307 | var ChanNrModeTest test := valueof(ChanNrModeTestHVHH(4)); |
| 308 | f_TC_vamos_exec_async(test, refers(f_TC_vamos_chan_mode_modify)); |
| 309 | } |
| 310 | |
Vadim Yanitskiy | 7387813 | 2021-05-05 02:22:45 +0200 | [diff] [blame] | 311 | control { |
| 312 | /* CHANnel ACTIVation tests */ |
| 313 | execute( TC_vamos_chan_act_vff() ); |
| 314 | execute( TC_vamos_chan_act_vhh() ); |
| 315 | execute( TC_vamos_chan_act_hvhh() ); |
| 316 | execute( TC_vamos_chan_act_dyn_ipa_vff() ); |
| 317 | execute( TC_vamos_chan_act_dyn_osmo_vff() ); |
| 318 | execute( TC_vamos_chan_act_dyn_osmo_vhh() ); |
| 319 | execute( TC_vamos_chan_act_dyn_osmo_hvhh() ); |
Vadim Yanitskiy | 4c58c6a | 2021-05-31 20:04:56 +0200 | [diff] [blame] | 320 | |
| 321 | /* MODE MODIFY tests */ |
| 322 | execute( TC_vamos_chan_mode_modify_vff() ); |
| 323 | execute( TC_vamos_chan_mode_modify_vhh() ); |
| 324 | execute( TC_vamos_chan_mode_modify_hvhh() ); |
| 325 | execute( TC_vamos_chan_mode_modify_dyn_ipa_vff() ); |
| 326 | execute( TC_vamos_chan_mode_modify_dyn_osmo_vff() ); |
| 327 | execute( TC_vamos_chan_mode_modify_dyn_osmo_vhh() ); |
| 328 | execute( TC_vamos_chan_mode_modify_dyn_osmo_hvhh() ); |
Vadim Yanitskiy | 7387813 | 2021-05-05 02:22:45 +0200 | [diff] [blame] | 329 | } |
| 330 | |
| 331 | } |