osmo-ttcn3-hacks/library/M3UA_Templates.ttcn

772 lines
20 KiB
Plaintext

module M3UA_Templates {
/* M3UA Templates, building on top of M3UA_Types from Ericsson.
*
* (C) 2019 by Harald Welte <laforge@gnumonks.org>
* All rights reserved.
*
* Released under the terms of GNU General Public License, Version 2 or
* (at your option) any later version.
*
* SPDX-License-Identifier: GPL-2.0-or-later
*/
import from M3UA_Types all;
import from General_Types all;
import from Osmocom_Types all;
const OCT1 c_M3UA_VERSION := '01'O;
const OCT2 c_M3UA_ST_T_STATE_CHG := '0001'O;
const OCT2 c_M3UA_ST_I_RESERVED := '0001'O;
const OCT2 c_M3UA_ST_I_AS_INACTIVE := '0002'O;
const OCT2 c_M3UA_ST_I_AS_ACTIVE := '0003'O;
const OCT2 c_M3UA_ST_I_AS_PENDING := '0004'O;
const OCT2 c_M3UA_ST_T_OTHER := '0002'O;
const OCT2 c_M3UA_ST_I_INSUFF_RESRC := '0001'O
const OCT2 c_M3UA_ST_I_ALTERNATE_ASP := '0002'O
const OCT2 c_M3UA_ST_I_ASP_FAILUREP := '0003'O
private function f_aspid_or_omit(template (omit) OCT4 aspid)
return template (omit) M3UA_ASP_Identifier {
var template (omit) M3UA_ASP_Identifier id;
if (istemplatekind(aspid, "omit")) {
return omit;
} else {
id.tag := '0011'O;
id.lengthInd := 8;
id.aSPIdentifier := aspid;
return id;
}
}
function tr_M3UA_asp_id(template OCT4 aspid)
return template M3UA_ASP_Identifier {
var template M3UA_ASP_Identifier id := {
tag := '0011'O,
lengthInd := 8,
aSPIdentifier := aspid
};
if (istemplatekind(aspid, "omit")) {
return omit;
} else if (istemplatekind(aspid, "*")) {
return *;
} else {
return id;
}
}
/***********************************************************************
* ASPSM Class
***********************************************************************/
template (value) PDU_M3UA ts_M3UA_ASPUP(template (omit) OCT4 aspid := omit,
template (omit) octetstring infostr := omit) := {
m3UA_ASPUP := {
version := c_M3UA_VERSION,
reserved := '00'O,
messageClassAndType := '0301'O,
messageLength := 0, // overwritten
messageParameters := {
aSP_Identifier := f_aspid_or_omit(aspid),
info_String := omit
}
}
}
template (present) PDU_M3UA tr_M3UA_ASPUP(template OCT4 aspid := *,
template octetstring infostr := omit) := {
m3UA_ASPUP := {
version := c_M3UA_VERSION,
reserved := '00'O,
messageClassAndType := '0301'O,
messageLength := ?, // overwritten
messageParameters := {
aSP_Identifier := tr_M3UA_asp_id(aspid),
info_String := *
}
}
}
template (value) PDU_M3UA ts_M3UA_ASPUP_ACK := {
m3UA_ASPUP_Ack := {
version := c_M3UA_VERSION,
reserved := '00'O,
messageClassAndType := '0304'O,
messageLength := 0, // overwritten
messageParameters := {
info_String := omit
}
}
}
template (present) PDU_M3UA tr_M3UA_ASPUP_ACK := {
m3UA_ASPUP_Ack := {
version := c_M3UA_VERSION,
reserved := '00'O,
messageClassAndType := '0304'O,
messageLength := ?,
messageParameters := {
info_String := *
}
}
}
template (value) PDU_M3UA ts_M3UA_ASPDN := {
m3UA_ASPDN := {
version := c_M3UA_VERSION,
reserved := '00'O,
messageClassAndType := '0302'O,
messageLength := 0, // overwritten
messageParameters := {
info_String := omit
}
}
}
template (present) PDU_M3UA tr_M3UA_ASPDN := {
m3UA_ASPDN := {
version := c_M3UA_VERSION,
reserved := '00'O,
messageClassAndType := '0302'O,
messageLength := ?,
messageParameters := {
info_String := *
}
}
}
template (value) PDU_M3UA ts_M3UA_ASPDN_ACK := {
m3UA_ASPUP_Ack := {
version := c_M3UA_VERSION,
reserved := '00'O,
messageClassAndType := '0305'O,
messageLength := 0, // overwritten
messageParameters := {
info_String := omit
}
}
}
template (present) PDU_M3UA tr_M3UA_ASPDN_ACK := {
m3UA_ASPUP_Ack := {
version := c_M3UA_VERSION,
reserved := '00'O,
messageClassAndType := '0305'O,
messageLength := ?,
messageParameters := {
info_String := *
}
}
}
template (value) M3UA_Heartbeat_Data ts_M3UA_hb_data(template (value) octetstring hb_data) := {
tag := '0009'O,
lengthInd := 0, // overwritten
heartbeat_Data := hb_data
}
template (present) M3UA_Heartbeat_Data tr_M3UA_hb_data(template (present) octetstring hb_data) := {
tag := '0009'O,
lengthInd := ?,
heartbeat_Data := hb_data
}
template (value) PDU_M3UA ts_M3UA_BEAT(template (omit) M3UA_Heartbeat_Data hbd := omit) := {
m3UA_BEAT := {
version := c_M3UA_VERSION,
reserved := '00'O,
messageClassAndType := '0303'O,
messageLength := 0, // overwritten
messageParameters := {
heartbeat_Data := hbd
}
}
}
template (present) PDU_M3UA tr_M3UA_BEAT(template M3UA_Heartbeat_Data hbd := *) := {
m3UA_BEAT := {
version := c_M3UA_VERSION,
reserved := '00'O,
messageClassAndType := '0303'O,
messageLength := ?,
messageParameters := {
heartbeat_Data := hbd
}
}
}
template (value) PDU_M3UA ts_M3UA_BEAT_ACK(template (omit) M3UA_Heartbeat_Data hb_data) := {
m3UA_BEAT_Ack := {
version := c_M3UA_VERSION,
reserved := '00'O,
messageClassAndType := '0306'O,
messageLength := 0, // overwritten
messageParameters := {
heartbeat_Data := hb_data
}
}
}
template (present) PDU_M3UA tr_M3UA_BEAT_ACK(template M3UA_Heartbeat_Data hb_data := *) := {
m3UA_BEAT_Ack := {
version := c_M3UA_VERSION,
reserved := '00'O,
messageClassAndType := '0306'O,
messageLength := ?,
messageParameters := {
heartbeat_Data := hb_data
}
}
}
/***********************************************************************
* ASPTM Class
***********************************************************************/
const M3UA_Traffic_Mode_Type c_M3UA_TMT_override := {
tag := '000B'O,
lengthInd := 8,
trafficModeType := int2oct(1, 4)
}
const M3UA_Traffic_Mode_Type c_M3UA_TMT_loadshare := {
tag := '000B'O,
lengthInd := 8,
trafficModeType := int2oct(2, 4)
}
const M3UA_Traffic_Mode_Type c_M3UA_TMT_broadcast := {
tag := '000B'O,
lengthInd := 8,
trafficModeType := int2oct(3, 4)
}
function ts_M3UA_routing_ctx(template (omit) octetstring rctx)
return template (omit) M3UA_Routing_Context {
var template (omit) M3UA_Routing_Context id;
if (istemplatekind(rctx, "omit")) {
return omit;
} else {
id.tag := '0006'O;
id.lengthInd := 0; // overwritten
id.routingContext := rctx;
return id;
}
}
function tr_M3UA_routing_ctx(template octetstring rctx)
return template M3UA_Routing_Context {
var template M3UA_Routing_Context id;
if (istemplatekind(rctx, "omit")) {
return omit;
} else if (istemplatekind(rctx, "*")) {
return *;
} else {
id.tag := '0006'O;
id.lengthInd := ?;
id.routingContext := rctx;
return id;
}
}
template (value) PDU_M3UA ts_M3UA_ASPAC(template (omit) M3UA_Traffic_Mode_Type tmt,
template (omit) OCT4 rctx) := {
m3UA_ASPAC := {
version := c_M3UA_VERSION,
reserved := '00'O,
messageClassAndType := '0401'O,
messageLength := 0, // overwritten
messageParameters := {
traffic_Mode_Type := tmt,
routing_Context := ts_M3UA_routing_ctx(rctx),
info_String := omit
}
}
}
template (present) PDU_M3UA tr_M3UA_ASPAC(template M3UA_Traffic_Mode_Type tmt,
template OCT4 rctx) := {
m3UA_ASPAC := {
version := c_M3UA_VERSION,
reserved := '00'O,
messageClassAndType := '0401'O,
messageLength := ?,
messageParameters := {
traffic_Mode_Type := tmt,
routing_Context := tr_M3UA_routing_ctx(rctx),
info_String := *
}
}
}
template (value) PDU_M3UA ts_M3UA_ASPAC_ACK(template (omit) M3UA_Traffic_Mode_Type tmt,
template (omit) OCT4 rctx) := {
m3UA_ASPAC_Ack := {
version := c_M3UA_VERSION,
reserved := '00'O,
messageClassAndType := '0403'O,
messageLength := 0, // overwritten
messageParameters := {
traffic_Mode_Type := tmt,
routing_Context := ts_M3UA_routing_ctx(rctx),
info_String := omit
}
}
}
template (present) PDU_M3UA tr_M3UA_ASPAC_ACK(template M3UA_Traffic_Mode_Type tmt,
template OCT4 rctx) := {
m3UA_ASPAC_Ack := {
version := c_M3UA_VERSION,
reserved := '00'O,
messageClassAndType := '0403'O,
messageLength := ?,
messageParameters := {
traffic_Mode_Type := tmt,
routing_Context := tr_M3UA_routing_ctx(rctx),
info_String := *
}
}
}
template (value) PDU_M3UA ts_M3UA_ASPIA(template (omit) OCT4 rctx) := {
m3UA_ASPIA := {
version := c_M3UA_VERSION,
reserved := '00'O,
messageClassAndType := '0402'O,
messageLength := 0, // overwritten
messageParameters := {
routing_Context := ts_M3UA_routing_ctx(rctx),
info_String := omit
}
}
}
template (present) PDU_M3UA tr_M3UA_ASPIA(template OCT4 rctx) := {
m3UA_ASPIA := {
version := c_M3UA_VERSION,
reserved := '00'O,
messageClassAndType := '0402'O,
messageLength := ?,
messageParameters := {
routing_Context := tr_M3UA_routing_ctx(rctx),
info_String := *
}
}
}
template (value) PDU_M3UA ts_M3UA_ASPIA_ACK(template (omit) OCT4 rctx) := {
m3UA_ASPIA_Ack := {
version := c_M3UA_VERSION,
reserved := '00'O,
messageClassAndType := '0404'O,
messageLength := 0, // overwritten
messageParameters := {
routing_Context := ts_M3UA_routing_ctx(rctx),
info_String := omit
}
}
}
template (present) PDU_M3UA tr_M3UA_ASPIA_ACK(template OCT4 rctx) := {
m3UA_ASPIA_Ack := {
version := c_M3UA_VERSION,
reserved := '00'O,
messageClassAndType := '0404'O,
messageLength := ?,
messageParameters := {
routing_Context := tr_M3UA_routing_ctx(rctx),
info_String := *
}
}
}
/***********************************************************************
* MGMT Class
***********************************************************************/
template (value) M3UA_Error_Code ts_M3UA_err_code(template (value) OCT4 val) := {
tag := '000C'O,
lengthInd := 8,
errorCode := val
}
template (present) M3UA_Error_Code tr_M3UA_err_code(template (present) OCT4 val) := {
tag := '000C'O,
lengthInd := 8,
errorCode := val
}
template (value) M3UA_Status ts_M3UA_status(template (value) OCT2 status_type,
template (value) OCT2 status_info) := {
tag := '000D'O,
lengthInd := 8,
statusType := status_type,
statusInfo := status_info
}
template (present) M3UA_Status tr_M3UA_status(template (present) OCT2 status_type,
template (present) OCT2 status_info) := {
tag := '000D'O,
lengthInd := 8,
statusType := status_type,
statusInfo := status_info
}
template (value) PDU_M3UA ts_M3UA_ERR(template (value) OCT4 err_code,
template (omit) OCT4 rctx) := {
m3UA_ERR := {
version := c_M3UA_VERSION,
reserved := '00'O,
messageClassAndType := '0000'O,
messageLength := 0, // overwritten
messageParameters := {
error_Code := ts_M3UA_err_code(err_code),
routing_Context := ts_M3UA_routing_ctx(rctx),
affected_Point_Codes := omit,
network_Appearance := omit,
diagnostic_information := omit
}
}
}
template (present) PDU_M3UA tr_M3UA_ERR(template (present) OCT4 err_code,
template OCT4 rctx) := {
m3UA_ERR := {
version := c_M3UA_VERSION,
reserved := '00'O,
messageClassAndType := '0000'O,
messageLength := ?,
messageParameters := {
error_Code := tr_M3UA_err_code(err_code),
routing_Context := tr_M3UA_routing_ctx(rctx),
affected_Point_Codes := *,
network_Appearance := *,
diagnostic_information := *
}
}
}
template (value) PDU_M3UA ts_M3UA_NOTIFY(template (value) OCT2 status_type,
template (value) OCT2 status_info,
template (omit) OCT4 rctx,
template (omit) OCT4 aspid := omit,
template (omit) octetstring infostr := omit) := {
m3UA_NOTIFY := {
version := c_M3UA_VERSION,
reserved := '00'O,
messageClassAndType := '0001'O,
messageLength := 0, // overwritten
messageParameters := {
status := ts_M3UA_status(status_type, status_info),
aSP_Identifier := f_aspid_or_omit(aspid),
routing_Context := ts_M3UA_routing_ctx(rctx),
info_String := omit
}
}
}
template (present) PDU_M3UA tr_M3UA_NOTIFY(template (present) OCT2 status_type,
template (present) OCT2 status_info,
template OCT4 rctx,
template OCT4 aspid := *,
template octetstring infostr := *) := {
m3UA_NOTIFY := {
version := c_M3UA_VERSION,
reserved := '00'O,
messageClassAndType := '0001'O,
messageLength := ?,
messageParameters := {
status := tr_M3UA_status(status_type, status_info),
aSP_Identifier := *,
routing_Context := tr_M3UA_routing_ctx(rctx),
info_String := *
}
}
}
/***********************************************************************
* Message Transfer Class
***********************************************************************/
template (value) M3UA_Protocol_Data ts_M3UA_protocol_data(template (value) OCT4 opc,
template (value) OCT4 dpc,
template (value) OCT1 si,
template (value) OCT1 ni,
template (value) OCT1 mp,
template (value) OCT1 sls,
template (value) octetstring data) := {
tag := '0210'O,
lengthInd := 0, // overwritten
oPC := opc,
dPC := dpc,
sI := si,
nI := ni,
mP := mp,
sLS := sls,
userProtocolData := data
}
template (present) M3UA_Protocol_Data tr_M3UA_protocol_data(template (present) OCT4 opc,
template (present) OCT4 dpc,
template (present) OCT1 si,
template (present) OCT1 ni,
template (present) OCT1 mp,
template (present) OCT1 sls,
template (present) octetstring data) := {
tag := '0210'O,
lengthInd := ?,
oPC := opc,
dPC := dpc,
sI := si,
nI := ni,
mP := mp,
sLS := sls,
userProtocolData := data
}
template (value) PDU_M3UA ts_M3UA_DATA(template (omit) OCT4 rctx,
template (value) M3UA_Protocol_Data data) := {
m3UA_DATA := {
version := c_M3UA_VERSION,
reserved := '00'O,
messageClassAndType := '0101'O,
messageLength := 0, // overwritten
messageParameters :={
network_Appearance := omit,
routing_Context := ts_M3UA_routing_ctx(rctx),
protocol_Data := data,
correlation_ID := omit
}
}
}
template (present) PDU_M3UA tr_M3UA_DATA(template OCT4 rctx,
template (present) M3UA_Protocol_Data data) := {
m3UA_DATA := {
version := c_M3UA_VERSION,
reserved := '00'O,
messageClassAndType := '0101'O,
messageLength := ?, // overwritten
messageParameters := {
network_Appearance := *,
routing_Context := tr_M3UA_routing_ctx(rctx),
protocol_Data := data,
correlation_ID := *
}
}
}
/***********************************************************************
* Routing Key Management
***********************************************************************/
template (value) M3UA_Local_Routing_Key_Id ts_M3UA_lrkid(template (value) OCT4 id) := {
tag := '020a'O,
lengthInd := 8,
localRkId := id
}
template (present) M3UA_Local_Routing_Key_Id tr_M3UA_lrkid(template (present) OCT4 id) := {
tag := '020a'O,
lengthInd := 8,
localRkId := id
}
template (value) M3UA_Routing_Key ts_M3UA_rkey(OCT4 id, OCT3 dpc,
template (omit) M3UA_Traffic_Mode_Type tmt := omit,
template (omit) OCT4 rctx := omit) := {
tag := '0207'O,
lengthInd := 0, // overwritten
routingKey := {
local_Routing_Key_Id := ts_M3UA_lrkid(id),
routing_Context := ts_M3UA_routing_ctx(rctx),
traffic_Mode_Type := tmt,
destination_Point_Code := {
tag := '020b'O,
lengthInd := 8,
pointCode := { '00'O, dpc }
},
network_Appearance := omit,
service_Indicators := omit,
opc_List := omit
}
}
template (present) M3UA_Routing_Key tr_M3UA_rkey(template (present) OCT4 id, template (present) OCT3 dpc,
template M3UA_Traffic_Mode_Type tmt := *,
template OCT4 rctx := *) := {
tag := '0207'O,
lengthInd := ?,
routingKey := {
local_Routing_Key_Id := tr_M3UA_lrkid(id),
routing_Context := tr_M3UA_routing_ctx(rctx),
traffic_Mode_Type := tmt,
destination_Point_Code := {
tag := '020b'O,
lengthInd := 8,
pointCode := { '00'O, dpc }
},
network_Appearance := omit,
service_Indicators := omit,
opc_List := omit
}
}
const OCT4 c_M3UA_REGSTS_SUCCESS := '00000000'O;
const OCT4 c_M3UA_REGSTS_ERR_UNKNOWN := '00000001'O;
const OCT4 c_M3UA_REGSTS_ERR_INVAL_DPC := '00000002'O;
const OCT4 c_M3UA_REGSTS_ERR_INVAL_NA := '00000003'O;
const OCT4 c_M3UA_REGSTS_ERR_INVAL_RKEY := '00000004'O;
const OCT4 c_M3UA_REGSTS_ERR_EPERM := '00000005'O;
// ...
const OCT4 c_m3UA_DEREGSTS_SUCCESS := '00000000'O;
const OCT4 c_m3UA_DEREGSTS_ERR_UNKNOWN := '00000001'O;
const OCT4 c_m3UA_DEREGSTS_ERR_INVAL_RCTX := '00000002'O;
const OCT4 c_m3UA_DEREGSTS_ERR_EPERM := '00000003'O;
const OCT4 c_m3UA_DEREGSTS_ERR_NOT_REG := '00000004'O;
const OCT4 c_m3UA_DEREGSTS_ERR_ASP_ACTIVE := '00000005'O;
template (value) M3UA_Registration_Result ts_M3UA_reg_res(template (value) OCT4 id,
template (value) OCT4 status,
template (value) OCT4 rctx) := {
tag := '0208'O,
lengthInd := 0, // overwritten
registrationResult := {
local_Routing_Key_Id := ts_M3UA_lrkid(id),
registration_Status := {
tag := '0212'O,
lengthInd := 8,
registrationStatus := status
},
routing_Context := ts_M3UA_routing_ctx(rctx)
}
}
template (present) M3UA_Registration_Result tr_M3UA_reg_res(template (present) OCT4 id,
template (present) OCT4 status,
template (present) OCT4 rctx) := {
tag := '0208'O,
lengthInd := ?,
registrationResult := {
local_Routing_Key_Id := tr_M3UA_lrkid(id),
registration_Status := {
tag := '0212'O,
lengthInd := 8,
registrationStatus := status
},
routing_Context := tr_M3UA_routing_ctx(rctx)
}
}
template (value) M3UA_Deregistration_Result ts_M3UA_dereg_res(template (value) OCT4 rctx,
template (value) OCT4 status) := {
tag := '0209'O,
lengthInd := 0, // overwritten
deregistrationResult := {
routing_Context := ts_M3UA_routing_ctx(rctx),
deregistration_Status := {
tag := '0213'O,
lengthInd := 8,
deregistrationStatus := status
}
}
}
template (present) M3UA_Deregistration_Result tr_M3UA_dereg_res(template (present) OCT4 rctx,
template (present) OCT4 status) := {
tag := '0209'O,
lengthInd := ?,
deregistrationResult := {
routing_Context := tr_M3UA_routing_ctx(rctx),
deregistration_Status := {
tag := '0213'O,
lengthInd := 8,
deregistrationStatus := status
}
}
}
template (value) PDU_M3UA ts_M3UA_REG_REQ(template (value) M3UA_Routing_Keys rkeys) := {
m3UA_REG_REQ := {
version := c_M3UA_VERSION,
reserved := '00'O,
messageClassAndType := '0901'O,
messageLength := 0, // overwritten
messageParameters := rkeys
}
}
template (present) PDU_M3UA tr_M3UA_REG_REQ(template (present) M3UA_Routing_Keys rkeys) := {
m3UA_REG_REQ := {
version := c_M3UA_VERSION,
reserved := '00'O,
messageClassAndType := '0901'O,
messageLength := ?,
messageParameters := rkeys
}
}
template (value) PDU_M3UA ts_M3UA_REG_RSP(template (value) M3UA_Registration_Results res) := {
m3UA_REG_RSP := {
version := c_M3UA_VERSION,
reserved := '00'O,
messageClassAndType := '0902'O,
messageLength := 0, // overwritten
messageParameters := res
}
}
template (present) PDU_M3UA tr_M3UA_REG_RSP(template (present) M3UA_Registration_Results res) := {
m3UA_REG_RSP := {
version := c_M3UA_VERSION,
reserved := '00'O,
messageClassAndType := '0902'O,
messageLength := ?,
messageParameters := res
}
}
template (value) PDU_M3UA ts_M3UA_DEREG_REQ(template (value) M3UA_Routing_Context rctx) := {
m3UA_DEREG_REQ := {
version := c_M3UA_VERSION,
reserved := '00'O,
messageClassAndType := '0903'O,
messageLength := 0, // overwritten
messageParameters := {
routing_Context := rctx
}
}
}
template (present) PDU_M3UA tr_M3UA_DEREG_REQ(template (present) M3UA_Routing_Context rctx) := {
m3UA_DEREG_REQ := {
version := c_M3UA_VERSION,
reserved := '00'O,
messageClassAndType := '0903'O,
messageLength := ?,
messageParameters := {
routing_Context := rctx
}
}
}
template (value) PDU_M3UA ts_M3UA_DEREG_RSP(template (value) M3UA_Deregistration_Results res) := {
m3UA_DEREG_RSP := {
version := c_M3UA_VERSION,
reserved := '00'O,
messageClassAndType := '0904'O,
messageLength := 0, // overwritten
messageParameters := res
}
}
template (present) PDU_M3UA tr_M3UA_DEREG_RSP(template (present) M3UA_Deregistration_Results res) := {
m3UA_DEREG_RSP := {
version := c_M3UA_VERSION,
reserved := '00'O,
messageClassAndType := '0904'O,
messageLength := ?,
messageParameters := res
}
}
}