Change in osmo-ttcn3-hacks[master]: Add TTCN-3 definition of GSM Abis OML protocol (TS 12.21)

This is merely a historical archive of years 2008-2021, before the migration to mailman3.

A maintained and still updated list archive can be found at https://lists.osmocom.org/hyperkitty/list/gerrit-log@lists.osmocom.org/.

Harald Welte gerrit-no-reply at lists.osmocom.org
Sun Feb 17 13:36:42 UTC 2019


Harald Welte has submitted this change and it was merged. ( https://gerrit.osmocom.org/12875 )

Change subject: Add TTCN-3 definition of GSM Abis OML protocol (TS 12.21)
......................................................................

Add TTCN-3 definition of GSM Abis OML protocol (TS 12.21)

Change-Id: I65f71bf7f54cbe3290757e810b1df1e54929bdd1
---
A library/AbisOML_Types.ttcn
1 file changed, 1,221 insertions(+), 0 deletions(-)

Approvals:
  Harald Welte: Looks good to me, approved
  Jenkins Builder: Verified



diff --git a/library/AbisOML_Types.ttcn b/library/AbisOML_Types.ttcn
new file mode 100644
index 0000000..0d37f8a
--- /dev/null
+++ b/library/AbisOML_Types.ttcn
@@ -0,0 +1,1221 @@
+module AbisOML_Types {
+
+/* AbisOML_Types, defining abstract TTCN-3 data types for the A-bis OML protocol.
+ *
+ * A-bis OML is a 3GP standard protocol used between BTS and BSC in a GSM network;
+ * it is specified in 3GPP TS 12.21.
+ *
+ * (C) 2019 by Harald Welte <laforge at gnumonks.org>
+ * All rights reserved.
+ *
+ * Released under the terms of the GNU General Public License, Version 2 or
+ * (at your option) any later version.
+ */
+
+import from General_Types all;
+import from Osmocom_Types all;
+import from GSM_Types all;
+
+type enumerated OML_MessageDiscriminator {
+	ABIS_OM_MDISC_FOM	('80'H),
+	ABIS_OM_MDISC_MMI	('40'H),
+	ABIS_OM_MDISC_TRAU	('20'H),
+	ABIS_OM_MDISC_MANUF	('10'H)
+} with { variant "FIELDLENGTH(8)" };
+
+type enumerated OML_Placement {
+	ABIS_OM_PLACEMENT_ONLY		('80'H),
+	ABIS_OM_PLACEMENT_FIRST		('40'H),
+	ABIS_OM_PLACEMENT_MIDDLE	('20'H),
+	ABIS_OM_PLACEMENT_LAST		('10'H)
+} with { variant "FIELDLENGTH(8)" };
+
+type union OML_Union {
+	OML_FOM		fom,
+	OML_MANUF	manuf,
+	octetstring	other
+};
+
+type record OML_PDU {
+	OML_MessageDiscriminator	mdisc,
+	OML_Placement			placement,
+	uint8_t				sequence,
+	OML_Union			u
+} with {
+	 variant (u) "CROSSTAG(
+			fom, mdisc = ABIS_OM_MDISC_FOM;
+			manuf, mdisc = ABIS_OM_MDISC_MANUF;
+			other, OTHERWISE;
+		)" };
+
+
+type record OML_FOM_ObjectInstance {
+	uint8_t		bts_nr,
+	uint8_t		trx_nr,
+	uint8_t		ts_nr
+};
+
+
+type record OML_FOM_Header {
+	OML_FOM_MessageType		msg_type,
+	OML_FOM_ObjectClass		obj_class,
+	OML_FOM_ObjectInstance		obj_inst
+};
+
+/* Section 9.1 */
+type enumerated OML_FOM_MessageType {
+	/* SW Download Management Messages */
+	NM_MT_LOAD_INIT			('01'H),
+	NM_MT_LOAD_INIT_ACK		('02'H),
+	NM_MT_LOAD_INIT_NACK		('03'H),
+	NM_MT_LOAD_SEG			('04'H),
+	NM_MT_LOAD_SEG_ACK		('05'H),
+	NM_MT_LOAD_ABORT		('06'H),
+	NM_MT_LOAD_END			('07'H),
+	NM_MT_LOAD_END_ACK		('08'H),
+	NM_MT_LOAD_END_NACK		('09'H),
+	NM_MT_SW_ACT_REQ		('0a'H),
+	NM_MT_SW_ACT_REQ_ACK		('0b'H),
+	NM_MT_SW_ACT_REQ_NACK		('0c'H),
+	NM_MT_ACTIVATE_SW		('0d'H),
+	NM_MT_ACTIVATE_SW_ACK		('0e'H),
+	NM_MT_ACTIVATE_SW_NACK		('0f'H),
+	NM_MT_SW_ACTIVATED_REP		('10'H),
+
+	/* A-bis Interface Management Messages */
+	NM_MT_ESTABLISH_TEI		('21'H),
+	NM_MT_ESTABLISH_TEI_ACK		('22'H),
+	NM_MT_ESTABLISH_TEI_NACK	('23'H),
+	NM_MT_CONN_TERR_SIGN		('24'H),
+	NM_MT_CONN_TERR_SIGN_ACK	('25'H),
+	NM_MT_CONN_TERR_SIGN_NACK	('26'H),
+	NM_MT_DISC_TERR_SIGN		('27'H),
+	NM_MT_DISC_TERR_SIGN_ACK	('28'H),
+	NM_MT_DISC_TERR_SIGN_NACK	('29'H),
+	NM_MT_CONN_TERR_TRAF		('2a'H),
+	NM_MT_CONN_TERR_TRAF_ACK	('2b'H),
+	NM_MT_CONN_TERR_TRAF_NACK	('2c'H),
+	NM_MT_DISC_TERR_TRAF		('2d'H),
+	NM_MT_DISC_TERR_TRAF_ACK	('2e'H),
+	NM_MT_DISC_TERR_TRAF_NACK	('2f'H),
+	/* Transmission Management Messages */	
+	NM_MT_CONN_MDROP_LINK		('31'H),
+	NM_MT_CONN_MDROP_LINK_ACK	('32'H),
+	NM_MT_CONN_MDROP_LINK_NACK	('33'H),
+	NM_MT_DISC_MDROP_LINK		('34'H),
+	NM_MT_DISC_MDROP_LINK_ACK	('35'H),
+	NM_MT_DISC_MDROP_LINK_NACK	('36'H),
+	/* Air Interface Management Messages */
+	NM_MT_SET_BTS_ATTR		('41'H),
+	NM_MT_SET_BTS_ATTR_ACK		('42'H),
+	NM_MT_SET_BTS_ATTR_NACK		('43'H),
+	NM_MT_SET_RADIO_ATTR		('44'H),
+	NM_MT_SET_RADIO_ATTR_ACK	('45'H),
+	NM_MT_SET_RADIO_ATTR_NACK	('46'H),
+	NM_MT_SET_CHAN_ATTR		('47'H),
+	NM_MT_SET_CHAN_ATTR_ACK		('48'H),
+	NM_MT_SET_CHAN_ATTR_NACK	('49'H),
+	/* Test Management Messages */
+	NM_MT_PERF_TEST			('51'H),
+	NM_MT_PERF_TEST_ACK		('52'H),
+	NM_MT_PERF_TEST_NACK		('53'H),
+	NM_MT_TEST_REP			('54'H),
+	NM_MT_SEND_TEST_REP		('55'H),
+	NM_MT_SEND_TEST_REP_ACK		('56'H),
+	NM_MT_SEND_TEST_REP_NACK	('57'H),
+	NM_MT_STOP_TEST			('58'H),
+	NM_MT_STOP_TEST_ACK		('59'H),
+	NM_MT_STOP_TEST_NACK		('5a'H),
+	/* State Management and Event Report Messages */
+	NM_MT_STATECHG_EVENT_REP	('61'H),
+	NM_MT_FAILURE_EVENT_REP		('62'H),
+	NM_MT_STOP_EVENT_REP		('63'H),
+	NM_MT_STOP_EVENT_REP_ACK	('64'H),
+	NM_MT_STOP_EVENT_REP_NACK	('65'H),
+	NM_MT_REST_EVENT_REP		('66'H),
+	NM_MT_REST_EVENT_REP_ACK	('67'H),
+	NM_MT_REST_EVENT_REP_NACK	('68'H),
+	NM_MT_CHG_ADM_STATE		('69'H),
+	NM_MT_CHG_ADM_STATE_ACK		('6a'H),
+	NM_MT_CHG_ADM_STATE_NACK	('6b'H),
+	NM_MT_CHG_ADM_STATE_REQ		('6c'H),
+	NM_MT_CHG_ADM_STATE_REQ_ACK	('6d'H),
+	NM_MT_CHG_ADM_STATE_REQ_NACK	('6e'H),
+
+	NM_MT_REP_OUTST_ALARMS		('93'H),
+	NM_MT_REP_OUTST_ALARMS_ACK	('94'H),
+	NM_MT_REP_OUTST_ALARMS_NACK	('95'H),
+
+	/* Equipment Management Messages */
+	NM_MT_CHANGEOVER		('71'H),
+	NM_MT_CHANGEOVER_ACK		('72'H),
+	NM_MT_CHANGEOVER_NACK		('73'H),
+	NM_MT_OPSTART			('74'H),
+	NM_MT_OPSTART_ACK		('75'H),
+	NM_MT_OPSTART_NACK		('76'H),
+	NM_MT_REINIT			('77'H),
+	NM_MT_REINIT_ACK		('78'H),
+	NM_MT_REINIT_NACK		('79'H),
+	NM_MT_SET_SITE_OUT		('7a'H),
+	NM_MT_SET_SITE_OUT_ACK		('7b'H),
+	NM_MT_SET_SITE_OUT_NACK		('7c'H),
+
+	NM_MT_CHG_HW_CONF		('90'H),
+	NM_MT_CHG_HW_CONF_ACK		('91'H),
+	NM_MT_CHG_HW_CONF_NACK		('92'H),
+
+	/* Measurement Management Messages */
+	NM_MT_MEAS_RES_REQ		('8a'H),
+	NM_MT_MEAS_RES_RESP		('8b'H),
+	NM_MT_STOP_MEAS			('8c'H),
+	NM_MT_START_MEAS		('8d'H),
+
+	/* Other Messages */
+	NM_MT_GET_ATTR			('81'H),
+	NM_MT_GET_ATTR_RESP		('82'H),
+	NM_MT_GET_ATTR_NACK		('83'H),
+	NM_MT_SET_ALARM_THRES		('84'H),
+	NM_MT_SET_ALARM_THRES_ACK	('85'H),
+	NM_MT_SET_ALARM_THRES_NACK	('86'H),
+
+	/* IPA specific messages */
+	NM_MT_IPACC_RESTART		('87'H),
+	NM_MT_IPACC_RESTART_ACK		('88'H),
+	NM_MT_IPACC_RESTART_NACK	('89'H),
+
+	NM_MT_IPACC_RSL_CONNECT		('e0'H),
+	NM_MT_IPACC_RSL_CONNECT_ACK	('e1'H),
+	NM_MT_IPACC_RSL_CONNECT_NACK	('e2'H),
+	NM_MT_IPACC_RSL_DISCONNECT	('e3'H),
+	NM_MT_IPACC_RSL_DISCONNECT_ACK	('e4'H),
+	NM_MT_IPACC_RSL_DISCONNECT_NACK	('e5'H),
+	NM_MT_IPACC_CONN_TRAF		('e6'H),
+	NM_MT_IPACC_CONN_TRAF_ACK	('e7'H),
+	NM_MT_IPACC_CONN_TRAF_NACK	('e8'H),
+	NM_MT_IPACC_DEF_BOOT_SW		('ec'H),
+	NM_MT_IPACC_DEF_BOOT_SW_ACK	('ed'H),
+	MN_MT_IPACC_DEF_BOOT_SW_NACK	('ee'H),
+	NM_MT_IPACC_SET_NVATTR		('ef'H),
+	NM_MT_IPACC_SET_NVATTR_ACK	('f0'H),
+	NM_MT_IPACC_SET_NVATTR_NACK	('f1'H),
+	NM_MT_IPACC_GET_NVATTR		('f2'H),
+	NM_MT_IPACC_GET_NVATTR_ACK	('f3'H),
+	NM_MT_IPACC_GET_NVATTR_NACK	('f4'H),
+	NM_MT_IPACC_SET_ATTR		('f5'H),
+	NM_MT_IPACC_SET_ATTR_ACK	('f6'H),
+	NM_MT_IPACC_SET_ATTR_NACK	('f7'H)
+
+} with { variant "FIELDLENGTH(8)" };
+
+/* Section 9.2 */
+type enumerated OML_FOM_ObjectClass {
+	NM_OC_SITE_MANAGER		('00'H),
+	NM_OC_BTS			('01'H),
+	NM_OC_RADIO_CARRIER		('02'H),
+	NM_OC_CHANNEL			('03'H),
+	NM_OC_BASEB_TRANSC		('04'H),
+
+	NM_OC_IPAC_E1_TRUNK		('0e'H),
+	NM_OC_IPAC_E1_PORT		('0f'H),
+	NM_OC_IPAC_E1_CHAN		('10'H),
+	NM_OC_IPAC_CLK_MODULE		('22'H),
+
+	NM_OC_GPRS_NSE			('f0'H),
+	NM_OC_GPRS_CELL			('f1'H),
+	NM_OC_GPRS_NSVC			('f2'H),
+
+	NM_OC_NULL			('ff'H)
+} with { variant "FIELDLENGTH(8)" };
+
+/* Section 9.4 */
+type enumerated OML_FOM_IE_Type {
+	NM_ATT_ABIS_CHANNEL		('01'H),
+	NM_ATT_ADD_INFO			('02'H),
+	NM_ATT_ADD_TEXT			('03'H),
+	NM_ATT_ADM_STATE		('04'H),
+	NM_ATT_ARFCN_LIST		('05'H),
+	NM_ATT_AUTON_REPORT		('06'H),
+	NM_ATT_AVAIL_STATUS		('07'H),
+	NM_ATT_BCCH_ARFCN		('08'H),
+	NM_ATT_BSIC			('09'H),
+	NM_ATT_BTS_AIR_TIMER		('0a'H),
+	NM_ATT_CCCH_L_I_P		('0b'H),
+	NM_ATT_CCCH_L_T			('0c'H),
+	NM_ATT_CHAN_COMB		('0d'H),
+	NM_ATT_CONN_FAIL_CRIT		('0e'H),
+	NM_ATT_DEST			('0f'H),
+	/* res */
+	NM_ATT_EVENT_TYPE		('11'H),
+	NM_ATT_FILE_ID			('12'H),
+	NM_ATT_FILE_VERSION		('13'H),
+	NM_ATT_GSM_TIME			('14'H),
+	NM_ATT_HSN			('15'H),
+	NM_ATT_HW_CONFIG		('16'H),
+	NM_ATT_HW_DESC			('17'H),
+	NM_ATT_INTAVE_PARAM		('18'H),
+	NM_ATT_INTERF_BOUND		('19'H),
+	NM_ATT_LIST_REQ_ATTR		('1a'H),
+	NM_ATT_MAIO			('1b'H),
+	NM_ATT_MANUF_STATE		('1c'H),
+	NM_ATT_MANUF_THRESH		('1d'H),
+	NM_ATT_MANUF_ID			('1e'H),
+	NM_ATT_MAX_TA			('1f'H),
+	NM_ATT_MDROP_LINK		('20'H),
+	NM_ATT_MDROP_NEXT		('21'H),
+	NM_ATT_NACK_CAUSES		('22'H),
+	NM_ATT_NY1			('23'H),
+	NM_ATT_OPER_STATE		('24'H),
+	NM_ATT_OVERL_PERIOD		('25'H),
+	NM_ATT_PHYS_CONF		('26'H),
+	NM_ATT_POWER_CLASS		('27'H),
+	NM_ATT_POWER_THRESH		('28'H),
+	NM_ATT_PROB_CAUSE		('29'H),
+	NM_ATT_RACH_B_THRESH		('2a'H),
+	NM_ATT_LDAVG_SLOTS		('2b'H),
+	NM_ATT_RAD_SUBC			('2c'H),
+	NM_ATT_RF_MAXPOWR_R		('2d'H),
+	NM_ATT_SITE_INPUTS		('2e'H),
+	NM_ATT_SITE_OUTPUTS		('2f'H),
+	NM_ATT_SOURCE			('30'H),
+	NM_ATT_SPEC_PROB		('31'H),
+	NM_ATT_START_TIME		('32'H),
+	NM_ATT_T200			('33'H),
+	NM_ATT_TEI			('34'H),
+	NM_ATT_TEST_DUR			('35'H),
+	NM_ATT_TEST_NO			('36'H),
+	NM_ATT_TEST_REPORT		('37'H),
+	NM_ATT_VSWR_THRESH		('38'H),
+	NM_ATT_WINDOW_SIZE		('39'H),
+	/* res */
+	NM_ATT_BS11_RSSI_OFFS		('3d'H),
+	NM_ATT_BS11_TXPWR		('3e'H),
+	NM_ATT_BS11_DIVERSITY		('3f'H),
+	/* res */
+	NM_ATT_TSC			('40'H),
+	NM_ATT_SW_CONFIG		('41'H),
+	NM_ATT_SW_DESCR			('42'H),
+	NM_ATT_SEVERITY			('43'H),
+	NM_ATT_GET_ARI			('44'H),
+	NM_ATT_HW_CONF_CHG		('45'H),
+	NM_ATT_OUTST_ALARM		('46'H),
+	NM_ATT_FILE_DATA		('47'H),
+	NM_ATT_MEAS_RES			('48'H),
+	NM_ATT_MEAS_TYPE		('49'H),
+	/* res */
+	NM_ATT_BS11_ESN_FW_CODE_NO	('4c'H),
+	NM_ATT_BS11_ESN_HW_CODE_NO	('4f'H),
+	/* res */
+	NM_ATT_BS11_ESN_PCB_SERIAL	('55'H),
+	NM_ATT_BS11_EXCESSIVE_DISTANCE	('58'H),
+	NM_ATT_BS11_ALL_TEST_CATG	('60'H),
+	NM_ATT_BS11_BTSLS_HOPPING	('61'H),
+	NM_ATT_BS11_CELL_ALLOC_NR	('62'H),
+	NM_ATT_BS11_CELL_GLOBAL_ID	('63'H),
+
+	NM_ATT_BS11_ENA_INTERF_CLASS	('66'H),
+	NM_ATT_BS11_ENA_INT_INTEC_HANDO	('67'H),
+	NM_ATT_BS11_ENA_INT_INTRC_HANDO	('68'H),
+	NM_ATT_BS11_ENA_MS_PWR_CTRL	('69'H),
+	NM_ATT_BS11_ENA_PWR_BDGT_HO	('6a'H),
+	NM_ATT_BS11_ENA_PWR_CTRL_RLFW	('6b'H),
+	NM_ATT_BS11_ENA_RXLEV_HO	('6c'H),
+	NM_ATT_BS11_ENA_RXQUAL_HO	('6d'H),
+	NM_ATT_BS11_FACCH_QUAL		('6e'H),
+
+	NM_ATT_IPACC_DST_IP		('80'H),
+	NM_ATT_IPACC_DST_IP_PORT	('81'H),
+	NM_ATT_IPACC_SSRC		('82'H),
+	NM_ATT_IPACC_RTP_PAYLD_TYPE	('83'H),
+	NM_ATT_IPACC_BASEB_ID		('84'H),
+	NM_ATT_IPACC_STREAM_ID		('85'H),
+	NM_ATT_IPACC_NV_FLAGS		('86'H),
+	NM_ATT_IPACC_FREQ_CTRL		('87'H),
+	NM_ATT_IPACC_PRIM_OML_CFG	('88'H),
+	NM_ATT_IPACC_SEC_OML_CFG	('89'H),
+	NM_ATT_IPACC_IP_IF_CFG		('8a'H),
+	NM_ATT_IPACC_IP_GW_CFG		('8b'H),
+	NM_ATT_IPACC_IN_SERV_TIME	('8c'H),
+	NM_ATT_IPACC_TRX_BTS_ASS	('8d'H),
+	NM_ATT_IPACC_LOCATION		('8e'H),	/* string describing location */
+	NM_ATT_IPACC_PAGING_CFG		('8f'H),
+	NM_ATT_IPACC_FILE_DATA		('90'H),
+	NM_ATT_IPACC_UNIT_ID		('91'H),	/* Site/BTS/TRX */
+	NM_ATT_IPACC_PARENT_UNIT_ID	('92'H),
+	NM_ATT_IPACC_UNIT_NAME		('93'H),	/* default: nbts-<mac-as-string> */
+	NM_ATT_IPACC_SNMP_CFG		('94'H),
+	NM_ATT_IPACC_PRIM_OML_CFG_LIST	('95'H),
+	NM_ATT_IPACC_PRIM_OML_FB_TOUT	('96'H),
+	NM_ATT_IPACC_CUR_SW_CFG		('97'H),
+	NM_ATT_IPACC_TIMING_BUS		('98'H),
+	NM_ATT_IPACC_CGI		('99'H),
+	NM_ATT_IPACC_RAC		('9a'H),
+	NM_ATT_IPACC_OBJ_VERSION	('9b'H),
+	NM_ATT_IPACC_GPRS_PAGING_CFG	('9c'H),
+	NM_ATT_IPACC_NSEI		('9d'H),
+	NM_ATT_IPACC_BVCI		('9e'H),
+	NM_ATT_IPACC_NSVCI		('9f'H),
+	NM_ATT_IPACC_NS_CFG		('a0'H),
+	NM_ATT_IPACC_BSSGP_CFG		('a1'H),
+	NM_ATT_IPACC_NS_LINK_CFG	('a2'H),
+	NM_ATT_IPACC_RLC_CFG		('a3'H),
+	NM_ATT_IPACC_ALM_THRESH_LIST	('a4'H),
+	NM_ATT_IPACC_MONIT_VAL_LIST	('a5'H),
+	NM_ATT_IPACC_TIB_CONTROL	('a6'H),
+	NM_ATT_IPACC_SUPP_FEATURES	('a7'H),
+	NM_ATT_IPACC_CODING_SCHEMES	('a8'H),
+	NM_ATT_IPACC_RLC_CFG_2		('a9'H),
+	NM_ATT_IPACC_HEARTB_TOUT	('aa'H),
+	NM_ATT_IPACC_UPTIME		('ab'H),
+	NM_ATT_IPACC_RLC_CFG_3		('ac'H),
+	NM_ATT_IPACC_SSL_CFG		('ad'H),
+	NM_ATT_IPACC_SEC_POSSIBLE	('ae'H),
+	NM_ATT_IPACC_IML_SSL_STATE	('af'H),
+	NM_ATT_IPACC_REVOC_DATE		('b0'H),
+
+
+/*
+	NM_ATT_BS11_RF_RES_IND_PER	('8f'H),
+
+	NM_ATT_BS11_RX_LEV_MIN_CELL	('90'H),
+	NM_ATT_BS11_ABIS_EXT_TIME	('91'H),
+	NM_ATT_BS11_TIMER_HO_REQUEST	('92'H),
+	NM_ATT_BS11_TIMER_NCELL		('93'H),
+	NM_ATT_BS11_TSYNC		('94'H),
+	NM_ATT_BS11_TTRAU		('95'H),
+	NM_ATT_BS11_EMRG_CFG_MEMBER	('9b'H),
+	NM_ATT_BS11_TRX_AREA		('9f'H),
+
+	NM_ATT_BS11_BCCH_RECONF		('d7'H),
+	NM_ATT_BS11_BIT_ERR_THESH	('a0'H),
+	NM_ATT_BS11_BOOT_SW_VERS	('a1'H),
+	NM_ATT_BS11_CCLK_ACCURACY	('a3'H),
+	NM_ATT_BS11_CCLK_TYPE		('a4'H),
+	NM_ATT_BS11_INP_IMPEDANCE	('aa'H),
+	NM_ATT_BS11_L1_PROT_TYPE	('ab'H),
+	NM_ATT_BS11_LINE_CFG		('ac'H),
+	NM_ATT_BS11_LI_PORT_1		('ad'H),
+	NM_ATT_BS11_LI_PORT_2		('ae'H),
+
+	NM_ATT_BS11_L1_REM_ALM_TYPE	('b0'H),
+	NM_ATT_BS11_SW_LOAD_INTENDED	('bb'H),
+	NM_ATT_BS11_SW_LOAD_SAFETY	('bc'H),
+	NM_ATT_BS11_SW_LOAD_STORED	('bd'H),
+
+	NM_ATT_BS11_VENDOR_NAME		('c1'H),
+	NM_ATT_BS11_HOPPING_MODE	('c5'H),
+	NM_ATT_BS11_LMT_LOGON_SESSION	('c6'H),
+	NM_ATT_BS11_LMT_LOGIN_TIME	('c7'H),
+	NM_ATT_BS11_LMT_USER_ACC_LEV	('c8'H),
+	NM_ATT_BS11_LMT_USER_NAME	('c9'H),
+
+	NM_ATT_BS11_L1_CONTROL_TS	('d8'H),
+	NM_ATT_BS11_RADIO_MEAS_GRAN	('dc'H),
+	NM_ATT_BS11_RADIO_MEAS_REP	('dd'H),
+
+	NM_ATT_BS11_SH_LAPD_INT_TIMER	('e8'H),
+
+	NM_ATT_BS11_BTS_STATE		('f0'H),
+	NM_ATT_BS11_E1_STATE		('f1'H),
+	NM_ATT_BS11_PLL			('f2'H),
+	NM_ATT_BS11_RX_OFFSET		('f3'H),
+	NM_ATT_BS11_ANT_TYPE		('f4'H),
+	NM_ATT_BS11_PLL_MODE		('fc'H),
+	NM_ATT_BS11_PASSWORD		('fd'H),
+*/
+
+	/* osmocom (osmo-bts) specific attributes, used in combination
+	 * with the "org.osmocom" manufacturer identification */
+	NM_ATT_OSMO_REDUCEPOWER		('fe'H)	/* TLV_TYPE_TV */
+
+} with { variant "FIELDLENGTH(8)" };
+
+/* Section 9.4.4 */
+type enumerated OML_FOM_AdministrativeState {
+	NM_STATE_LOCKED			('01'H),
+	NM_STATE_UNLOCKED		('02'H),
+	NM_STATE_SHUTDOWN		('03'H),
+	NM_STATE_NULL			('ff'H)
+} with { variant "FIELDLENGTH(8)" };
+
+/* Section 9.4.7 */
+type enumerated OML_FOM_AvailabilityStatus {
+	NM_AVSTATE_IN_TEST		(1),
+	NM_AVSTATE_POWER_OFF		(2),
+	NM_AVSTATE_OFF_LINE		(3),
+	NM_AVSTATE_DEPENDENCY		(5),
+	NM_AVSTATE_DEGRADED		(6),
+	NM_AVSTATE_NOT_INSTALLED	(7),
+	NM_AVSTATE_OK			(255)
+} with { variant "FIELDLENGTH(8)" };
+
+type enumerated OML_FOM_OperationalState {
+	NM_OPSTATE_DISABLED		(1),
+	NM_OPSTATE_ENABLED		(2),
+	NM_OPSTATE_NULL			(255)
+} with { variant "FIELDLENGTH(8)" };
+
+/* Section 9.4.13 */
+type enumerated OML_ChannelCombination {
+	NM_CHANC_TCHFull		('00'H), /* TCH/F + TCH/H + SACCH/TF */
+	NM_CHANC_TCHHalf		('01'H), /* TCH/H(0,1) + FACCH/H(0,1) + SACCH/TH(0,1) */
+	NM_CHANC_TCHHalf2		('02'H), /* TCH/H(0) + FACCH/H(0) + SACCH/TH(0) + TCH/H(1) */
+	NM_CHANC_SDCCH			('03'H), /* SDCCH/8 + SACCH/8 */
+	NM_CHANC_mainBCCH		('04'H), /* FCCH + SCH + BCCH + CCCH */
+	NM_CHANC_BCCHComb		('05'H), /* FCCH + SCH + BCCH + CCCH + SDCCH/4 + SACCH/C4 */
+	NM_CHANC_BCCH			('06'H), /* BCCH + CCCH */
+	NM_CHANC_BCCH_CBCH		('07'H), /* CHANC_BCCHComb + CBCH */
+	NM_CHANC_SDCCH_CBCH		('08'H), /* CHANC_SDCCH8 + CBCH */
+	/* ip.access + Osmocom */
+	NM_CHANC_IPAC_bPDCH		('0b'H), /* PBCCH + PCCCH + PDTCH/F + PACCH/F + PTCCH/F */
+	NM_CHANC_IPAC_cPDCH		('0c'H), /* PBCCH + PDTCH/F + PACCH/F + PTCCH/F */
+	NM_CHANC_IPAC_PDCH		('0d'H), /* PDTCH/F + PACCH/F + PTCCH/F */
+	NM_CHANC_IPAC_TCHFull_PDCH	('80'H),
+	NM_CHANC_IPAC_TCHFull_TCHHalf	('81'H),
+	/* Osmocom */
+	NM_CHANC_OSMO_TCHFull_TCHHalf_PDCH ('90'H)
+} with { variant "FIELDLENGTH(8)" };
+
+/* Section 9.4.16 */
+type enumerated OML_FOM_EventType {
+	NM_EVT_COMM_FAIL		(1),
+	NM_EVT_QOS_FAIL			(2),
+	NM_EVT_PROC_FAIL		(3),
+	NM_EVT_EQUIP_FAIL		(4),
+	NM_EVT_ENV_FAIL			(5)
+} with { variant "FIELDLENGTH(8)" };
+
+/* Section 9.4.63 */
+type enumerated OML_FOM_Severity {
+	NM_SEVER_CEASED			(0),
+	NM_SEVER_CRITICAL		(1),
+	NM_SEVER_MAJOR			(2),
+	NM_SEVER_MINOR			(3),
+	NM_SEVER_WARNING		(4),
+	NM_SEVER_INDETERMINATE		(5)
+} with { variant "FIELDLENGTH(8)" };
+
+/* Section 9.4.36 */
+type enumerated OML_FOM_NackCause {
+	/* General Nack Causes */
+	NM_NACK_INCORR_STRUCT		('01'H),
+	NM_NACK_MSGTYPE_INVAL		('02'H),
+	NM_NACK_OBJCLASS_INVAL		('05'H),
+	NM_NACK_OBJCLASS_NOTSUPP	('06'H),
+	NM_NACK_BTSNR_UNKN		('07'H),
+	NM_NACK_TRXNR_UNKN		('08'H),
+	NM_NACK_OBJINST_UNKN		('09'H),
+	NM_NACK_ATTRID_INVAL		('0c'H),
+	NM_NACK_ATTRID_NOTSUPP		('0d'H),
+	NM_NACK_PARAM_RANGE		('0e'H),
+	NM_NACK_ATTRLIST_INCONSISTENT	('0f'H),
+	NM_NACK_SPEC_IMPL_NOTSUPP	('10'H),
+	NM_NACK_CANT_PERFORM		('11'H),
+	/* Specific Nack Causes */
+	NM_NACK_RES_NOTIMPL		('19'H),
+	NM_NACK_RES_NOTAVAIL		('1a'H),
+	NM_NACK_FREQ_NOTAVAIL		('1b'H),
+	NM_NACK_TEST_NOTSUPP		('1c'H),
+	NM_NACK_CAPACITY_RESTR		('1d'H),
+	NM_NACK_PHYSCFG_NOTPERFORM	('1e'H),
+	NM_NACK_TEST_NOTINIT		('1f'H),
+	NM_NACK_PHYSCFG_NOTRESTORE	('20'H),
+	NM_NACK_TEST_NOSUCH		('21'H),
+	NM_NACK_TEST_NOSTOP		('22'H),
+	NM_NACK_MSGINCONSIST_PHYSCFG	('23'H),
+	NM_NACK_FILE_INCOMPLETE		('25'H),
+	NM_NACK_FILE_NOTAVAIL		('26'H),
+	NM_NACK_FILE_NOTACTIVATE	('27'H),
+	NM_NACK_REQ_NOT_GRANT		('28'H),
+	NM_NACK_WAIT			('29'H),
+	NM_NACK_NOTH_REPORT_EXIST	('2a'H),
+	NM_NACK_MEAS_NOTSUPP		('2b'H),
+	NM_NACK_MEAS_NOTSTART		('2c'H)
+} with { variant "FIELDLENGTH(8)" };
+
+
+
+type record OML_FOM {
+	uint8_t				len,
+	OML_FOM_Header			hdr,
+	OML_FOM_IE_List			ies optional
+} with { variant (len) "LENGTHTO(hdr,ies)" };
+
+type record OML_IE_LV {
+	uint8_t		len,
+	octetstring	payload
+} with { variant (len) "LENGTHTO(payload)" };
+
+type record OML_IE_L16V {
+	uint16_t	len,
+	octetstring	payload
+} with { variant (len) "LENGTHTO(payload)" };
+
+template (value) OML_IE_L16V ts_OML_IE_L16V(template (value) uint16_t len, template (value) octetstring payload) := {
+	len := len,
+	payload := payload
+}
+template OML_IE_L16V tr_OML_IE_L16V(template uint16_t len, template octetstring payload) := {
+	len := len,
+	payload := payload
+}
+
+
+type record OML_IE_AvailStatus {
+	uint16_t			len,
+	OML_FOM_AvailabilityStatus	avail_status
+} with { variant (len) "LENGTHTO(avail_status)" };
+
+/* Section 9.4.1 */
+type record OML_FOM_AbisChannel {
+	uint8_t		bts_port_nr,
+	uint8_t		timeslot_nr,
+	OML_FOM_Subslot	subslot_nr
+};
+type enumerated OML_FOM_Subslot {
+	NM_SUBSLOT_A		(0),
+	NM_SUBSLOT_B		(1),
+	NM_SUBSLOT_C		(2),
+	NM_SUBSLOT_D		(3),
+	NM_SUBSLOT_64k		(255)
+} with { variant "FIELDLENGTH(8)" };
+
+/* Section 9.4.5 */
+type record of uint16_t OML_ArfcnList;
+type record OML_IE_ArfcnList {
+	uint16_t 	len,
+	OML_ArfcnList	arfcn_list
+};
+
+/* Section 9.4.25 */
+type record length(6) of uint8_t OML_FOM_InterfLevBoundaries;
+
+/* Section 9.4.42 */
+type record length(3) of uint8_t OML_FOM_PowerOuthputThresholds;
+
+/* Section 9.4.43 */
+type enumerated OML_FOM_ProbableCauseType {
+	NM_PCAUSE_T_X721	(1),
+	NM_PCAUSE_T_GSM		(2),
+	NM_PCAUSE_T_MANUF	(3)
+} with { variant "FIELDLENGTH(8)" };
+type record OML_FOM_ProbableCause {
+	OML_FOM_ProbableCauseType	cause_type,
+	OCT2				cause_value
+};
+
+/* Section 9.4.53 */
+type record OML_FOM_T200 {
+	uint8_t		sdcch_5ms,
+	uint8_t		facch_f_5ms,
+	uint8_t		facch_h_5ms,
+	uint8_t		sacch_tch_sapi0_10ms,
+	uint8_t		sacch_sdcch_10ms,
+	uint8_t		sdcch_sapi3_5ms,
+	uint8_t		sacch_rch_sapi3_10ms
+};
+
+type union OML_FOM_IE_Body {
+	OML_FOM_AbisChannel		abis_channel,
+	OML_FOM_AdministrativeState	adm_state,
+	OCT1				auton_report,
+	uint16_t			bcch_arfcn,
+	uint8_t				bsic,
+	uint8_t				air_timer,
+	uint8_t				load_ind_period,
+	uint8_t				load_threshold,
+	OML_ChannelCombination		chan_comb,
+	OML_FOM_EventType		event_type,
+	uint16_t			gsm_time,
+	uint8_t				hsn,
+	uint8_t				intave_param,
+	OML_FOM_InterfLevBoundaries	interf_bound,
+	uint8_t				maio,
+	uint8_t				manuf_state,
+	uint8_t				max_ta,
+	OML_FOM_NackCause		nack_causes,
+	uint8_t				ny1,
+	OML_FOM_OperationalState	opstate,
+	uint8_t				power_class,
+	OML_FOM_PowerOuthputThresholds	power_thresh,
+	OML_FOM_ProbableCause		prob_cause,
+	uint8_t				rach_b_thresh,
+	uint16_t			loadavg_slots,
+	uint8_t				radio_subch,
+	uint8_t				rf_maxpwr_r,
+	uint8_t				spec_prob,
+	uint16_t			start_time,
+	OML_FOM_T200			t200,
+	uint8_t				tei,
+	uint8_t				test_no,
+	OCT2				vswr_thresh,
+	uint8_t				window_size,
+	uint8_t				tsc,
+	OML_FOM_Severity		severity,
+	uint8_t				outst_alarm,
+	uint8_t				meas_type,
+
+	OML_IE_AvailStatus		avail_status,
+	OML_IE_ArfcnList		arfcn_list,
+
+	uint32_t		ip,
+	uint16_t		portnr,
+	uint8_t			stream_id,
+	OCT6			sec_oml_cfg,
+	OCT8			ip_if_cfg,
+	OCT12			ip_gw_cfg,
+	uint32_t		in_serv_time,
+	uint16_t		paging_cfg,
+	OCT2			freq_ctrl,
+
+	OML_IE_L16V		other
+};
+
+type record OML_FOM_IE {
+	OML_FOM_IE_Type		iei,
+	OML_FOM_IE_Body		body
+} with { variant (body) "CROSSTAG(
+		abis_channel, iei = NM_ATT_ABIS_CHANNEL;
+		adm_state, iei = NM_ATT_ADM_STATE;
+		auton_report, iei = NM_ATT_AUTON_REPORT;
+		bcch_arfcn, iei = NM_ATT_BCCH_ARFCN;
+		bsic, iei = NM_ATT_BSIC;
+		air_timer, iei = NM_ATT_BTS_AIR_TIMER;
+		load_ind_period, iei = NM_ATT_CCCH_L_I_P;
+		load_threshold, iei = NM_ATT_CCCH_L_T;
+		chan_comb, iei = NM_ATT_CHAN_COMB;
+		event_type, iei = NM_ATT_EVENT_TYPE;
+		gsm_time, iei = NM_ATT_GSM_TIME;
+		hsn, iei = NM_ATT_HSN;
+		intave_param, iei = NM_ATT_INTAVE_PARAM;
+		interf_bound, iei = NM_ATT_INTERF_BOUND;
+		maio, iei = NM_ATT_MAIO;
+		manuf_state, iei = NM_ATT_MANUF_STATE;
+		max_ta, iei = NM_ATT_MAX_TA;
+		nack_causes, iei = NM_ATT_NACK_CAUSES;
+		ny1, iei = NM_ATT_NY1;
+		opstate, iei = NM_ATT_OPER_STATE;
+		power_class, iei = NM_ATT_POWER_CLASS;
+		power_thresh, iei = NM_ATT_POWER_THRESH;
+		prob_cause, iei = NM_ATT_PROB_CAUSE;
+		rach_b_thresh, iei = NM_ATT_RACH_B_THRESH;
+		loadavg_slots, iei = NM_ATT_LDAVG_SLOTS;
+		radio_subch, iei = NM_ATT_RAD_SUBC;
+		rf_maxpwr_r, iei = NM_ATT_RF_MAXPOWR_R;
+		spec_prob, iei = NM_ATT_SPEC_PROB;
+		start_time, iei = NM_ATT_START_TIME;
+		t200, iei = NM_ATT_T200;
+		tei, iei = NM_ATT_TEI;
+		test_no, iei = NM_ATT_TEST_NO;
+		vswr_thresh, iei = NM_ATT_VSWR_THRESH;
+		window_size, iei = NM_ATT_WINDOW_SIZE;
+		tsc, iei = NM_ATT_TSC;
+		severity, iei = NM_ATT_SEVERITY;
+		outst_alarm, iei = NM_ATT_OUTST_ALARM;
+		meas_type, iei = NM_ATT_MEAS_TYPE;
+
+		avail_status, iei = NM_ATT_AVAIL_STATUS;
+		arfcn_list, iei = NM_ATT_ARFCN_LIST;
+
+		ip, iei = NM_ATT_IPACC_DST_IP;
+		portnr, iei = NM_ATT_IPACC_DST_IP_PORT;
+		stream_id, iei = NM_ATT_IPACC_STREAM_ID;
+		sec_oml_cfg, iei = NM_ATT_IPACC_SEC_OML_CFG;
+		ip_if_cfg, iei = NM_ATT_IPACC_IP_IF_CFG;
+		ip_gw_cfg, iei = NM_ATT_IPACC_IP_GW_CFG;
+		in_serv_time, iei = NM_ATT_IPACC_IN_SERV_TIME;
+		paging_cfg, iei = NM_ATT_IPACC_PAGING_CFG;
+		freq_ctrl, iei = NM_ATT_IPACC_FREQ_CTRL;
+
+		other, OTHERWISE;
+	)" };
+
+type record of OML_FOM_IE OML_FOM_IE_List;
+
+type record OML_MANUF_IPA {
+	uint8_t			len,
+	uint8_t			str_len,
+	charstring		manuf_str,
+	OML_FOM_Header		hdr,
+	OML_FOM_IE_List		ies optional
+} with { variant (len) "LENGTHTO(hdr,ies)"
+         variant (str_len) "LENGTHTO(manuf_str)" };
+
+type union OML_MANUF {
+	OML_MANUF_IPA			ipa
+};
+
+
+external function enc_OML_PDU(in OML_PDU msg) return octetstring
+	with { extension "prototype(convert) encode(RAW)" };
+external function dec_OML_PDU(in octetstring stream) return OML_PDU
+	with { extension "prototype(convert) decode(RAW)" };
+
+
+
+template (value) OML_FOM_IE ts_OML_IE(OML_FOM_IE_Type iei, template (value) OML_FOM_IE_Body body) := {
+	iei := iei,
+	body := body
+}
+template OML_FOM_IE tr_OML_IE(OML_FOM_IE_Type iei, template OML_FOM_IE_Body body) := {
+	iei := ?,
+	body := body
+}
+
+template OML_PDU tr_OML_FOM_only := {
+	mdisc := ABIS_OM_MDISC_FOM,
+	placement := ABIS_OM_PLACEMENT_ONLY,
+	sequence := 0,
+	u := ?
+}
+
+template OML_PDU tr_OML_MsgType(template OML_FOM_MessageType msg_type,
+				template OML_FOM_ObjectClass obj_class := ?,
+				template OML_FOM_ObjectInstance obj_inst := ?,
+				template OML_FOM_IE_List ies := *)
+modifies tr_OML_FOM_only := {
+	u := {
+		fom := {
+			hdr := {
+				msg_type := msg_type,
+				obj_class := obj_class,
+				obj_inst := obj_inst
+			},
+			ies := ies
+		}
+	}
+}
+template (value) OML_PDU ts_OML_MsgType(template (value) OML_FOM_MessageType msg_type,
+					template (value) OML_FOM_ObjectClass obj_class,
+					template (value) OML_FOM_ObjectInstance obj_inst,
+					template (omit) OML_FOM_IE_List ies := omit) := {
+	mdisc := ABIS_OM_MDISC_FOM,
+	placement := ABIS_OM_PLACEMENT_ONLY,
+	sequence := 0,
+	u := {
+		fom := {
+			len := 0, /* overwritten */
+			hdr := ts_OML_FomHeader(msg_type, obj_class, obj_inst),
+			ies := ies
+		}
+	}
+}
+
+
+template (value) OML_FOM_Header ts_OML_FomHeader(template (value) OML_FOM_MessageType msg_type,
+						 template (value) OML_FOM_ObjectClass obj_class,
+						 template (value) OML_FOM_ObjectInstance obj_inst) := {
+	msg_type := msg_type,
+	obj_class := obj_class,
+	obj_inst := obj_inst
+}
+template OML_FOM_Header tr_OML_FomHeader(template OML_FOM_MessageType msg_type,
+					 template OML_FOM_ObjectClass obj_class,
+					 template OML_FOM_ObjectInstance obj_inst) := {
+	msg_type := msg_type,
+	obj_class := obj_class,
+	obj_inst := obj_inst
+}
+
+
+template (value) OML_FOM_ObjectInstance ts_OML_ObjectInstance(uint8_t bts, uint8_t trx, uint8_t ts) := {
+	bts_nr := bts,
+	trx_nr := trx,
+	ts_nr := ts
+}
+template OML_FOM_ObjectInstance tr_OML_ObjectInstance(template uint8_t bts, template uint8_t trx,
+						      template uint8_t ts) := {
+	bts_nr := bts,
+	trx_nr := trx,
+	ts_nr := ts
+}
+
+
+
+template (value) OML_PDU ts_OML_IPA_MsgType(template (value) OML_FOM_MessageType msg_type,
+					    template (value) OML_FOM_ObjectClass obj_class,
+					    template (value) OML_FOM_ObjectInstance obj_inst,
+					    template (omit) OML_FOM_IE_List ies := omit) := {
+	mdisc := ABIS_OM_MDISC_MANUF,
+	placement := ABIS_OM_PLACEMENT_ONLY,
+	sequence := 0,
+	u := {
+		manuf := {
+			ipa := {
+				len := 0, /* overwritten */
+				str_len := 13,
+				manuf_str := "com.ipaccess" & char(0,0,0,0),
+				hdr := ts_OML_FomHeader(msg_type, obj_class, obj_inst),
+				ies := ies
+			}
+		}
+	}
+}
+template OML_PDU tr_OML_IPA_MsgType(template OML_FOM_MessageType msg_type := ?,
+				    template OML_FOM_ObjectClass obj_class := ?,
+				    template OML_FOM_ObjectInstance obj_inst := ?,
+				    template OML_FOM_IE_List ies := *) := {
+	mdisc := ABIS_OM_MDISC_MANUF,
+	placement := ABIS_OM_PLACEMENT_ONLY,
+	sequence := 0,
+	u := {
+		manuf := {
+			ipa := {
+				len := ?,
+				str_len := 13,
+				manuf_str := "com.ipaccess" & char(0,0,0,0),
+				hdr := tr_OML_FomHeader(msg_type, obj_class, obj_inst),
+				ies := ies
+			}
+		}
+	}
+}
+
+/* 8.8.1 State Changed Event Report */
+template (value) OML_PDU ts_OML_StateChgEvtRep(template (value) OML_FOM_ObjectClass obj_class,
+					       template (value) OML_FOM_ObjectInstance obj_inst,
+					       template (value) OML_FOM_OperationalState opstate,
+					       template (value) OML_FOM_AvailabilityStatus avstate) :=
+	ts_OML_MsgType(NM_MT_STATECHG_EVENT_REP, obj_class, obj_inst, {
+			ts_OML_IE(NM_ATT_OPER_STATE, OML_FOM_IE_Body:{opstate := opstate}),
+			ts_OML_IE(NM_ATT_AVAIL_STATUS, OML_FOM_IE_Body:{avail_status := {len:= 1, avail_status := avstate}})
+			});
+template OML_PDU tr_OML_StateChgEvtRep(template OML_FOM_ObjectClass obj_class,
+				       template OML_FOM_ObjectInstance obj_inst,
+				       template OML_FOM_OperationalState opstate := ?,
+				       template OML_FOM_AvailabilityStatus avstate := ?) :=
+	tr_OML_MsgType(NM_MT_STATECHG_EVENT_REP, obj_class, obj_inst, {
+			tr_OML_IE(NM_ATT_OPER_STATE, OML_FOM_IE_Body:{opstate := opstate}),
+			tr_OML_IE(NM_ATT_AVAIL_STATUS, OML_FOM_IE_Body:{avail_status := {len := 1, avail_status := avstate}})
+			});
+
+/* 8.8.2 Failure Event Report */
+template (value) OML_PDU ts_OML_FailureEvtRep(template (value) OML_FOM_ObjectClass obj_class,
+					      template (value) OML_FOM_ObjectInstance obj_inst,
+					      template (value) OML_FOM_EventType evt_type,
+					      template (value) OML_FOM_Severity severity,
+					      template (value) OML_FOM_ProbableCause cause) :=
+	ts_OML_MsgType(NM_MT_FAILURE_EVENT_REP, obj_class, obj_inst, {
+			ts_OML_IE(NM_ATT_EVENT_TYPE, OML_FOM_IE_Body:{event_type := evt_type}),
+			ts_OML_IE(NM_ATT_SEVERITY, OML_FOM_IE_Body:{severity := severity}),
+			ts_OML_IE(NM_ATT_PROB_CAUSE, OML_FOM_IE_Body:{prob_cause := cause})
+			});
+template OML_PDU tr_OML_FailureEvtRep(template OML_FOM_ObjectClass obj_class,
+				      template OML_FOM_ObjectInstance obj_inst,
+				      template OML_FOM_EventType evt_type,
+				      template OML_FOM_Severity severity,
+				      template OML_FOM_ProbableCause cause) :=
+	tr_OML_MsgType(NM_MT_FAILURE_EVENT_REP, obj_class, obj_inst, {
+			tr_OML_IE(NM_ATT_EVENT_TYPE, OML_FOM_IE_Body:{event_type := evt_type}),
+			tr_OML_IE(NM_ATT_SEVERITY, OML_FOM_IE_Body:{severity := severity}),
+			tr_OML_IE(NM_ATT_PROB_CAUSE, OML_FOM_IE_Body:{prob_cause := cause}),
+			*
+			});
+
+/* 8.8.5 Change Administrative State */
+template (value) OML_PDU ts_OML_ChangeAdmState(template (value) OML_FOM_ObjectClass obj_class,
+						template (value) OML_FOM_ObjectInstance obj_inst,
+						template (value) OML_FOM_AdministrativeState adm_st) :=
+	ts_OML_MsgType(NM_MT_CHG_ADM_STATE, obj_class, obj_inst, {
+			ts_OML_IE(NM_ATT_ADM_STATE, OML_FOM_IE_Body:{adm_state := adm_st})
+			});
+template OML_PDU tr_OML_ChangeAdmState(template OML_FOM_ObjectClass obj_class,
+					template OML_FOM_ObjectInstance obj_inst,
+					template OML_FOM_AdministrativeState adm_st) :=
+	tr_OML_MsgType(NM_MT_CHG_ADM_STATE, obj_class, obj_inst, {
+			tr_OML_IE(NM_ATT_ADM_STATE, OML_FOM_IE_Body:{adm_state := adm_st})
+			});
+
+template (value) OML_PDU ts_OML_ChangeAdmStateACK(template (value) OML_FOM_ObjectClass obj_class,
+						template (value) OML_FOM_ObjectInstance obj_inst,
+						template (value) OML_FOM_AdministrativeState adm_st) :=
+	ts_OML_MsgType(NM_MT_CHG_ADM_STATE_ACK, obj_class, obj_inst, {
+			ts_OML_IE(NM_ATT_ADM_STATE, OML_FOM_IE_Body:{adm_state := adm_st})
+			});
+template OML_PDU tr_OML_ChangeAdmStateACK(template OML_FOM_ObjectClass obj_class,
+					template OML_FOM_ObjectInstance obj_inst,
+					template OML_FOM_AdministrativeState adm_st) :=
+	tr_OML_MsgType(NM_MT_CHG_ADM_STATE_ACK, obj_class, obj_inst, {
+			tr_OML_IE(NM_ATT_ADM_STATE, OML_FOM_IE_Body:{adm_state := adm_st})
+			});
+template (value) OML_PDU ts_OML_ChangeAdmStateNACK(template (value) OML_FOM_ObjectClass obj_class,
+						template (value) OML_FOM_ObjectInstance obj_inst,
+						template (value) OML_FOM_NackCause cause) :=
+	ts_OML_MsgType(NM_MT_CHG_ADM_STATE_NACK, obj_class, obj_inst, {
+			ts_OML_IE(NM_ATT_NACK_CAUSES, OML_FOM_IE_Body:{nack_causes := cause})
+			});
+template OML_PDU tr_OML_ChangeAdmStateNACK(template OML_FOM_ObjectClass obj_class,
+					   template OML_FOM_ObjectInstance obj_inst,
+					   template OML_FOM_NackCause cause := ?) :=
+	tr_OML_MsgType(NM_MT_CHG_ADM_STATE_NACK, obj_class, obj_inst, {
+			*,
+			tr_OML_IE(NM_ATT_NACK_CAUSES, OML_FOM_IE_Body:{nack_causes := cause})
+			});
+
+
+
+
+
+/* 8.9.2 Opstart */
+template (value) OML_PDU ts_OML_Opstart(template (value) OML_FOM_ObjectClass obj_class,
+					template (value) OML_FOM_ObjectInstance obj_inst) :=
+	ts_OML_MsgType(NM_MT_OPSTART, obj_class, obj_inst);
+template OML_PDU tr_OML_Opstart(template OML_FOM_ObjectClass obj_class,
+				template OML_FOM_ObjectInstance obj_inst) :=
+	tr_OML_MsgType(NM_MT_OPSTART, obj_class, obj_inst);
+
+template (value) OML_PDU ts_OML_OpstartACK(template (value) OML_FOM_ObjectClass obj_class,
+					   template (value) OML_FOM_ObjectInstance obj_inst) :=
+	ts_OML_MsgType(NM_MT_OPSTART_ACK, obj_class, obj_inst);
+template OML_PDU tr_OML_OpstartACK(template OML_FOM_ObjectClass obj_class,
+				   template OML_FOM_ObjectInstance obj_inst) :=
+	tr_OML_MsgType(NM_MT_OPSTART_ACK, obj_class, obj_inst);
+
+template (value) OML_PDU ts_OML_OpstartNACK(template (value) OML_FOM_ObjectClass obj_class,
+					    template (value) OML_FOM_ObjectInstance obj_inst,
+					    template (value) OML_FOM_NackCause cause) :=
+	ts_OML_MsgType(NM_MT_OPSTART_NACK, obj_class, obj_inst, {
+		ts_OML_IE(NM_ATT_NACK_CAUSES, OML_FOM_IE_Body:{nack_causes := cause})
+		});
+template OML_PDU tr_OML_OpstartNACK(template OML_FOM_ObjectClass obj_class,
+				   template OML_FOM_ObjectInstance obj_inst,
+				   template OML_FOM_NackCause cause := ?) :=
+	tr_OML_MsgType(NM_MT_OPSTART_NACK, obj_class, obj_inst, {
+		tr_OML_IE(NM_ATT_NACK_CAUSES, OML_FOM_IE_Body:{nack_causes := cause})
+		});
+
+/* 8.3.5 SW Activate Request */
+template (value) OML_PDU ts_OML_SwActReq(template (value) OML_FOM_ObjectClass obj_class,
+					 template (value) OML_FOM_ObjectInstance obj_inst,
+					 template (value) octetstring hw_config,
+					 template (value) octetstring sw_config) :=
+	ts_OML_MsgType(NM_MT_SW_ACT_REQ, obj_class, obj_inst, {
+		ts_OML_IE(NM_ATT_HW_CONFIG, OML_FOM_IE_Body:{other := ts_OML_IE_L16V(0, hw_config)}),
+		ts_OML_IE(NM_ATT_SW_CONFIG, OML_FOM_IE_Body:{other := ts_OML_IE_L16V(0, sw_config)})
+		});
+template OML_PDU tr_OML_SwActReq(template OML_FOM_ObjectClass obj_class,
+				 template OML_FOM_ObjectInstance obj_inst,
+				 template octetstring hw_config,
+				 template octetstring sw_config) :=
+	tr_OML_MsgType(NM_MT_SW_ACT_REQ, obj_class, obj_inst, {
+		tr_OML_IE(NM_ATT_HW_CONFIG, OML_FOM_IE_Body:{other := tr_OML_IE_L16V(?, hw_config)}),
+		tr_OML_IE(NM_ATT_SW_CONFIG, OML_FOM_IE_Body:{other := tr_OML_IE_L16V(?, sw_config)})
+		});
+
+template (value) OML_PDU ts_OML_SwActReqACK(template (value) OML_FOM_ObjectClass obj_class,
+					 template (value) OML_FOM_ObjectInstance obj_inst,
+					 template (value) octetstring hw_config,
+					 template (value) octetstring sw_config) :=
+	ts_OML_MsgType(NM_MT_SW_ACT_REQ_ACK, obj_class, obj_inst, {
+		ts_OML_IE(NM_ATT_HW_CONFIG, OML_FOM_IE_Body:{other := ts_OML_IE_L16V(0, hw_config)}),
+		ts_OML_IE(NM_ATT_SW_CONFIG, OML_FOM_IE_Body:{other := ts_OML_IE_L16V(0, sw_config)})
+		});
+template OML_PDU tr_OML_SwActReqACK(template OML_FOM_ObjectClass obj_class,
+				 template OML_FOM_ObjectInstance obj_inst,
+				 template octetstring hw_config,
+				 template octetstring sw_config) :=
+	tr_OML_MsgType(NM_MT_SW_ACT_REQ_ACK, obj_class, obj_inst, {
+		tr_OML_IE(NM_ATT_HW_CONFIG, OML_FOM_IE_Body:{other := tr_OML_IE_L16V(?, hw_config)}),
+		tr_OML_IE(NM_ATT_SW_CONFIG, OML_FOM_IE_Body:{other := tr_OML_IE_L16V(?, sw_config)})
+		});
+
+/* 8.3.6 Activate SW */
+template (value) OML_PDU ts_OML_ActivateSw(template (value) OML_FOM_ObjectClass obj_class,
+					 template (value) OML_FOM_ObjectInstance obj_inst,
+					 template (value) octetstring file_id,
+					 template (value) octetstring sw_desc) :=
+	ts_OML_MsgType(NM_MT_ACTIVATE_SW, obj_class, obj_inst, {
+		ts_OML_IE(NM_ATT_FILE_ID, OML_FOM_IE_Body:{other := ts_OML_IE_L16V(0, file_id)}),
+		ts_OML_IE(NM_ATT_SW_DESCR, OML_FOM_IE_Body:{other := ts_OML_IE_L16V(0, sw_desc)})
+		});
+template OML_PDU tr_OML_ActivateSw(template OML_FOM_ObjectClass obj_class,
+				 template OML_FOM_ObjectInstance obj_inst,
+				 template octetstring file_id,
+				 template octetstring sw_desc) :=
+	tr_OML_MsgType(NM_MT_ACTIVATE_SW, obj_class, obj_inst, {
+		tr_OML_IE(NM_ATT_FILE_ID, OML_FOM_IE_Body:{other := tr_OML_IE_L16V(?, file_id)}),
+		tr_OML_IE(NM_ATT_SW_DESCR, OML_FOM_IE_Body:{other := tr_OML_IE_L16V(?, sw_desc)})
+		});
+
+template (value) OML_PDU ts_OML_ActivateSwACK(template (value) OML_FOM_ObjectClass obj_class,
+					 template (value) OML_FOM_ObjectInstance obj_inst,
+					 template (value) octetstring file_id,
+					 template (value) octetstring sw_desc) :=
+	ts_OML_MsgType(NM_MT_ACTIVATE_SW_ACK, obj_class, obj_inst, {
+		ts_OML_IE(NM_ATT_FILE_ID, OML_FOM_IE_Body:{other := ts_OML_IE_L16V(0, file_id)}),
+		ts_OML_IE(NM_ATT_SW_DESCR, OML_FOM_IE_Body:{other := ts_OML_IE_L16V(0, sw_desc)})
+		});
+template OML_PDU tr_OML_ActivateSwACK(template OML_FOM_ObjectClass obj_class,
+				 template OML_FOM_ObjectInstance obj_inst,
+				 template octetstring file_id,
+				 template octetstring sw_desc) :=
+	tr_OML_MsgType(NM_MT_ACTIVATE_SW_ACK, obj_class, obj_inst, {
+		tr_OML_IE(NM_ATT_FILE_ID, OML_FOM_IE_Body:{other := tr_OML_IE_L16V(?, file_id)}),
+		tr_OML_IE(NM_ATT_SW_DESCR, OML_FOM_IE_Body:{other := tr_OML_IE_L16V(?, sw_desc)})
+		});
+
+/* 8.3.7 SW Activated Report */
+template (value) OML_PDU ts_OML_SwActivatedRep(template (value) OML_FOM_ObjectClass obj_class,
+					       template (value) OML_FOM_ObjectInstance obj_inst) :=
+	ts_OML_MsgType(NM_MT_SW_ACTIVATED_REP, obj_class, obj_inst, {});
+template OML_PDU tr_OML_SwActivatedRep(template OML_FOM_ObjectClass obj_class,
+				       template OML_FOM_ObjectInstance obj_inst) :=
+	tr_OML_MsgType(NM_MT_SW_ACTIVATED_REP, obj_class, obj_inst, *);
+
+
+/* 8.6.1 Set BTS Attributes */
+template (value) OML_PDU ts_OML_SetBtsAttr(template (value) OML_FOM_ObjectInstance obj_inst,
+					   template (value) OML_FOM_IE_List ies) :=
+	ts_OML_MsgType(NM_MT_SET_BTS_ATTR, NM_OC_BTS, obj_inst, ies);
+template OML_PDU tr_OML_SetBtsAttr(template OML_FOM_ObjectInstance obj_inst,
+				   template OML_FOM_IE_List ies) :=
+	tr_OML_MsgType(NM_MT_SET_BTS_ATTR, NM_OC_BTS, obj_inst, ies);
+
+
+/* 8.6.2 Set Radio Carrier Attributes */
+template (value) OML_PDU ts_OML_SetRadioAttr(template (value) OML_FOM_ObjectInstance obj_inst,
+					     template (value) uint8_t maxpwr_r,
+					     template (value) OML_ArfcnList arfcn_list) :=
+	ts_OML_MsgType(NM_MT_SET_RADIO_ATTR, NM_OC_RADIO_CARRIER, obj_inst, {
+		ts_OML_IE(NM_ATT_RF_MAXPOWR_R, OML_FOM_IE_Body:{rf_maxpwr_r := maxpwr_r}),
+		ts_OML_IE(NM_ATT_ARFCN_LIST, OML_FOM_IE_Body:{arfcn_list := {len:=0, arfcn_list:=arfcn_list}})
+		});
+template OML_PDU tr_OML_SetRadioAttr(template OML_FOM_ObjectInstance obj_inst,
+				     template uint8_t maxpwr_r,
+				     template OML_ArfcnList arfcn_list) :=
+	tr_OML_MsgType(NM_MT_SET_RADIO_ATTR, NM_OC_RADIO_CARRIER, obj_inst, {
+		tr_OML_IE(NM_ATT_RF_MAXPOWR_R, OML_FOM_IE_Body:{rf_maxpwr_r := maxpwr_r}),
+		tr_OML_IE(NM_ATT_ARFCN_LIST, OML_FOM_IE_Body:{arfcn_list := {len:=0, arfcn_list:=arfcn_list}})
+		});
+
+
+/* 8.6.3 Set Channel Attributes */
+template (value) OML_PDU ts_OML_SetChanAttr(template (value) OML_FOM_ObjectInstance obj_inst,
+					    template (value) OML_ChannelCombination chan_comb,
+					    template (value) uint8_t tsc) :=
+	ts_OML_MsgType(NM_MT_SET_CHAN_ATTR, NM_OC_CHANNEL, obj_inst, {
+		ts_OML_IE(NM_ATT_CHAN_COMB, OML_FOM_IE_Body:{chan_comb := chan_comb}),
+		ts_OML_IE(NM_ATT_TSC, OML_FOM_IE_Body:{tsc := tsc})
+		});
+template OML_PDU tr_OML_SetChanAttr(template OML_FOM_ObjectInstance obj_inst,
+				    template OML_ChannelCombination chan_comb,
+				    template uint8_t tsc) :=
+	tr_OML_MsgType(NM_MT_SET_CHAN_ATTR, NM_OC_CHANNEL, obj_inst, {
+		tr_OML_IE(NM_ATT_CHAN_COMB, OML_FOM_IE_Body:{chan_comb := chan_comb}),
+		*,
+		tr_OML_IE(NM_ATT_TSC, OML_FOM_IE_Body:{tsc := tsc})
+		});
+
+
+/* 8.11.1 Get Attributes */
+template (value) OML_PDU ts_OML_GetAttributes(template (value) OML_FOM_ObjectClass obj_class,
+					      template (value) OML_FOM_ObjectInstance obj_inst,
+					      template (value) octetstring req_attr) :=
+	ts_OML_MsgType(NM_MT_GET_ATTR, obj_class, obj_inst, {
+		ts_OML_IE(NM_ATT_LIST_REQ_ATTR, OML_FOM_IE_Body:{other := ts_OML_IE_L16V(0, req_attr)})
+			});
+template OML_PDU tr_OML_GetAttributes(template OML_FOM_ObjectClass obj_class,
+				      template OML_FOM_ObjectInstance obj_inst,
+				      template octetstring req_attr) :=
+	tr_OML_MsgType(NM_MT_GET_ATTR, obj_class, obj_inst, {
+		tr_OML_IE(NM_ATT_LIST_REQ_ATTR, OML_FOM_IE_Body:{other := tr_OML_IE_L16V(?, req_attr)})
+			});
+
+/* convert a request into an ACK */
+function f_OML_make_ack(OML_PDU orig) return OML_PDU {
+	var OML_PDU resp := orig;
+	if (ischosen(resp.u.fom)) {
+		int2enum(enum2int(orig.u.fom.hdr.msg_type)+1, resp.u.fom.hdr.msg_type);
+	} else if (ischosen(resp.u.manuf)) {
+		int2enum(enum2int(orig.u.manuf.ipa.hdr.msg_type)+1, resp.u.manuf.ipa.hdr.msg_type);
+	} else {
+		testcase.stop("Unsupported OML in f_OML_make_ack(): ", orig);
+	}
+	return resp;
+}
+function f_OML_make_ack_exp(OML_PDU orig) return template OML_PDU {
+	var template OML_PDU resp := orig;
+	var OML_FOM_MessageType msg_t;
+	if (ischosen(resp.u.fom)) {
+		resp.u.fom.len := ?;
+		int2enum(enum2int(orig.u.fom.hdr.msg_type)+1, msg_t);
+		resp.u.fom.hdr.msg_type := msg_t;
+	} else if (ischosen(resp.u.manuf)) {
+		resp.u.manuf.ipa.len := ?;
+		int2enum(enum2int(orig.u.manuf.ipa.hdr.msg_type)+1, msg_t);
+		resp.u.manuf.ipa.hdr.msg_type := msg_t;
+	} else {
+		testcase.stop("Unsupported OML in f_OML_make_ack(): ", orig);
+	}
+	return resp;
+}
+
+/* convert a request into a NACK, appending the cause IE */
+function f_OML_make_nack(OML_PDU orig, OML_FOM_NackCause cause) return OML_PDU {
+	var OML_PDU resp := orig;
+	if (ischosen(resp.u.fom)) {
+		int2enum(enum2int(orig.u.fom.hdr.msg_type)+2, resp.u.fom.hdr.msg_type);
+		resp.u.fom.ies := orig.u.fom.ies & {
+			valueof(ts_OML_IE(NM_ATT_NACK_CAUSES, OML_FOM_IE_Body:{nack_causes := cause}))
+			};
+	} else if (ischosen(resp.u.manuf)) {
+		int2enum(enum2int(orig.u.manuf.ipa.hdr.msg_type)+2, resp.u.manuf.ipa.hdr.msg_type);
+		resp.u.manuf.ipa.ies := orig.u.manuf.ipa.ies & {
+			valueof(ts_OML_IE(NM_ATT_NACK_CAUSES, OML_FOM_IE_Body:{nack_causes := cause}))
+			};
+	} else {
+		testcase.stop("Unsupported OML in f_OML_make_nack(): ", orig);
+	}
+	return resp;
+}
+function f_OML_make_nack_exp(OML_PDU orig, template OML_FOM_NackCause cause) return template OML_PDU {
+	var template OML_PDU resp := orig;
+	var OML_FOM_MessageType msg_t;
+	if (ischosen(resp.u.fom)) {
+		resp.u.fom.len := ?;
+		int2enum(enum2int(orig.u.fom.hdr.msg_type)+2, msg_t);
+		resp.u.fom.hdr.msg_type := msg_t;
+		resp.u.fom.ies := { *,
+			tr_OML_IE(NM_ATT_NACK_CAUSES, OML_FOM_IE_Body:{nack_causes := cause})
+			};
+	} else if (ischosen(resp.u.manuf)) {
+		resp.u.manuf.ipa.len := ?;
+		int2enum(enum2int(orig.u.manuf.ipa.hdr.msg_type)+2, msg_t);
+		resp.u.manuf.ipa.hdr.msg_type := msg_t;
+		resp.u.manuf.ipa.ies := { *,
+			tr_OML_IE(NM_ATT_NACK_CAUSES, OML_FOM_IE_Body:{nack_causes := cause})
+			};
+/*
+		resp.u.manuf.ipa.ies := resp.u.manuf.ipa.ies & {
+			tr_OML_IE(NM_ATT_NACK_CAUSES, OML_FOM_IE_Body:{nack_causes := cause})
+			};
+*/
+	} else {
+		testcase.stop("Unsupported OML in f_OML_make_nack_exp(): ", orig);
+	}
+	return resp;
+}
+
+
+
+/***********************************************************************
+ * IPA / Osmocom specifics
+ ***********************************************************************/
+
+
+
+template (value) OML_PDU ts_OML_IPA_RslConnect(uint8_t stream_id, uint16_t port_nr) :=
+	ts_OML_IPA_MsgType(NM_MT_IPACC_RSL_CONNECT, NM_OC_BASEB_TRANSC, ts_OML_ObjectInstance(0,0,255), {
+			   ts_OML_IE(NM_ATT_IPACC_STREAM_ID, OML_FOM_IE_Body:{stream_id := stream_id}),
+			   ts_OML_IE(NM_ATT_IPACC_DST_IP_PORT, OML_FOM_IE_Body:{portnr := port_nr})
+			   });
+template OML_PDU tr_OML_IPA_RslConnect(template uint8_t stream_id, template uint16_t port_nr) :=
+	tr_OML_IPA_MsgType(NM_MT_IPACC_RSL_CONNECT, NM_OC_BASEB_TRANSC, tr_OML_ObjectInstance(0,0,255), {
+			   tr_OML_IE(NM_ATT_IPACC_STREAM_ID, OML_FOM_IE_Body:{stream_id := stream_id}),
+			   tr_OML_IE(NM_ATT_IPACC_DST_IP_PORT, OML_FOM_IE_Body:{portnr := port_nr})
+			   });
+
+
+
+
+
+} with { encode "RAW"; variant "FIELDORDER(msb)" };

-- 
To view, visit https://gerrit.osmocom.org/12875
To unsubscribe, or for help writing mail filters, visit https://gerrit.osmocom.org/settings

Gerrit-Project: osmo-ttcn3-hacks
Gerrit-Branch: master
Gerrit-MessageType: merged
Gerrit-Change-Id: I65f71bf7f54cbe3290757e810b1df1e54929bdd1
Gerrit-Change-Number: 12875
Gerrit-PatchSet: 2
Gerrit-Owner: Harald Welte <laforge at gnumonks.org>
Gerrit-Reviewer: Harald Welte <laforge at gnumonks.org>
Gerrit-Reviewer: Jenkins Builder (1000002)
Gerrit-CC: Max <msuraev at sysmocom.de>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.osmocom.org/pipermail/gerrit-log/attachments/20190217/803c72dc/attachment.htm>


More information about the gerrit-log mailing list