blob: e2e5336afe71c3b087b25dd613b90f638b6b55b7 [file] [log] [blame]
Harald Welte0db44132019-10-17 11:09:05 +02001module STP_Tests {
2
3/* Osmocom STP test suite in in TTCN-3
4 * (C) 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
13import from General_Types all;
14import from Osmocom_Types all;
15import from IPL4asp_Types all;
16
17import from Osmocom_VTY_Functions all;
18
19import from M3UA_Types all;
20import from M3UA_Templates all;
21import from M3UA_CodecPort all;
22import from M3UA_CodecPort_CtrlFunct all;
23
24import from M3UA_Emulation all;
25import from MTP3asp_Types all;
26import from MTP3asp_PortType all;
27
28import from SCCP_Types all;
29import from SCCP_Templates all;
30import from SCCPasp_Types all;
31import from SCCP_Emulation all;
32
33import from IPA_Emulation all;
34
35import from STP_Tests_Common all;
36import from STP_Tests_IPA all;
37import from STP_Tests_M3UA all;
38
39
40type component IPA_M3UA_CT extends RAW_M3UA_CT, IPA_CT {
41};
42
43const OCT1 c_M3UA_SI_SCCP := '03'O;
44
Harald Welte0db44132019-10-17 11:09:05 +020045template (value) PDU_SCCP ts_SCCP_UDT(SCCP_PAR_Address called, SCCP_PAR_Address calling,
46 template (value) octetstring data,
47 template (value) BIT4 msg_hdl := '0000'B) := {
48 unitdata := {
49 messageType := udt,
50 protClass := {'0000'B, msg_hdl},
51 pointer1 := 0,
52 pointer2 := 0,
53 pointer3 := 0,
54 calledPAddress := ConvertASPAddressToEncodedAddress_itu(called),
55 callingPAddress := ConvertASPAddressToEncodedAddress_itu(calling),
56 data := {
57 paramLength := 0,
58 data := data
59 }
60 }
61}
62
63/* Test routing of SCCP between an M3UA and an IPA ASP */
64testcase TC_m3ua_to_ipa() runs on IPA_M3UA_CT {
65 var OCT4 rctx_sender := int2oct(1023, 4);
66 var OCT4 pc_sender := int2oct(23, 4);
67 var OCT4 pc_receiver := int2oct(5, 4);
68
69 f_init_m3ua();
70 f_init_ipa();
71
Pau Espin Pedrol01ec0bf2019-11-07 14:50:07 +010072 f_connect_ipa(3);
Harald Welte0db44132019-10-17 11:09:05 +020073 f_M3UA_asp_up_act(0, omit, omit); // TODO: rctx
74
75 /* send a well-formed, encoded SCCP message via M3UA */
Harald Welte67881ae2022-04-12 22:52:47 +020076 var octetstring data := f_rnd_octstring_rnd_len(100);
Harald Welte0db44132019-10-17 11:09:05 +020077 var SCCP_PAR_Address called := valueof(ts_SccpAddr_GT('1234'H));
78 var SCCP_PAR_Address calling := valueof(ts_SccpAddr_GT('5678'H));
79 var PDU_SCCP sccp := valueof(ts_SCCP_UDT(called, calling, data));
80 var octetstring sccp_enc := enc_PDU_SCCP(sccp);
81 var template (value) M3UA_Protocol_Data tx_pd;
82 tx_pd := ts_M3UA_protocol_data(pc_sender, pc_receiver, c_M3UA_SI_SCCP, '00'O, '00'O, '00'O, sccp_enc);
83 f_M3UA_send(0, ts_M3UA_DATA(rctx_sender, tx_pd), 1);
84
85 /* expect to receive it via IPA */
Pau Espin Pedrol01ec0bf2019-11-07 14:50:07 +010086 f_IPA_exp(3, sccp_enc);
Pau Espin Pedrol05726dd2019-11-06 15:55:57 +010087
88 f_clear_m3ua();
Harald Welte0db44132019-10-17 11:09:05 +020089}
90
91/* test routing an SCCP message from IPA ASP to M3UA ASP */
92testcase TC_ipa_to_m3ua() runs on IPA_M3UA_CT {
93 var OCT4 pc_sender := int2oct(5, 4);
94 var OCT4 rctx_receiver := int2oct(1023, 4);
95 var OCT4 pc_receiver := int2oct(23, 4);
96
97 f_init_common();
Pau Espin Pedrol01ec0bf2019-11-07 14:50:07 +010098 f_vty_config2(VTY, {"cs7 instance 0", "as ipa-as-dynamic-asp ipa"},
Harald Welte0db44132019-10-17 11:09:05 +020099 "point-code override patch-sccp disabled");
100
101 f_init_m3ua();
102 f_init_ipa();
103
Pau Espin Pedrol01ec0bf2019-11-07 14:50:07 +0100104 f_connect_ipa(3);
Harald Welte0db44132019-10-17 11:09:05 +0200105 f_M3UA_asp_up_act(0, omit, omit); // TODO: rctx
106
107 /* send a well-formed, encoded SCCP message via IPA */
Harald Welte67881ae2022-04-12 22:52:47 +0200108 var octetstring data := f_rnd_octstring_rnd_len(100);
Harald Welte0db44132019-10-17 11:09:05 +0200109 var SCCP_PAR_Address called := valueof(ts_SccpAddr_GT('1234'H));
110 var SCCP_PAR_Address calling := valueof(ts_SccpAddr_GT('5678'H));
111 var PDU_SCCP sccp := valueof(ts_SCCP_UDT(called, calling, data));
112 var octetstring sccp_enc := enc_PDU_SCCP(sccp);
Pau Espin Pedrol01ec0bf2019-11-07 14:50:07 +0100113 f_IPA_send(3, sccp_enc);
Harald Welte0db44132019-10-17 11:09:05 +0200114
115 /* expect to receive it via M3UA */
116 var template (present) M3UA_Protocol_Data rx_pd;
Harald Welte5b2ce612023-08-31 17:18:42 +0200117 rx_pd := tr_M3UA_protocol_data(pc_sender, pc_receiver, c_M3UA_SI_SCCP, '00'O, '00'O, ?, sccp_enc);
Harald Welte0db44132019-10-17 11:09:05 +0200118 f_M3UA_exp(0, tr_M3UA_DATA(rctx_receiver, rx_pd));
Pau Espin Pedrol05726dd2019-11-06 15:55:57 +0100119
120 f_clear_m3ua();
Harald Welte0db44132019-10-17 11:09:05 +0200121}
122
Harald Welte95e3d992021-04-25 14:27:44 +0200123/* test routing an SCCP message from IPA ASP to M3UA ASP using national network indicator */
124testcase TC_ipa_to_m3ua_ni() runs on IPA_M3UA_CT {
125 var OCT4 pc_sender := int2oct(5, 4);
126 var OCT4 rctx_receiver := int2oct(1023, 4);
127 var OCT4 pc_receiver := int2oct(23, 4);
128
129 f_init_common();
130 f_vty_config2(VTY, {"cs7 instance 0", "as ipa-as-dynamic-asp ipa"},
131 "point-code override patch-sccp disabled");
132
133 f_init_m3ua();
134 f_init_ipa();
135
136 f_connect_ipa(3);
137 f_M3UA_asp_up_act(0, omit, omit); // TODO: rctx
138
139 /* send a well-formed, encoded SCCP message via IPA */
Harald Welte67881ae2022-04-12 22:52:47 +0200140 var octetstring data := f_rnd_octstring_rnd_len(100);
Harald Welte95e3d992021-04-25 14:27:44 +0200141 var SCCP_PAR_Address called := valueof(ts_SccpAddr_GT('1234'H));
142 var SCCP_PAR_Address calling := valueof(ts_SccpAddr_GT('5678'H));
143 var PDU_SCCP sccp := valueof(ts_SCCP_UDT(called, calling, data));
144 var octetstring sccp_enc := enc_PDU_SCCP(sccp);
145 f_vty_config2(VTY, {"cs7 instance 0"}, "network-indicator national");
146 f_IPA_send(3, sccp_enc);
Harald Welte95e3d992021-04-25 14:27:44 +0200147
148 /* expect to receive it via M3UA */
149 var template (present) M3UA_Protocol_Data rx_pd;
150 rx_pd := tr_M3UA_protocol_data(pc_sender, pc_receiver, c_M3UA_SI_SCCP, c_M3UA_NI_NATIONAL,
Harald Welte5b2ce612023-08-31 17:18:42 +0200151 '00'O, ?, sccp_enc);
Harald Welte95e3d992021-04-25 14:27:44 +0200152 f_M3UA_exp(0, tr_M3UA_DATA(rctx_receiver, rx_pd));
Pau Espin Pedrol74d5dad2022-05-17 12:54:48 +0200153 f_vty_config2(VTY, {"cs7 instance 0"}, "network-indicator international");
Harald Welte95e3d992021-04-25 14:27:44 +0200154 f_clear_m3ua();
155}
156
157
Harald Welte0db44132019-10-17 11:09:05 +0200158/* test routing an SCCP message from IPA ASP to M3UA ASP while patching PC into SCCP addresses */
159testcase TC_ipa_to_m3ua_patch_sccp() runs on IPA_M3UA_CT {
160 var OCT4 pc_sender := int2oct(5, 4);
161 var OCT4 rctx_receiver := int2oct(1023, 4);
162 var OCT4 pc_receiver := int2oct(23, 4);
163
164 f_init_common();
Pau Espin Pedrol01ec0bf2019-11-07 14:50:07 +0100165 f_vty_config2(VTY, {"cs7 instance 0", "as ipa-as-dynamic-asp ipa"},
Harald Welte0db44132019-10-17 11:09:05 +0200166 "point-code override patch-sccp both");
167
168 f_init_m3ua();
169 f_init_ipa();
170
Pau Espin Pedrol01ec0bf2019-11-07 14:50:07 +0100171 f_connect_ipa(3);
Harald Welte0db44132019-10-17 11:09:05 +0200172 f_M3UA_asp_up_act(0, omit, omit); // TODO: rctx
173
174 /* send a well-formed, encoded SCCP message via IPA */
Harald Welte67881ae2022-04-12 22:52:47 +0200175 var octetstring data := f_rnd_octstring_rnd_len(100);
Harald Welte0db44132019-10-17 11:09:05 +0200176 var SCCP_PAR_Address called := valueof(ts_SccpAddr_GT('1234'H));
177 var SCCP_PAR_Address calling := valueof(ts_SccpAddr_GT('5678'H));
178 var PDU_SCCP sccp := valueof(ts_SCCP_UDT(called, calling, data));
Pau Espin Pedrol01ec0bf2019-11-07 14:50:07 +0100179 f_IPA_send(3, enc_PDU_SCCP(sccp));
Harald Welte0db44132019-10-17 11:09:05 +0200180
181 /* patch point codes into addresses */
182 called := valueof(ts_SccpAddr_PC_GT(oct2int(pc_receiver), '83'O, "mtp3_itu", '1234'H));
183 calling := valueof(ts_SccpAddr_PC_GT(oct2int(pc_sender), '83'O, "mtp3_itu", '5678'H));
184 var PDU_SCCP sccp_exp := valueof(ts_SCCP_UDT(called, calling, data));
185
186 /* expect to receive it via M3UA */
187 var template (present) M3UA_Protocol_Data rx_pd;
Harald Welte5b2ce612023-08-31 17:18:42 +0200188 rx_pd := tr_M3UA_protocol_data(pc_sender, pc_receiver, c_M3UA_SI_SCCP, '00'O, '00'O, ?,
Harald Welte0db44132019-10-17 11:09:05 +0200189 enc_PDU_SCCP(sccp_exp));
190 f_M3UA_exp(0, tr_M3UA_DATA(rctx_receiver, rx_pd));
Pau Espin Pedrol05726dd2019-11-06 15:55:57 +0100191
192 f_clear_m3ua();
Harald Welte0db44132019-10-17 11:09:05 +0200193}
194
195
196
197control {
198 /* M3UA <-> IPA Tests */
199 execute( TC_m3ua_to_ipa() );
200 execute( TC_ipa_to_m3ua() );
Harald Welte95e3d992021-04-25 14:27:44 +0200201 execute( TC_ipa_to_m3ua_ni() );
Harald Welte0db44132019-10-17 11:09:05 +0200202 execute( TC_ipa_to_m3ua_patch_sccp() );
203}
204
205
206
207}