blob: 99ad25202f0473f4c3d4214717daa33b03b70617 [file] [log] [blame]
Harald Welte0aa0abc2019-02-06 19:17:35 +01001module AbisOML_Types {
2
3/* AbisOML_Types, defining abstract TTCN-3 data types for the A-bis OML protocol.
4 *
5 * A-bis OML is a 3GP standard protocol used between BTS and BSC in a GSM network;
6 * it is specified in 3GPP TS 12.21.
7 *
8 * (C) 2019 by Harald Welte <laforge@gnumonks.org>
9 * All rights reserved.
10 *
11 * Released under the terms of the GNU General Public License, Version 2 or
12 * (at your option) any later version.
Harald Welte34b5a952019-05-27 11:54:11 +020013 *
14 * SPDX-License-Identifier: GPL-2.0-or-later
Harald Welte0aa0abc2019-02-06 19:17:35 +010015 */
16
17import from General_Types all;
18import from Osmocom_Types all;
19import from GSM_Types all;
20
21type enumerated OML_MessageDiscriminator {
22 ABIS_OM_MDISC_FOM ('80'H),
23 ABIS_OM_MDISC_MMI ('40'H),
24 ABIS_OM_MDISC_TRAU ('20'H),
25 ABIS_OM_MDISC_MANUF ('10'H)
26} with { variant "FIELDLENGTH(8)" };
27
28type enumerated OML_Placement {
29 ABIS_OM_PLACEMENT_ONLY ('80'H),
30 ABIS_OM_PLACEMENT_FIRST ('40'H),
31 ABIS_OM_PLACEMENT_MIDDLE ('20'H),
32 ABIS_OM_PLACEMENT_LAST ('10'H)
33} with { variant "FIELDLENGTH(8)" };
34
35type union OML_Union {
36 OML_FOM fom,
37 OML_MANUF manuf,
38 octetstring other
39};
40
41type record OML_PDU {
42 OML_MessageDiscriminator mdisc,
43 OML_Placement placement,
44 uint8_t sequence,
45 OML_Union u
46} with {
47 variant (u) "CROSSTAG(
48 fom, mdisc = ABIS_OM_MDISC_FOM;
49 manuf, mdisc = ABIS_OM_MDISC_MANUF;
50 other, OTHERWISE;
51 )" };
52
53
54type record OML_FOM_ObjectInstance {
55 uint8_t bts_nr,
56 uint8_t trx_nr,
57 uint8_t ts_nr
58};
59
60
61type record OML_FOM_Header {
62 OML_FOM_MessageType msg_type,
63 OML_FOM_ObjectClass obj_class,
64 OML_FOM_ObjectInstance obj_inst
65};
66
67/* Section 9.1 */
68type enumerated OML_FOM_MessageType {
69 /* SW Download Management Messages */
70 NM_MT_LOAD_INIT ('01'H),
71 NM_MT_LOAD_INIT_ACK ('02'H),
72 NM_MT_LOAD_INIT_NACK ('03'H),
73 NM_MT_LOAD_SEG ('04'H),
74 NM_MT_LOAD_SEG_ACK ('05'H),
75 NM_MT_LOAD_ABORT ('06'H),
76 NM_MT_LOAD_END ('07'H),
77 NM_MT_LOAD_END_ACK ('08'H),
78 NM_MT_LOAD_END_NACK ('09'H),
79 NM_MT_SW_ACT_REQ ('0a'H),
80 NM_MT_SW_ACT_REQ_ACK ('0b'H),
81 NM_MT_SW_ACT_REQ_NACK ('0c'H),
82 NM_MT_ACTIVATE_SW ('0d'H),
83 NM_MT_ACTIVATE_SW_ACK ('0e'H),
84 NM_MT_ACTIVATE_SW_NACK ('0f'H),
85 NM_MT_SW_ACTIVATED_REP ('10'H),
86
87 /* A-bis Interface Management Messages */
88 NM_MT_ESTABLISH_TEI ('21'H),
89 NM_MT_ESTABLISH_TEI_ACK ('22'H),
90 NM_MT_ESTABLISH_TEI_NACK ('23'H),
91 NM_MT_CONN_TERR_SIGN ('24'H),
92 NM_MT_CONN_TERR_SIGN_ACK ('25'H),
93 NM_MT_CONN_TERR_SIGN_NACK ('26'H),
94 NM_MT_DISC_TERR_SIGN ('27'H),
95 NM_MT_DISC_TERR_SIGN_ACK ('28'H),
96 NM_MT_DISC_TERR_SIGN_NACK ('29'H),
97 NM_MT_CONN_TERR_TRAF ('2a'H),
98 NM_MT_CONN_TERR_TRAF_ACK ('2b'H),
99 NM_MT_CONN_TERR_TRAF_NACK ('2c'H),
100 NM_MT_DISC_TERR_TRAF ('2d'H),
101 NM_MT_DISC_TERR_TRAF_ACK ('2e'H),
102 NM_MT_DISC_TERR_TRAF_NACK ('2f'H),
Pau Espin Pedrold0ec1492020-10-16 14:54:14 +0200103 /* Transmission Management Messages */
Harald Welte0aa0abc2019-02-06 19:17:35 +0100104 NM_MT_CONN_MDROP_LINK ('31'H),
105 NM_MT_CONN_MDROP_LINK_ACK ('32'H),
106 NM_MT_CONN_MDROP_LINK_NACK ('33'H),
107 NM_MT_DISC_MDROP_LINK ('34'H),
108 NM_MT_DISC_MDROP_LINK_ACK ('35'H),
109 NM_MT_DISC_MDROP_LINK_NACK ('36'H),
110 /* Air Interface Management Messages */
111 NM_MT_SET_BTS_ATTR ('41'H),
112 NM_MT_SET_BTS_ATTR_ACK ('42'H),
113 NM_MT_SET_BTS_ATTR_NACK ('43'H),
114 NM_MT_SET_RADIO_ATTR ('44'H),
115 NM_MT_SET_RADIO_ATTR_ACK ('45'H),
116 NM_MT_SET_RADIO_ATTR_NACK ('46'H),
117 NM_MT_SET_CHAN_ATTR ('47'H),
118 NM_MT_SET_CHAN_ATTR_ACK ('48'H),
119 NM_MT_SET_CHAN_ATTR_NACK ('49'H),
120 /* Test Management Messages */
121 NM_MT_PERF_TEST ('51'H),
122 NM_MT_PERF_TEST_ACK ('52'H),
123 NM_MT_PERF_TEST_NACK ('53'H),
124 NM_MT_TEST_REP ('54'H),
125 NM_MT_SEND_TEST_REP ('55'H),
126 NM_MT_SEND_TEST_REP_ACK ('56'H),
127 NM_MT_SEND_TEST_REP_NACK ('57'H),
128 NM_MT_STOP_TEST ('58'H),
129 NM_MT_STOP_TEST_ACK ('59'H),
130 NM_MT_STOP_TEST_NACK ('5a'H),
131 /* State Management and Event Report Messages */
132 NM_MT_STATECHG_EVENT_REP ('61'H),
133 NM_MT_FAILURE_EVENT_REP ('62'H),
134 NM_MT_STOP_EVENT_REP ('63'H),
135 NM_MT_STOP_EVENT_REP_ACK ('64'H),
136 NM_MT_STOP_EVENT_REP_NACK ('65'H),
137 NM_MT_REST_EVENT_REP ('66'H),
138 NM_MT_REST_EVENT_REP_ACK ('67'H),
139 NM_MT_REST_EVENT_REP_NACK ('68'H),
140 NM_MT_CHG_ADM_STATE ('69'H),
141 NM_MT_CHG_ADM_STATE_ACK ('6a'H),
142 NM_MT_CHG_ADM_STATE_NACK ('6b'H),
143 NM_MT_CHG_ADM_STATE_REQ ('6c'H),
144 NM_MT_CHG_ADM_STATE_REQ_ACK ('6d'H),
145 NM_MT_CHG_ADM_STATE_REQ_NACK ('6e'H),
146
147 NM_MT_REP_OUTST_ALARMS ('93'H),
148 NM_MT_REP_OUTST_ALARMS_ACK ('94'H),
149 NM_MT_REP_OUTST_ALARMS_NACK ('95'H),
150
151 /* Equipment Management Messages */
152 NM_MT_CHANGEOVER ('71'H),
153 NM_MT_CHANGEOVER_ACK ('72'H),
154 NM_MT_CHANGEOVER_NACK ('73'H),
155 NM_MT_OPSTART ('74'H),
156 NM_MT_OPSTART_ACK ('75'H),
157 NM_MT_OPSTART_NACK ('76'H),
158 NM_MT_REINIT ('77'H),
159 NM_MT_REINIT_ACK ('78'H),
160 NM_MT_REINIT_NACK ('79'H),
161 NM_MT_SET_SITE_OUT ('7a'H),
162 NM_MT_SET_SITE_OUT_ACK ('7b'H),
163 NM_MT_SET_SITE_OUT_NACK ('7c'H),
164
165 NM_MT_CHG_HW_CONF ('90'H),
166 NM_MT_CHG_HW_CONF_ACK ('91'H),
167 NM_MT_CHG_HW_CONF_NACK ('92'H),
168
169 /* Measurement Management Messages */
170 NM_MT_MEAS_RES_REQ ('8a'H),
171 NM_MT_MEAS_RES_RESP ('8b'H),
172 NM_MT_STOP_MEAS ('8c'H),
173 NM_MT_START_MEAS ('8d'H),
174
175 /* Other Messages */
176 NM_MT_GET_ATTR ('81'H),
177 NM_MT_GET_ATTR_RESP ('82'H),
178 NM_MT_GET_ATTR_NACK ('83'H),
179 NM_MT_SET_ALARM_THRES ('84'H),
180 NM_MT_SET_ALARM_THRES_ACK ('85'H),
181 NM_MT_SET_ALARM_THRES_NACK ('86'H),
182
183 /* IPA specific messages */
184 NM_MT_IPACC_RESTART ('87'H),
185 NM_MT_IPACC_RESTART_ACK ('88'H),
186 NM_MT_IPACC_RESTART_NACK ('89'H),
187
188 NM_MT_IPACC_RSL_CONNECT ('e0'H),
189 NM_MT_IPACC_RSL_CONNECT_ACK ('e1'H),
190 NM_MT_IPACC_RSL_CONNECT_NACK ('e2'H),
191 NM_MT_IPACC_RSL_DISCONNECT ('e3'H),
192 NM_MT_IPACC_RSL_DISCONNECT_ACK ('e4'H),
193 NM_MT_IPACC_RSL_DISCONNECT_NACK ('e5'H),
194 NM_MT_IPACC_CONN_TRAF ('e6'H),
195 NM_MT_IPACC_CONN_TRAF_ACK ('e7'H),
196 NM_MT_IPACC_CONN_TRAF_NACK ('e8'H),
197 NM_MT_IPACC_DEF_BOOT_SW ('ec'H),
198 NM_MT_IPACC_DEF_BOOT_SW_ACK ('ed'H),
199 MN_MT_IPACC_DEF_BOOT_SW_NACK ('ee'H),
200 NM_MT_IPACC_SET_NVATTR ('ef'H),
201 NM_MT_IPACC_SET_NVATTR_ACK ('f0'H),
202 NM_MT_IPACC_SET_NVATTR_NACK ('f1'H),
203 NM_MT_IPACC_GET_NVATTR ('f2'H),
204 NM_MT_IPACC_GET_NVATTR_ACK ('f3'H),
205 NM_MT_IPACC_GET_NVATTR_NACK ('f4'H),
206 NM_MT_IPACC_SET_ATTR ('f5'H),
207 NM_MT_IPACC_SET_ATTR_ACK ('f6'H),
208 NM_MT_IPACC_SET_ATTR_NACK ('f7'H)
209
210} with { variant "FIELDLENGTH(8)" };
211
212/* Section 9.2 */
213type enumerated OML_FOM_ObjectClass {
214 NM_OC_SITE_MANAGER ('00'H),
215 NM_OC_BTS ('01'H),
216 NM_OC_RADIO_CARRIER ('02'H),
217 NM_OC_CHANNEL ('03'H),
218 NM_OC_BASEB_TRANSC ('04'H),
219
220 NM_OC_IPAC_E1_TRUNK ('0e'H),
221 NM_OC_IPAC_E1_PORT ('0f'H),
222 NM_OC_IPAC_E1_CHAN ('10'H),
223 NM_OC_IPAC_CLK_MODULE ('22'H),
224
225 NM_OC_GPRS_NSE ('f0'H),
226 NM_OC_GPRS_CELL ('f1'H),
227 NM_OC_GPRS_NSVC ('f2'H),
228
229 NM_OC_NULL ('ff'H)
230} with { variant "FIELDLENGTH(8)" };
231
232/* Section 9.4 */
233type enumerated OML_FOM_IE_Type {
234 NM_ATT_ABIS_CHANNEL ('01'H),
235 NM_ATT_ADD_INFO ('02'H),
236 NM_ATT_ADD_TEXT ('03'H),
237 NM_ATT_ADM_STATE ('04'H),
238 NM_ATT_ARFCN_LIST ('05'H),
239 NM_ATT_AUTON_REPORT ('06'H),
240 NM_ATT_AVAIL_STATUS ('07'H),
241 NM_ATT_BCCH_ARFCN ('08'H),
242 NM_ATT_BSIC ('09'H),
243 NM_ATT_BTS_AIR_TIMER ('0a'H),
244 NM_ATT_CCCH_L_I_P ('0b'H),
245 NM_ATT_CCCH_L_T ('0c'H),
246 NM_ATT_CHAN_COMB ('0d'H),
247 NM_ATT_CONN_FAIL_CRIT ('0e'H),
248 NM_ATT_DEST ('0f'H),
249 /* res */
250 NM_ATT_EVENT_TYPE ('11'H),
251 NM_ATT_FILE_ID ('12'H),
252 NM_ATT_FILE_VERSION ('13'H),
253 NM_ATT_GSM_TIME ('14'H),
254 NM_ATT_HSN ('15'H),
255 NM_ATT_HW_CONFIG ('16'H),
256 NM_ATT_HW_DESC ('17'H),
257 NM_ATT_INTAVE_PARAM ('18'H),
258 NM_ATT_INTERF_BOUND ('19'H),
259 NM_ATT_LIST_REQ_ATTR ('1a'H),
260 NM_ATT_MAIO ('1b'H),
261 NM_ATT_MANUF_STATE ('1c'H),
262 NM_ATT_MANUF_THRESH ('1d'H),
263 NM_ATT_MANUF_ID ('1e'H),
264 NM_ATT_MAX_TA ('1f'H),
265 NM_ATT_MDROP_LINK ('20'H),
266 NM_ATT_MDROP_NEXT ('21'H),
267 NM_ATT_NACK_CAUSES ('22'H),
268 NM_ATT_NY1 ('23'H),
269 NM_ATT_OPER_STATE ('24'H),
270 NM_ATT_OVERL_PERIOD ('25'H),
271 NM_ATT_PHYS_CONF ('26'H),
272 NM_ATT_POWER_CLASS ('27'H),
273 NM_ATT_POWER_THRESH ('28'H),
274 NM_ATT_PROB_CAUSE ('29'H),
275 NM_ATT_RACH_B_THRESH ('2a'H),
276 NM_ATT_LDAVG_SLOTS ('2b'H),
277 NM_ATT_RAD_SUBC ('2c'H),
278 NM_ATT_RF_MAXPOWR_R ('2d'H),
279 NM_ATT_SITE_INPUTS ('2e'H),
280 NM_ATT_SITE_OUTPUTS ('2f'H),
281 NM_ATT_SOURCE ('30'H),
282 NM_ATT_SPEC_PROB ('31'H),
283 NM_ATT_START_TIME ('32'H),
284 NM_ATT_T200 ('33'H),
285 NM_ATT_TEI ('34'H),
286 NM_ATT_TEST_DUR ('35'H),
287 NM_ATT_TEST_NO ('36'H),
288 NM_ATT_TEST_REPORT ('37'H),
289 NM_ATT_VSWR_THRESH ('38'H),
290 NM_ATT_WINDOW_SIZE ('39'H),
291 /* res */
292 NM_ATT_BS11_RSSI_OFFS ('3d'H),
293 NM_ATT_BS11_TXPWR ('3e'H),
294 NM_ATT_BS11_DIVERSITY ('3f'H),
295 /* res */
296 NM_ATT_TSC ('40'H),
297 NM_ATT_SW_CONFIG ('41'H),
298 NM_ATT_SW_DESCR ('42'H),
299 NM_ATT_SEVERITY ('43'H),
300 NM_ATT_GET_ARI ('44'H),
301 NM_ATT_HW_CONF_CHG ('45'H),
302 NM_ATT_OUTST_ALARM ('46'H),
303 NM_ATT_FILE_DATA ('47'H),
304 NM_ATT_MEAS_RES ('48'H),
305 NM_ATT_MEAS_TYPE ('49'H),
306 /* res */
307 NM_ATT_BS11_ESN_FW_CODE_NO ('4c'H),
308 NM_ATT_BS11_ESN_HW_CODE_NO ('4f'H),
309 /* res */
310 NM_ATT_BS11_ESN_PCB_SERIAL ('55'H),
311 NM_ATT_BS11_EXCESSIVE_DISTANCE ('58'H),
312 NM_ATT_BS11_ALL_TEST_CATG ('60'H),
313 NM_ATT_BS11_BTSLS_HOPPING ('61'H),
314 NM_ATT_BS11_CELL_ALLOC_NR ('62'H),
315 NM_ATT_BS11_CELL_GLOBAL_ID ('63'H),
316
317 NM_ATT_BS11_ENA_INTERF_CLASS ('66'H),
318 NM_ATT_BS11_ENA_INT_INTEC_HANDO ('67'H),
319 NM_ATT_BS11_ENA_INT_INTRC_HANDO ('68'H),
320 NM_ATT_BS11_ENA_MS_PWR_CTRL ('69'H),
321 NM_ATT_BS11_ENA_PWR_BDGT_HO ('6a'H),
322 NM_ATT_BS11_ENA_PWR_CTRL_RLFW ('6b'H),
323 NM_ATT_BS11_ENA_RXLEV_HO ('6c'H),
324 NM_ATT_BS11_ENA_RXQUAL_HO ('6d'H),
325 NM_ATT_BS11_FACCH_QUAL ('6e'H),
326
327 NM_ATT_IPACC_DST_IP ('80'H),
328 NM_ATT_IPACC_DST_IP_PORT ('81'H),
329 NM_ATT_IPACC_SSRC ('82'H),
330 NM_ATT_IPACC_RTP_PAYLD_TYPE ('83'H),
331 NM_ATT_IPACC_BASEB_ID ('84'H),
332 NM_ATT_IPACC_STREAM_ID ('85'H),
333 NM_ATT_IPACC_NV_FLAGS ('86'H),
334 NM_ATT_IPACC_FREQ_CTRL ('87'H),
335 NM_ATT_IPACC_PRIM_OML_CFG ('88'H),
336 NM_ATT_IPACC_SEC_OML_CFG ('89'H),
337 NM_ATT_IPACC_IP_IF_CFG ('8a'H),
338 NM_ATT_IPACC_IP_GW_CFG ('8b'H),
339 NM_ATT_IPACC_IN_SERV_TIME ('8c'H),
340 NM_ATT_IPACC_TRX_BTS_ASS ('8d'H),
341 NM_ATT_IPACC_LOCATION ('8e'H), /* string describing location */
342 NM_ATT_IPACC_PAGING_CFG ('8f'H),
343 NM_ATT_IPACC_FILE_DATA ('90'H),
344 NM_ATT_IPACC_UNIT_ID ('91'H), /* Site/BTS/TRX */
345 NM_ATT_IPACC_PARENT_UNIT_ID ('92'H),
346 NM_ATT_IPACC_UNIT_NAME ('93'H), /* default: nbts-<mac-as-string> */
347 NM_ATT_IPACC_SNMP_CFG ('94'H),
348 NM_ATT_IPACC_PRIM_OML_CFG_LIST ('95'H),
349 NM_ATT_IPACC_PRIM_OML_FB_TOUT ('96'H),
350 NM_ATT_IPACC_CUR_SW_CFG ('97'H),
351 NM_ATT_IPACC_TIMING_BUS ('98'H),
352 NM_ATT_IPACC_CGI ('99'H),
353 NM_ATT_IPACC_RAC ('9a'H),
354 NM_ATT_IPACC_OBJ_VERSION ('9b'H),
355 NM_ATT_IPACC_GPRS_PAGING_CFG ('9c'H),
356 NM_ATT_IPACC_NSEI ('9d'H),
357 NM_ATT_IPACC_BVCI ('9e'H),
358 NM_ATT_IPACC_NSVCI ('9f'H),
359 NM_ATT_IPACC_NS_CFG ('a0'H),
360 NM_ATT_IPACC_BSSGP_CFG ('a1'H),
361 NM_ATT_IPACC_NS_LINK_CFG ('a2'H),
362 NM_ATT_IPACC_RLC_CFG ('a3'H),
363 NM_ATT_IPACC_ALM_THRESH_LIST ('a4'H),
364 NM_ATT_IPACC_MONIT_VAL_LIST ('a5'H),
365 NM_ATT_IPACC_TIB_CONTROL ('a6'H),
366 NM_ATT_IPACC_SUPP_FEATURES ('a7'H),
367 NM_ATT_IPACC_CODING_SCHEMES ('a8'H),
368 NM_ATT_IPACC_RLC_CFG_2 ('a9'H),
369 NM_ATT_IPACC_HEARTB_TOUT ('aa'H),
370 NM_ATT_IPACC_UPTIME ('ab'H),
371 NM_ATT_IPACC_RLC_CFG_3 ('ac'H),
372 NM_ATT_IPACC_SSL_CFG ('ad'H),
373 NM_ATT_IPACC_SEC_POSSIBLE ('ae'H),
374 NM_ATT_IPACC_IML_SSL_STATE ('af'H),
375 NM_ATT_IPACC_REVOC_DATE ('b0'H),
376
377
378/*
379 NM_ATT_BS11_RF_RES_IND_PER ('8f'H),
380
381 NM_ATT_BS11_RX_LEV_MIN_CELL ('90'H),
382 NM_ATT_BS11_ABIS_EXT_TIME ('91'H),
383 NM_ATT_BS11_TIMER_HO_REQUEST ('92'H),
384 NM_ATT_BS11_TIMER_NCELL ('93'H),
385 NM_ATT_BS11_TSYNC ('94'H),
386 NM_ATT_BS11_TTRAU ('95'H),
387 NM_ATT_BS11_EMRG_CFG_MEMBER ('9b'H),
388 NM_ATT_BS11_TRX_AREA ('9f'H),
389
390 NM_ATT_BS11_BCCH_RECONF ('d7'H),
391 NM_ATT_BS11_BIT_ERR_THESH ('a0'H),
392 NM_ATT_BS11_BOOT_SW_VERS ('a1'H),
393 NM_ATT_BS11_CCLK_ACCURACY ('a3'H),
394 NM_ATT_BS11_CCLK_TYPE ('a4'H),
395 NM_ATT_BS11_INP_IMPEDANCE ('aa'H),
396 NM_ATT_BS11_L1_PROT_TYPE ('ab'H),
397 NM_ATT_BS11_LINE_CFG ('ac'H),
398 NM_ATT_BS11_LI_PORT_1 ('ad'H),
399 NM_ATT_BS11_LI_PORT_2 ('ae'H),
400
401 NM_ATT_BS11_L1_REM_ALM_TYPE ('b0'H),
402 NM_ATT_BS11_SW_LOAD_INTENDED ('bb'H),
403 NM_ATT_BS11_SW_LOAD_SAFETY ('bc'H),
404 NM_ATT_BS11_SW_LOAD_STORED ('bd'H),
405
406 NM_ATT_BS11_VENDOR_NAME ('c1'H),
407 NM_ATT_BS11_HOPPING_MODE ('c5'H),
408 NM_ATT_BS11_LMT_LOGON_SESSION ('c6'H),
409 NM_ATT_BS11_LMT_LOGIN_TIME ('c7'H),
410 NM_ATT_BS11_LMT_USER_ACC_LEV ('c8'H),
411 NM_ATT_BS11_LMT_USER_NAME ('c9'H),
412
413 NM_ATT_BS11_L1_CONTROL_TS ('d8'H),
414 NM_ATT_BS11_RADIO_MEAS_GRAN ('dc'H),
415 NM_ATT_BS11_RADIO_MEAS_REP ('dd'H),
416
417 NM_ATT_BS11_SH_LAPD_INT_TIMER ('e8'H),
418
419 NM_ATT_BS11_BTS_STATE ('f0'H),
420 NM_ATT_BS11_E1_STATE ('f1'H),
421 NM_ATT_BS11_PLL ('f2'H),
422 NM_ATT_BS11_RX_OFFSET ('f3'H),
423 NM_ATT_BS11_ANT_TYPE ('f4'H),
424 NM_ATT_BS11_PLL_MODE ('fc'H),
425 NM_ATT_BS11_PASSWORD ('fd'H),
426*/
427
428 /* osmocom (osmo-bts) specific attributes, used in combination
429 * with the "org.osmocom" manufacturer identification */
430 NM_ATT_OSMO_REDUCEPOWER ('fe'H) /* TLV_TYPE_TV */
431
432} with { variant "FIELDLENGTH(8)" };
433
434/* Section 9.4.4 */
435type enumerated OML_FOM_AdministrativeState {
436 NM_STATE_LOCKED ('01'H),
437 NM_STATE_UNLOCKED ('02'H),
438 NM_STATE_SHUTDOWN ('03'H),
439 NM_STATE_NULL ('ff'H)
440} with { variant "FIELDLENGTH(8)" };
441
442/* Section 9.4.7 */
443type enumerated OML_FOM_AvailabilityStatus {
444 NM_AVSTATE_IN_TEST (1),
445 NM_AVSTATE_POWER_OFF (2),
446 NM_AVSTATE_OFF_LINE (3),
447 NM_AVSTATE_DEPENDENCY (5),
448 NM_AVSTATE_DEGRADED (6),
449 NM_AVSTATE_NOT_INSTALLED (7),
450 NM_AVSTATE_OK (255)
451} with { variant "FIELDLENGTH(8)" };
452
453type enumerated OML_FOM_OperationalState {
454 NM_OPSTATE_DISABLED (1),
455 NM_OPSTATE_ENABLED (2),
456 NM_OPSTATE_NULL (255)
457} with { variant "FIELDLENGTH(8)" };
458
459/* Section 9.4.13 */
460type enumerated OML_ChannelCombination {
461 NM_CHANC_TCHFull ('00'H), /* TCH/F + TCH/H + SACCH/TF */
462 NM_CHANC_TCHHalf ('01'H), /* TCH/H(0,1) + FACCH/H(0,1) + SACCH/TH(0,1) */
463 NM_CHANC_TCHHalf2 ('02'H), /* TCH/H(0) + FACCH/H(0) + SACCH/TH(0) + TCH/H(1) */
464 NM_CHANC_SDCCH ('03'H), /* SDCCH/8 + SACCH/8 */
465 NM_CHANC_mainBCCH ('04'H), /* FCCH + SCH + BCCH + CCCH */
466 NM_CHANC_BCCHComb ('05'H), /* FCCH + SCH + BCCH + CCCH + SDCCH/4 + SACCH/C4 */
467 NM_CHANC_BCCH ('06'H), /* BCCH + CCCH */
468 NM_CHANC_BCCH_CBCH ('07'H), /* CHANC_BCCHComb + CBCH */
469 NM_CHANC_SDCCH_CBCH ('08'H), /* CHANC_SDCCH8 + CBCH */
470 /* ip.access + Osmocom */
471 NM_CHANC_IPAC_bPDCH ('0b'H), /* PBCCH + PCCCH + PDTCH/F + PACCH/F + PTCCH/F */
472 NM_CHANC_IPAC_cPDCH ('0c'H), /* PBCCH + PDTCH/F + PACCH/F + PTCCH/F */
473 NM_CHANC_IPAC_PDCH ('0d'H), /* PDTCH/F + PACCH/F + PTCCH/F */
474 NM_CHANC_IPAC_TCHFull_PDCH ('80'H),
475 NM_CHANC_IPAC_TCHFull_TCHHalf ('81'H),
476 /* Osmocom */
477 NM_CHANC_OSMO_TCHFull_TCHHalf_PDCH ('90'H)
478} with { variant "FIELDLENGTH(8)" };
479
480/* Section 9.4.16 */
481type enumerated OML_FOM_EventType {
482 NM_EVT_COMM_FAIL (1),
483 NM_EVT_QOS_FAIL (2),
484 NM_EVT_PROC_FAIL (3),
485 NM_EVT_EQUIP_FAIL (4),
486 NM_EVT_ENV_FAIL (5)
487} with { variant "FIELDLENGTH(8)" };
488
489/* Section 9.4.63 */
490type enumerated OML_FOM_Severity {
491 NM_SEVER_CEASED (0),
492 NM_SEVER_CRITICAL (1),
493 NM_SEVER_MAJOR (2),
494 NM_SEVER_MINOR (3),
495 NM_SEVER_WARNING (4),
496 NM_SEVER_INDETERMINATE (5)
497} with { variant "FIELDLENGTH(8)" };
498
499/* Section 9.4.36 */
500type enumerated OML_FOM_NackCause {
501 /* General Nack Causes */
502 NM_NACK_INCORR_STRUCT ('01'H),
503 NM_NACK_MSGTYPE_INVAL ('02'H),
504 NM_NACK_OBJCLASS_INVAL ('05'H),
505 NM_NACK_OBJCLASS_NOTSUPP ('06'H),
506 NM_NACK_BTSNR_UNKN ('07'H),
507 NM_NACK_TRXNR_UNKN ('08'H),
508 NM_NACK_OBJINST_UNKN ('09'H),
509 NM_NACK_ATTRID_INVAL ('0c'H),
510 NM_NACK_ATTRID_NOTSUPP ('0d'H),
511 NM_NACK_PARAM_RANGE ('0e'H),
512 NM_NACK_ATTRLIST_INCONSISTENT ('0f'H),
513 NM_NACK_SPEC_IMPL_NOTSUPP ('10'H),
514 NM_NACK_CANT_PERFORM ('11'H),
515 /* Specific Nack Causes */
516 NM_NACK_RES_NOTIMPL ('19'H),
517 NM_NACK_RES_NOTAVAIL ('1a'H),
518 NM_NACK_FREQ_NOTAVAIL ('1b'H),
519 NM_NACK_TEST_NOTSUPP ('1c'H),
520 NM_NACK_CAPACITY_RESTR ('1d'H),
521 NM_NACK_PHYSCFG_NOTPERFORM ('1e'H),
522 NM_NACK_TEST_NOTINIT ('1f'H),
523 NM_NACK_PHYSCFG_NOTRESTORE ('20'H),
524 NM_NACK_TEST_NOSUCH ('21'H),
525 NM_NACK_TEST_NOSTOP ('22'H),
526 NM_NACK_MSGINCONSIST_PHYSCFG ('23'H),
527 NM_NACK_FILE_INCOMPLETE ('25'H),
528 NM_NACK_FILE_NOTAVAIL ('26'H),
529 NM_NACK_FILE_NOTACTIVATE ('27'H),
530 NM_NACK_REQ_NOT_GRANT ('28'H),
531 NM_NACK_WAIT ('29'H),
532 NM_NACK_NOTH_REPORT_EXIST ('2a'H),
533 NM_NACK_MEAS_NOTSUPP ('2b'H),
534 NM_NACK_MEAS_NOTSTART ('2c'H)
535} with { variant "FIELDLENGTH(8)" };
536
537
538
539type record OML_FOM {
540 uint8_t len,
541 OML_FOM_Header hdr,
542 OML_FOM_IE_List ies optional
543} with { variant (len) "LENGTHTO(hdr,ies)" };
544
545type record OML_IE_LV {
546 uint8_t len,
547 octetstring payload
548} with { variant (len) "LENGTHTO(payload)" };
549
550type record OML_IE_L16V {
551 uint16_t len,
552 octetstring payload
553} with { variant (len) "LENGTHTO(payload)" };
554
555template (value) OML_IE_L16V ts_OML_IE_L16V(template (value) uint16_t len, template (value) octetstring payload) := {
556 len := len,
557 payload := payload
558}
559template OML_IE_L16V tr_OML_IE_L16V(template uint16_t len, template octetstring payload) := {
560 len := len,
561 payload := payload
562}
563
564
565type record OML_IE_AvailStatus {
566 uint16_t len,
567 OML_FOM_AvailabilityStatus avail_status
568} with { variant (len) "LENGTHTO(avail_status)" };
569
570/* Section 9.4.1 */
571type record OML_FOM_AbisChannel {
572 uint8_t bts_port_nr,
573 uint8_t timeslot_nr,
574 OML_FOM_Subslot subslot_nr
575};
576type enumerated OML_FOM_Subslot {
577 NM_SUBSLOT_A (0),
578 NM_SUBSLOT_B (1),
579 NM_SUBSLOT_C (2),
580 NM_SUBSLOT_D (3),
581 NM_SUBSLOT_64k (255)
582} with { variant "FIELDLENGTH(8)" };
583
584/* Section 9.4.5 */
585type record of uint16_t OML_ArfcnList;
586type record OML_IE_ArfcnList {
587 uint16_t len,
588 OML_ArfcnList arfcn_list
589};
590
591/* Section 9.4.25 */
592type record length(6) of uint8_t OML_FOM_InterfLevBoundaries;
593
594/* Section 9.4.42 */
595type record length(3) of uint8_t OML_FOM_PowerOuthputThresholds;
596
597/* Section 9.4.43 */
598type enumerated OML_FOM_ProbableCauseType {
599 NM_PCAUSE_T_X721 (1),
600 NM_PCAUSE_T_GSM (2),
601 NM_PCAUSE_T_MANUF (3)
602} with { variant "FIELDLENGTH(8)" };
603type record OML_FOM_ProbableCause {
604 OML_FOM_ProbableCauseType cause_type,
605 OCT2 cause_value
606};
607
608/* Section 9.4.53 */
609type record OML_FOM_T200 {
610 uint8_t sdcch_5ms,
611 uint8_t facch_f_5ms,
612 uint8_t facch_h_5ms,
613 uint8_t sacch_tch_sapi0_10ms,
614 uint8_t sacch_sdcch_10ms,
615 uint8_t sdcch_sapi3_5ms,
616 uint8_t sacch_rch_sapi3_10ms
617};
618
Pau Espin Pedrol81a55e62021-06-14 13:43:16 +0200619/* Section 9.4.64 */
620type record OML_FOM_ARI {
621 uint16_t len,
622 uint8_t non_reported_attr_len,
623 set of uint8_t non_reported_attr optional,
624 OML_FOM_IE_List ies optional
625} with { variant (len) "LENGTHTO(non_reported_attr_len,non_reported_attr,ies)"
626 variant (non_reported_attr_len) "LENGTHTO(non_reported_attr)" };
627
Harald Welte0aa0abc2019-02-06 19:17:35 +0100628type union OML_FOM_IE_Body {
629 OML_FOM_AbisChannel abis_channel,
630 OML_FOM_AdministrativeState adm_state,
631 OCT1 auton_report,
632 uint16_t bcch_arfcn,
633 uint8_t bsic,
634 uint8_t air_timer,
635 uint8_t load_ind_period,
636 uint8_t load_threshold,
637 OML_ChannelCombination chan_comb,
638 OML_FOM_EventType event_type,
639 uint16_t gsm_time,
640 uint8_t hsn,
641 uint8_t intave_param,
642 OML_FOM_InterfLevBoundaries interf_bound,
643 uint8_t maio,
644 uint8_t manuf_state,
645 uint8_t max_ta,
646 OML_FOM_NackCause nack_causes,
647 uint8_t ny1,
648 OML_FOM_OperationalState opstate,
649 uint8_t power_class,
650 OML_FOM_PowerOuthputThresholds power_thresh,
651 OML_FOM_ProbableCause prob_cause,
652 uint8_t rach_b_thresh,
653 uint16_t loadavg_slots,
654 uint8_t radio_subch,
655 uint8_t rf_maxpwr_r,
656 uint8_t spec_prob,
657 uint16_t start_time,
658 OML_FOM_T200 t200,
659 uint8_t tei,
660 uint8_t test_no,
661 OCT2 vswr_thresh,
662 uint8_t window_size,
663 uint8_t tsc,
664 OML_FOM_Severity severity,
665 uint8_t outst_alarm,
666 uint8_t meas_type,
667
668 OML_IE_AvailStatus avail_status,
669 OML_IE_ArfcnList arfcn_list,
670
671 uint32_t ip,
672 uint16_t portnr,
673 uint8_t stream_id,
674 OCT6 sec_oml_cfg,
675 OCT8 ip_if_cfg,
676 OCT12 ip_gw_cfg,
677 uint32_t in_serv_time,
678 uint16_t paging_cfg,
679 OCT2 freq_ctrl,
680
Pau Espin Pedrol81a55e62021-06-14 13:43:16 +0200681 OML_FOM_ARI ari,
682
Harald Welte0aa0abc2019-02-06 19:17:35 +0100683 OML_IE_L16V other
684};
685
686type record OML_FOM_IE {
687 OML_FOM_IE_Type iei,
688 OML_FOM_IE_Body body
689} with { variant (body) "CROSSTAG(
690 abis_channel, iei = NM_ATT_ABIS_CHANNEL;
691 adm_state, iei = NM_ATT_ADM_STATE;
692 auton_report, iei = NM_ATT_AUTON_REPORT;
693 bcch_arfcn, iei = NM_ATT_BCCH_ARFCN;
694 bsic, iei = NM_ATT_BSIC;
695 air_timer, iei = NM_ATT_BTS_AIR_TIMER;
696 load_ind_period, iei = NM_ATT_CCCH_L_I_P;
697 load_threshold, iei = NM_ATT_CCCH_L_T;
698 chan_comb, iei = NM_ATT_CHAN_COMB;
699 event_type, iei = NM_ATT_EVENT_TYPE;
700 gsm_time, iei = NM_ATT_GSM_TIME;
701 hsn, iei = NM_ATT_HSN;
702 intave_param, iei = NM_ATT_INTAVE_PARAM;
703 interf_bound, iei = NM_ATT_INTERF_BOUND;
704 maio, iei = NM_ATT_MAIO;
705 manuf_state, iei = NM_ATT_MANUF_STATE;
706 max_ta, iei = NM_ATT_MAX_TA;
707 nack_causes, iei = NM_ATT_NACK_CAUSES;
708 ny1, iei = NM_ATT_NY1;
709 opstate, iei = NM_ATT_OPER_STATE;
710 power_class, iei = NM_ATT_POWER_CLASS;
711 power_thresh, iei = NM_ATT_POWER_THRESH;
712 prob_cause, iei = NM_ATT_PROB_CAUSE;
713 rach_b_thresh, iei = NM_ATT_RACH_B_THRESH;
714 loadavg_slots, iei = NM_ATT_LDAVG_SLOTS;
715 radio_subch, iei = NM_ATT_RAD_SUBC;
716 rf_maxpwr_r, iei = NM_ATT_RF_MAXPOWR_R;
717 spec_prob, iei = NM_ATT_SPEC_PROB;
718 start_time, iei = NM_ATT_START_TIME;
719 t200, iei = NM_ATT_T200;
720 tei, iei = NM_ATT_TEI;
721 test_no, iei = NM_ATT_TEST_NO;
722 vswr_thresh, iei = NM_ATT_VSWR_THRESH;
723 window_size, iei = NM_ATT_WINDOW_SIZE;
724 tsc, iei = NM_ATT_TSC;
725 severity, iei = NM_ATT_SEVERITY;
726 outst_alarm, iei = NM_ATT_OUTST_ALARM;
727 meas_type, iei = NM_ATT_MEAS_TYPE;
728
729 avail_status, iei = NM_ATT_AVAIL_STATUS;
730 arfcn_list, iei = NM_ATT_ARFCN_LIST;
731
732 ip, iei = NM_ATT_IPACC_DST_IP;
733 portnr, iei = NM_ATT_IPACC_DST_IP_PORT;
734 stream_id, iei = NM_ATT_IPACC_STREAM_ID;
735 sec_oml_cfg, iei = NM_ATT_IPACC_SEC_OML_CFG;
736 ip_if_cfg, iei = NM_ATT_IPACC_IP_IF_CFG;
737 ip_gw_cfg, iei = NM_ATT_IPACC_IP_GW_CFG;
738 in_serv_time, iei = NM_ATT_IPACC_IN_SERV_TIME;
739 paging_cfg, iei = NM_ATT_IPACC_PAGING_CFG;
740 freq_ctrl, iei = NM_ATT_IPACC_FREQ_CTRL;
741
Pau Espin Pedrol81a55e62021-06-14 13:43:16 +0200742 ari, iei = NM_ATT_GET_ARI;
743
Harald Welte0aa0abc2019-02-06 19:17:35 +0100744 other, OTHERWISE;
745 )" };
746
747type record of OML_FOM_IE OML_FOM_IE_List;
748
749type record OML_MANUF_IPA {
750 uint8_t len,
751 uint8_t str_len,
752 charstring manuf_str,
753 OML_FOM_Header hdr,
754 OML_FOM_IE_List ies optional
755} with { variant (len) "LENGTHTO(hdr,ies)"
756 variant (str_len) "LENGTHTO(manuf_str)" };
757
758type union OML_MANUF {
759 OML_MANUF_IPA ipa
760};
761
762
763external function enc_OML_PDU(in OML_PDU msg) return octetstring
764 with { extension "prototype(convert) encode(RAW)" };
765external function dec_OML_PDU(in octetstring stream) return OML_PDU
766 with { extension "prototype(convert) decode(RAW)" };
767
768
769
770template (value) OML_FOM_IE ts_OML_IE(OML_FOM_IE_Type iei, template (value) OML_FOM_IE_Body body) := {
771 iei := iei,
772 body := body
773}
774template OML_FOM_IE tr_OML_IE(OML_FOM_IE_Type iei, template OML_FOM_IE_Body body) := {
775 iei := ?,
776 body := body
777}
778
779template OML_PDU tr_OML_FOM_only := {
780 mdisc := ABIS_OM_MDISC_FOM,
781 placement := ABIS_OM_PLACEMENT_ONLY,
782 sequence := 0,
783 u := ?
784}
785
786template OML_PDU tr_OML_MsgType(template OML_FOM_MessageType msg_type,
787 template OML_FOM_ObjectClass obj_class := ?,
788 template OML_FOM_ObjectInstance obj_inst := ?,
789 template OML_FOM_IE_List ies := *)
790modifies tr_OML_FOM_only := {
791 u := {
792 fom := {
793 hdr := {
794 msg_type := msg_type,
795 obj_class := obj_class,
796 obj_inst := obj_inst
797 },
798 ies := ies
799 }
800 }
801}
802template (value) OML_PDU ts_OML_MsgType(template (value) OML_FOM_MessageType msg_type,
803 template (value) OML_FOM_ObjectClass obj_class,
804 template (value) OML_FOM_ObjectInstance obj_inst,
805 template (omit) OML_FOM_IE_List ies := omit) := {
806 mdisc := ABIS_OM_MDISC_FOM,
807 placement := ABIS_OM_PLACEMENT_ONLY,
808 sequence := 0,
809 u := {
810 fom := {
811 len := 0, /* overwritten */
812 hdr := ts_OML_FomHeader(msg_type, obj_class, obj_inst),
813 ies := ies
814 }
815 }
816}
817
818
819template (value) OML_FOM_Header ts_OML_FomHeader(template (value) OML_FOM_MessageType msg_type,
820 template (value) OML_FOM_ObjectClass obj_class,
821 template (value) OML_FOM_ObjectInstance obj_inst) := {
822 msg_type := msg_type,
823 obj_class := obj_class,
824 obj_inst := obj_inst
825}
826template OML_FOM_Header tr_OML_FomHeader(template OML_FOM_MessageType msg_type,
827 template OML_FOM_ObjectClass obj_class,
828 template OML_FOM_ObjectInstance obj_inst) := {
829 msg_type := msg_type,
830 obj_class := obj_class,
831 obj_inst := obj_inst
832}
833
834
835template (value) OML_FOM_ObjectInstance ts_OML_ObjectInstance(uint8_t bts, uint8_t trx, uint8_t ts) := {
836 bts_nr := bts,
837 trx_nr := trx,
838 ts_nr := ts
839}
840template OML_FOM_ObjectInstance tr_OML_ObjectInstance(template uint8_t bts, template uint8_t trx,
841 template uint8_t ts) := {
842 bts_nr := bts,
843 trx_nr := trx,
844 ts_nr := ts
845}
846
847
848
849template (value) OML_PDU ts_OML_IPA_MsgType(template (value) OML_FOM_MessageType msg_type,
850 template (value) OML_FOM_ObjectClass obj_class,
851 template (value) OML_FOM_ObjectInstance obj_inst,
852 template (omit) OML_FOM_IE_List ies := omit) := {
853 mdisc := ABIS_OM_MDISC_MANUF,
854 placement := ABIS_OM_PLACEMENT_ONLY,
855 sequence := 0,
856 u := {
857 manuf := {
858 ipa := {
859 len := 0, /* overwritten */
860 str_len := 13,
861 manuf_str := "com.ipaccess" & char(0,0,0,0),
862 hdr := ts_OML_FomHeader(msg_type, obj_class, obj_inst),
863 ies := ies
864 }
865 }
866 }
867}
868template OML_PDU tr_OML_IPA_MsgType(template OML_FOM_MessageType msg_type := ?,
869 template OML_FOM_ObjectClass obj_class := ?,
870 template OML_FOM_ObjectInstance obj_inst := ?,
871 template OML_FOM_IE_List ies := *) := {
872 mdisc := ABIS_OM_MDISC_MANUF,
873 placement := ABIS_OM_PLACEMENT_ONLY,
874 sequence := 0,
875 u := {
876 manuf := {
877 ipa := {
878 len := ?,
879 str_len := 13,
880 manuf_str := "com.ipaccess" & char(0,0,0,0),
881 hdr := tr_OML_FomHeader(msg_type, obj_class, obj_inst),
882 ies := ies
883 }
884 }
885 }
886}
887
888/* 8.8.1 State Changed Event Report */
889template (value) OML_PDU ts_OML_StateChgEvtRep(template (value) OML_FOM_ObjectClass obj_class,
890 template (value) OML_FOM_ObjectInstance obj_inst,
891 template (value) OML_FOM_OperationalState opstate,
892 template (value) OML_FOM_AvailabilityStatus avstate) :=
893 ts_OML_MsgType(NM_MT_STATECHG_EVENT_REP, obj_class, obj_inst, {
894 ts_OML_IE(NM_ATT_OPER_STATE, OML_FOM_IE_Body:{opstate := opstate}),
895 ts_OML_IE(NM_ATT_AVAIL_STATUS, OML_FOM_IE_Body:{avail_status := {len:= 1, avail_status := avstate}})
896 });
897template OML_PDU tr_OML_StateChgEvtRep(template OML_FOM_ObjectClass obj_class,
898 template OML_FOM_ObjectInstance obj_inst,
899 template OML_FOM_OperationalState opstate := ?,
Pau Espin Pedrold0ec1492020-10-16 14:54:14 +0200900 template OML_FOM_AvailabilityStatus avstate := ?,
901 template OML_FOM_AdministrativeState admstate := ?) :=
Harald Welte0aa0abc2019-02-06 19:17:35 +0100902 tr_OML_MsgType(NM_MT_STATECHG_EVENT_REP, obj_class, obj_inst, {
903 tr_OML_IE(NM_ATT_OPER_STATE, OML_FOM_IE_Body:{opstate := opstate}),
Pau Espin Pedrold0ec1492020-10-16 14:54:14 +0200904 tr_OML_IE(NM_ATT_AVAIL_STATUS, OML_FOM_IE_Body:{avail_status := {len := 1, avail_status := avstate}}),
905 tr_OML_IE(NM_ATT_ADM_STATE, OML_FOM_IE_Body:{adm_state := admstate})
Harald Welte0aa0abc2019-02-06 19:17:35 +0100906 });
907
908/* 8.8.2 Failure Event Report */
909template (value) OML_PDU ts_OML_FailureEvtRep(template (value) OML_FOM_ObjectClass obj_class,
910 template (value) OML_FOM_ObjectInstance obj_inst,
911 template (value) OML_FOM_EventType evt_type,
912 template (value) OML_FOM_Severity severity,
913 template (value) OML_FOM_ProbableCause cause) :=
914 ts_OML_MsgType(NM_MT_FAILURE_EVENT_REP, obj_class, obj_inst, {
915 ts_OML_IE(NM_ATT_EVENT_TYPE, OML_FOM_IE_Body:{event_type := evt_type}),
916 ts_OML_IE(NM_ATT_SEVERITY, OML_FOM_IE_Body:{severity := severity}),
917 ts_OML_IE(NM_ATT_PROB_CAUSE, OML_FOM_IE_Body:{prob_cause := cause})
918 });
919template OML_PDU tr_OML_FailureEvtRep(template OML_FOM_ObjectClass obj_class,
920 template OML_FOM_ObjectInstance obj_inst,
921 template OML_FOM_EventType evt_type,
922 template OML_FOM_Severity severity,
923 template OML_FOM_ProbableCause cause) :=
924 tr_OML_MsgType(NM_MT_FAILURE_EVENT_REP, obj_class, obj_inst, {
925 tr_OML_IE(NM_ATT_EVENT_TYPE, OML_FOM_IE_Body:{event_type := evt_type}),
926 tr_OML_IE(NM_ATT_SEVERITY, OML_FOM_IE_Body:{severity := severity}),
927 tr_OML_IE(NM_ATT_PROB_CAUSE, OML_FOM_IE_Body:{prob_cause := cause}),
928 *
929 });
930
931/* 8.8.5 Change Administrative State */
932template (value) OML_PDU ts_OML_ChangeAdmState(template (value) OML_FOM_ObjectClass obj_class,
933 template (value) OML_FOM_ObjectInstance obj_inst,
934 template (value) OML_FOM_AdministrativeState adm_st) :=
935 ts_OML_MsgType(NM_MT_CHG_ADM_STATE, obj_class, obj_inst, {
936 ts_OML_IE(NM_ATT_ADM_STATE, OML_FOM_IE_Body:{adm_state := adm_st})
937 });
938template OML_PDU tr_OML_ChangeAdmState(template OML_FOM_ObjectClass obj_class,
939 template OML_FOM_ObjectInstance obj_inst,
940 template OML_FOM_AdministrativeState adm_st) :=
941 tr_OML_MsgType(NM_MT_CHG_ADM_STATE, obj_class, obj_inst, {
942 tr_OML_IE(NM_ATT_ADM_STATE, OML_FOM_IE_Body:{adm_state := adm_st})
943 });
944
945template (value) OML_PDU ts_OML_ChangeAdmStateACK(template (value) OML_FOM_ObjectClass obj_class,
946 template (value) OML_FOM_ObjectInstance obj_inst,
947 template (value) OML_FOM_AdministrativeState adm_st) :=
948 ts_OML_MsgType(NM_MT_CHG_ADM_STATE_ACK, obj_class, obj_inst, {
949 ts_OML_IE(NM_ATT_ADM_STATE, OML_FOM_IE_Body:{adm_state := adm_st})
950 });
951template OML_PDU tr_OML_ChangeAdmStateACK(template OML_FOM_ObjectClass obj_class,
952 template OML_FOM_ObjectInstance obj_inst,
953 template OML_FOM_AdministrativeState adm_st) :=
954 tr_OML_MsgType(NM_MT_CHG_ADM_STATE_ACK, obj_class, obj_inst, {
955 tr_OML_IE(NM_ATT_ADM_STATE, OML_FOM_IE_Body:{adm_state := adm_st})
956 });
957template (value) OML_PDU ts_OML_ChangeAdmStateNACK(template (value) OML_FOM_ObjectClass obj_class,
958 template (value) OML_FOM_ObjectInstance obj_inst,
959 template (value) OML_FOM_NackCause cause) :=
960 ts_OML_MsgType(NM_MT_CHG_ADM_STATE_NACK, obj_class, obj_inst, {
961 ts_OML_IE(NM_ATT_NACK_CAUSES, OML_FOM_IE_Body:{nack_causes := cause})
962 });
963template OML_PDU tr_OML_ChangeAdmStateNACK(template OML_FOM_ObjectClass obj_class,
964 template OML_FOM_ObjectInstance obj_inst,
965 template OML_FOM_NackCause cause := ?) :=
966 tr_OML_MsgType(NM_MT_CHG_ADM_STATE_NACK, obj_class, obj_inst, {
967 *,
968 tr_OML_IE(NM_ATT_NACK_CAUSES, OML_FOM_IE_Body:{nack_causes := cause})
969 });
970
971
972
973
974
975/* 8.9.2 Opstart */
976template (value) OML_PDU ts_OML_Opstart(template (value) OML_FOM_ObjectClass obj_class,
977 template (value) OML_FOM_ObjectInstance obj_inst) :=
978 ts_OML_MsgType(NM_MT_OPSTART, obj_class, obj_inst);
979template OML_PDU tr_OML_Opstart(template OML_FOM_ObjectClass obj_class,
980 template OML_FOM_ObjectInstance obj_inst) :=
981 tr_OML_MsgType(NM_MT_OPSTART, obj_class, obj_inst);
982
983template (value) OML_PDU ts_OML_OpstartACK(template (value) OML_FOM_ObjectClass obj_class,
984 template (value) OML_FOM_ObjectInstance obj_inst) :=
985 ts_OML_MsgType(NM_MT_OPSTART_ACK, obj_class, obj_inst);
986template OML_PDU tr_OML_OpstartACK(template OML_FOM_ObjectClass obj_class,
987 template OML_FOM_ObjectInstance obj_inst) :=
988 tr_OML_MsgType(NM_MT_OPSTART_ACK, obj_class, obj_inst);
989
990template (value) OML_PDU ts_OML_OpstartNACK(template (value) OML_FOM_ObjectClass obj_class,
991 template (value) OML_FOM_ObjectInstance obj_inst,
992 template (value) OML_FOM_NackCause cause) :=
993 ts_OML_MsgType(NM_MT_OPSTART_NACK, obj_class, obj_inst, {
994 ts_OML_IE(NM_ATT_NACK_CAUSES, OML_FOM_IE_Body:{nack_causes := cause})
995 });
996template OML_PDU tr_OML_OpstartNACK(template OML_FOM_ObjectClass obj_class,
997 template OML_FOM_ObjectInstance obj_inst,
998 template OML_FOM_NackCause cause := ?) :=
999 tr_OML_MsgType(NM_MT_OPSTART_NACK, obj_class, obj_inst, {
1000 tr_OML_IE(NM_ATT_NACK_CAUSES, OML_FOM_IE_Body:{nack_causes := cause})
1001 });
1002
1003/* 8.3.5 SW Activate Request */
1004template (value) OML_PDU ts_OML_SwActReq(template (value) OML_FOM_ObjectClass obj_class,
1005 template (value) OML_FOM_ObjectInstance obj_inst,
1006 template (value) octetstring hw_config,
1007 template (value) octetstring sw_config) :=
1008 ts_OML_MsgType(NM_MT_SW_ACT_REQ, obj_class, obj_inst, {
1009 ts_OML_IE(NM_ATT_HW_CONFIG, OML_FOM_IE_Body:{other := ts_OML_IE_L16V(0, hw_config)}),
1010 ts_OML_IE(NM_ATT_SW_CONFIG, OML_FOM_IE_Body:{other := ts_OML_IE_L16V(0, sw_config)})
1011 });
1012template OML_PDU tr_OML_SwActReq(template OML_FOM_ObjectClass obj_class,
1013 template OML_FOM_ObjectInstance obj_inst,
1014 template octetstring hw_config,
1015 template octetstring sw_config) :=
1016 tr_OML_MsgType(NM_MT_SW_ACT_REQ, obj_class, obj_inst, {
1017 tr_OML_IE(NM_ATT_HW_CONFIG, OML_FOM_IE_Body:{other := tr_OML_IE_L16V(?, hw_config)}),
1018 tr_OML_IE(NM_ATT_SW_CONFIG, OML_FOM_IE_Body:{other := tr_OML_IE_L16V(?, sw_config)})
1019 });
1020
1021template (value) OML_PDU ts_OML_SwActReqACK(template (value) OML_FOM_ObjectClass obj_class,
1022 template (value) OML_FOM_ObjectInstance obj_inst,
1023 template (value) octetstring hw_config,
1024 template (value) octetstring sw_config) :=
1025 ts_OML_MsgType(NM_MT_SW_ACT_REQ_ACK, obj_class, obj_inst, {
1026 ts_OML_IE(NM_ATT_HW_CONFIG, OML_FOM_IE_Body:{other := ts_OML_IE_L16V(0, hw_config)}),
1027 ts_OML_IE(NM_ATT_SW_CONFIG, OML_FOM_IE_Body:{other := ts_OML_IE_L16V(0, sw_config)})
1028 });
1029template OML_PDU tr_OML_SwActReqACK(template OML_FOM_ObjectClass obj_class,
1030 template OML_FOM_ObjectInstance obj_inst,
1031 template octetstring hw_config,
1032 template octetstring sw_config) :=
1033 tr_OML_MsgType(NM_MT_SW_ACT_REQ_ACK, obj_class, obj_inst, {
1034 tr_OML_IE(NM_ATT_HW_CONFIG, OML_FOM_IE_Body:{other := tr_OML_IE_L16V(?, hw_config)}),
1035 tr_OML_IE(NM_ATT_SW_CONFIG, OML_FOM_IE_Body:{other := tr_OML_IE_L16V(?, sw_config)})
1036 });
1037
1038/* 8.3.6 Activate SW */
1039template (value) OML_PDU ts_OML_ActivateSw(template (value) OML_FOM_ObjectClass obj_class,
1040 template (value) OML_FOM_ObjectInstance obj_inst,
1041 template (value) octetstring file_id,
1042 template (value) octetstring sw_desc) :=
1043 ts_OML_MsgType(NM_MT_ACTIVATE_SW, obj_class, obj_inst, {
1044 ts_OML_IE(NM_ATT_FILE_ID, OML_FOM_IE_Body:{other := ts_OML_IE_L16V(0, file_id)}),
1045 ts_OML_IE(NM_ATT_SW_DESCR, OML_FOM_IE_Body:{other := ts_OML_IE_L16V(0, sw_desc)})
1046 });
1047template OML_PDU tr_OML_ActivateSw(template OML_FOM_ObjectClass obj_class,
1048 template OML_FOM_ObjectInstance obj_inst,
1049 template octetstring file_id,
1050 template octetstring sw_desc) :=
1051 tr_OML_MsgType(NM_MT_ACTIVATE_SW, obj_class, obj_inst, {
1052 tr_OML_IE(NM_ATT_FILE_ID, OML_FOM_IE_Body:{other := tr_OML_IE_L16V(?, file_id)}),
1053 tr_OML_IE(NM_ATT_SW_DESCR, OML_FOM_IE_Body:{other := tr_OML_IE_L16V(?, sw_desc)})
1054 });
1055
1056template (value) OML_PDU ts_OML_ActivateSwACK(template (value) OML_FOM_ObjectClass obj_class,
1057 template (value) OML_FOM_ObjectInstance obj_inst,
1058 template (value) octetstring file_id,
1059 template (value) octetstring sw_desc) :=
1060 ts_OML_MsgType(NM_MT_ACTIVATE_SW_ACK, obj_class, obj_inst, {
1061 ts_OML_IE(NM_ATT_FILE_ID, OML_FOM_IE_Body:{other := ts_OML_IE_L16V(0, file_id)}),
1062 ts_OML_IE(NM_ATT_SW_DESCR, OML_FOM_IE_Body:{other := ts_OML_IE_L16V(0, sw_desc)})
1063 });
1064template OML_PDU tr_OML_ActivateSwACK(template OML_FOM_ObjectClass obj_class,
1065 template OML_FOM_ObjectInstance obj_inst,
1066 template octetstring file_id,
1067 template octetstring sw_desc) :=
1068 tr_OML_MsgType(NM_MT_ACTIVATE_SW_ACK, obj_class, obj_inst, {
1069 tr_OML_IE(NM_ATT_FILE_ID, OML_FOM_IE_Body:{other := tr_OML_IE_L16V(?, file_id)}),
1070 tr_OML_IE(NM_ATT_SW_DESCR, OML_FOM_IE_Body:{other := tr_OML_IE_L16V(?, sw_desc)})
1071 });
1072
1073/* 8.3.7 SW Activated Report */
1074template (value) OML_PDU ts_OML_SwActivatedRep(template (value) OML_FOM_ObjectClass obj_class,
1075 template (value) OML_FOM_ObjectInstance obj_inst) :=
1076 ts_OML_MsgType(NM_MT_SW_ACTIVATED_REP, obj_class, obj_inst, {});
1077template OML_PDU tr_OML_SwActivatedRep(template OML_FOM_ObjectClass obj_class,
1078 template OML_FOM_ObjectInstance obj_inst) :=
1079 tr_OML_MsgType(NM_MT_SW_ACTIVATED_REP, obj_class, obj_inst, *);
1080
1081
1082/* 8.6.1 Set BTS Attributes */
1083template (value) OML_PDU ts_OML_SetBtsAttr(template (value) OML_FOM_ObjectInstance obj_inst,
1084 template (value) OML_FOM_IE_List ies) :=
1085 ts_OML_MsgType(NM_MT_SET_BTS_ATTR, NM_OC_BTS, obj_inst, ies);
1086template OML_PDU tr_OML_SetBtsAttr(template OML_FOM_ObjectInstance obj_inst,
1087 template OML_FOM_IE_List ies) :=
1088 tr_OML_MsgType(NM_MT_SET_BTS_ATTR, NM_OC_BTS, obj_inst, ies);
1089
1090
1091/* 8.6.2 Set Radio Carrier Attributes */
1092template (value) OML_PDU ts_OML_SetRadioAttr(template (value) OML_FOM_ObjectInstance obj_inst,
1093 template (value) uint8_t maxpwr_r,
1094 template (value) OML_ArfcnList arfcn_list) :=
1095 ts_OML_MsgType(NM_MT_SET_RADIO_ATTR, NM_OC_RADIO_CARRIER, obj_inst, {
1096 ts_OML_IE(NM_ATT_RF_MAXPOWR_R, OML_FOM_IE_Body:{rf_maxpwr_r := maxpwr_r}),
1097 ts_OML_IE(NM_ATT_ARFCN_LIST, OML_FOM_IE_Body:{arfcn_list := {len:=0, arfcn_list:=arfcn_list}})
1098 });
1099template OML_PDU tr_OML_SetRadioAttr(template OML_FOM_ObjectInstance obj_inst,
1100 template uint8_t maxpwr_r,
1101 template OML_ArfcnList arfcn_list) :=
1102 tr_OML_MsgType(NM_MT_SET_RADIO_ATTR, NM_OC_RADIO_CARRIER, obj_inst, {
1103 tr_OML_IE(NM_ATT_RF_MAXPOWR_R, OML_FOM_IE_Body:{rf_maxpwr_r := maxpwr_r}),
1104 tr_OML_IE(NM_ATT_ARFCN_LIST, OML_FOM_IE_Body:{arfcn_list := {len:=0, arfcn_list:=arfcn_list}})
1105 });
1106
1107
1108/* 8.6.3 Set Channel Attributes */
1109template (value) OML_PDU ts_OML_SetChanAttr(template (value) OML_FOM_ObjectInstance obj_inst,
1110 template (value) OML_ChannelCombination chan_comb,
1111 template (value) uint8_t tsc) :=
1112 ts_OML_MsgType(NM_MT_SET_CHAN_ATTR, NM_OC_CHANNEL, obj_inst, {
1113 ts_OML_IE(NM_ATT_CHAN_COMB, OML_FOM_IE_Body:{chan_comb := chan_comb}),
1114 ts_OML_IE(NM_ATT_TSC, OML_FOM_IE_Body:{tsc := tsc})
1115 });
1116template OML_PDU tr_OML_SetChanAttr(template OML_FOM_ObjectInstance obj_inst,
1117 template OML_ChannelCombination chan_comb,
1118 template uint8_t tsc) :=
1119 tr_OML_MsgType(NM_MT_SET_CHAN_ATTR, NM_OC_CHANNEL, obj_inst, {
1120 tr_OML_IE(NM_ATT_CHAN_COMB, OML_FOM_IE_Body:{chan_comb := chan_comb}),
1121 *,
1122 tr_OML_IE(NM_ATT_TSC, OML_FOM_IE_Body:{tsc := tsc})
1123 });
1124
1125
1126/* 8.11.1 Get Attributes */
1127template (value) OML_PDU ts_OML_GetAttributes(template (value) OML_FOM_ObjectClass obj_class,
1128 template (value) OML_FOM_ObjectInstance obj_inst,
1129 template (value) octetstring req_attr) :=
1130 ts_OML_MsgType(NM_MT_GET_ATTR, obj_class, obj_inst, {
1131 ts_OML_IE(NM_ATT_LIST_REQ_ATTR, OML_FOM_IE_Body:{other := ts_OML_IE_L16V(0, req_attr)})
1132 });
1133template OML_PDU tr_OML_GetAttributes(template OML_FOM_ObjectClass obj_class,
1134 template OML_FOM_ObjectInstance obj_inst,
1135 template octetstring req_attr) :=
1136 tr_OML_MsgType(NM_MT_GET_ATTR, obj_class, obj_inst, {
1137 tr_OML_IE(NM_ATT_LIST_REQ_ATTR, OML_FOM_IE_Body:{other := tr_OML_IE_L16V(?, req_attr)})
1138 });
1139
Pau Espin Pedrol81a55e62021-06-14 13:43:16 +02001140/* 8.11.3 Get Attributes Response */
1141template (value) OML_PDU ts_OML_GetAttributesResponse(template (value) OML_FOM_ObjectClass obj_class,
1142 template (value) OML_FOM_ObjectInstance obj_inst,
1143 template (value) octetstring req_attr) :=
1144 ts_OML_MsgType(NM_MT_GET_ATTR_RESP, obj_class, obj_inst, {
1145 ts_OML_IE(NM_ATT_GET_ARI, OML_FOM_IE_Body:{other := ts_OML_IE_L16V(0, req_attr)})
1146 });
1147template OML_PDU tr_OML_GetAttributesResponse(template OML_FOM_ObjectClass obj_class,
1148 template OML_FOM_ObjectInstance obj_inst,
1149 template OML_FOM_ARI ari := ?) :=
1150 tr_OML_MsgType(NM_MT_GET_ATTR_RESP, obj_class, obj_inst, {
1151 tr_OML_IE(NM_ATT_GET_ARI, OML_FOM_IE_Body:{ari := ari})
1152 });
1153
Harald Welte0aa0abc2019-02-06 19:17:35 +01001154/* convert a request into an ACK */
1155function f_OML_make_ack(OML_PDU orig) return OML_PDU {
1156 var OML_PDU resp := orig;
1157 if (ischosen(resp.u.fom)) {
1158 int2enum(enum2int(orig.u.fom.hdr.msg_type)+1, resp.u.fom.hdr.msg_type);
1159 } else if (ischosen(resp.u.manuf)) {
1160 int2enum(enum2int(orig.u.manuf.ipa.hdr.msg_type)+1, resp.u.manuf.ipa.hdr.msg_type);
1161 } else {
1162 testcase.stop("Unsupported OML in f_OML_make_ack(): ", orig);
1163 }
1164 return resp;
1165}
1166function f_OML_make_ack_exp(OML_PDU orig) return template OML_PDU {
1167 var template OML_PDU resp := orig;
1168 var OML_FOM_MessageType msg_t;
1169 if (ischosen(resp.u.fom)) {
1170 resp.u.fom.len := ?;
1171 int2enum(enum2int(orig.u.fom.hdr.msg_type)+1, msg_t);
1172 resp.u.fom.hdr.msg_type := msg_t;
1173 } else if (ischosen(resp.u.manuf)) {
1174 resp.u.manuf.ipa.len := ?;
1175 int2enum(enum2int(orig.u.manuf.ipa.hdr.msg_type)+1, msg_t);
1176 resp.u.manuf.ipa.hdr.msg_type := msg_t;
1177 } else {
1178 testcase.stop("Unsupported OML in f_OML_make_ack(): ", orig);
1179 }
1180 return resp;
1181}
1182
1183/* convert a request into a NACK, appending the cause IE */
1184function f_OML_make_nack(OML_PDU orig, OML_FOM_NackCause cause) return OML_PDU {
1185 var OML_PDU resp := orig;
1186 if (ischosen(resp.u.fom)) {
1187 int2enum(enum2int(orig.u.fom.hdr.msg_type)+2, resp.u.fom.hdr.msg_type);
1188 resp.u.fom.ies := orig.u.fom.ies & {
1189 valueof(ts_OML_IE(NM_ATT_NACK_CAUSES, OML_FOM_IE_Body:{nack_causes := cause}))
1190 };
1191 } else if (ischosen(resp.u.manuf)) {
1192 int2enum(enum2int(orig.u.manuf.ipa.hdr.msg_type)+2, resp.u.manuf.ipa.hdr.msg_type);
1193 resp.u.manuf.ipa.ies := orig.u.manuf.ipa.ies & {
1194 valueof(ts_OML_IE(NM_ATT_NACK_CAUSES, OML_FOM_IE_Body:{nack_causes := cause}))
1195 };
1196 } else {
1197 testcase.stop("Unsupported OML in f_OML_make_nack(): ", orig);
1198 }
1199 return resp;
1200}
1201function f_OML_make_nack_exp(OML_PDU orig, template OML_FOM_NackCause cause) return template OML_PDU {
1202 var template OML_PDU resp := orig;
1203 var OML_FOM_MessageType msg_t;
1204 if (ischosen(resp.u.fom)) {
1205 resp.u.fom.len := ?;
1206 int2enum(enum2int(orig.u.fom.hdr.msg_type)+2, msg_t);
1207 resp.u.fom.hdr.msg_type := msg_t;
1208 resp.u.fom.ies := { *,
1209 tr_OML_IE(NM_ATT_NACK_CAUSES, OML_FOM_IE_Body:{nack_causes := cause})
1210 };
1211 } else if (ischosen(resp.u.manuf)) {
1212 resp.u.manuf.ipa.len := ?;
1213 int2enum(enum2int(orig.u.manuf.ipa.hdr.msg_type)+2, msg_t);
1214 resp.u.manuf.ipa.hdr.msg_type := msg_t;
1215 resp.u.manuf.ipa.ies := { *,
1216 tr_OML_IE(NM_ATT_NACK_CAUSES, OML_FOM_IE_Body:{nack_causes := cause})
1217 };
1218/*
1219 resp.u.manuf.ipa.ies := resp.u.manuf.ipa.ies & {
1220 tr_OML_IE(NM_ATT_NACK_CAUSES, OML_FOM_IE_Body:{nack_causes := cause})
1221 };
1222*/
1223 } else {
1224 testcase.stop("Unsupported OML in f_OML_make_nack_exp(): ", orig);
1225 }
1226 return resp;
1227}
1228
Pau Espin Pedrol65d712e2021-06-25 13:55:38 +02001229function f_OML_FOM_IE_List_get_ie(OML_FOM_IE_List ie_list, OML_FOM_IE_Type iei) return OML_FOM_IE_Body
1230{
1231 for (var integer i := 0; i < lengthof(ie_list); i := i + 1) {
1232 if (ie_list[i].iei == iei) {
1233 return ie_list[i].body;
1234 }
1235 }
1236 var OML_FOM_IE_Body dummy;
1237 return dummy; /*TODO: setverdict(fail?) */
1238}
1239
1240function f_OML_FOM_get_ie(OML_FOM fom, OML_FOM_IE_Type iei) return OML_FOM_IE_Body
1241{
1242 return f_OML_FOM_IE_List_get_ie(fom.ies, iei);
1243}
Harald Welte0aa0abc2019-02-06 19:17:35 +01001244
1245
1246/***********************************************************************
1247 * IPA / Osmocom specifics
1248 ***********************************************************************/
1249
1250
1251
Pau Espin Pedrolad76aba2023-04-11 15:59:21 +02001252template (value) OML_PDU ts_OML_IPA_RslConnect(template (value) OML_FOM_ObjectInstance obj_inst,
1253 template (value) uint8_t stream_id,
1254 template (value) uint16_t port_nr) :=
1255 ts_OML_IPA_MsgType(NM_MT_IPACC_RSL_CONNECT, NM_OC_BASEB_TRANSC, obj_inst, {
Harald Welte0aa0abc2019-02-06 19:17:35 +01001256 ts_OML_IE(NM_ATT_IPACC_STREAM_ID, OML_FOM_IE_Body:{stream_id := stream_id}),
1257 ts_OML_IE(NM_ATT_IPACC_DST_IP_PORT, OML_FOM_IE_Body:{portnr := port_nr})
1258 });
Pau Espin Pedrolad76aba2023-04-11 15:59:21 +02001259template OML_PDU tr_OML_IPA_RslConnect(template (present) OML_FOM_ObjectInstance obj_inst,
1260 template (present) uint8_t stream_id,
1261 template (present) uint16_t port_nr) :=
1262 tr_OML_IPA_MsgType(NM_MT_IPACC_RSL_CONNECT, NM_OC_BASEB_TRANSC, obj_inst, {
Harald Welte0aa0abc2019-02-06 19:17:35 +01001263 tr_OML_IE(NM_ATT_IPACC_STREAM_ID, OML_FOM_IE_Body:{stream_id := stream_id}),
1264 tr_OML_IE(NM_ATT_IPACC_DST_IP_PORT, OML_FOM_IE_Body:{portnr := port_nr})
1265 });
1266
1267
1268
1269
1270
1271} with { encode "RAW"; variant "FIELDORDER(msb)" };