pespin has uploaded this change for review. ( https://gerrit.osmocom.org/c/osmo-ttcn3-hacks/+/28603 )
Change subject: Support for SBc-AP protocol as used on the MME-CBC interface ......................................................................
Support for SBc-AP protocol as used on the MME-CBC interface
This requires a recent libfftranscode with SBC_AP support.
Change-Id: Ia6743e0a3e7974a5f2dd3ecf74ec331f646f6bc2 Related: OS#4945 --- M cbc/CBC_Tests.ttcn M cbc/gen_links.sh M cbc/regen_makefile.sh A library/sbcap/SBC_AP_Adapter.ttcn A library/sbcap/SBC_AP_CodecPort.ttcn A library/sbcap/SBC_AP_CodecPort_CtrlFunct.ttcn A library/sbcap/SBC_AP_CodecPort_CtrlFunctDef.cc A library/sbcap/SBC_AP_CommonDataTypes.asn A library/sbcap/SBC_AP_Constants.asn A library/sbcap/SBC_AP_Containers.asn A library/sbcap/SBC_AP_EncDec.cc A library/sbcap/SBC_AP_IEs.asn A library/sbcap/SBC_AP_PDU_Contents.asn A library/sbcap/SBC_AP_PDU_Descriptions.asn A library/sbcap/SBC_AP_Templates.ttcn A library/sbcap/SBC_AP_Types.ttcn A library/sbcap/regen_makefile.sh 17 files changed, 2,228 insertions(+), 2 deletions(-)
git pull ssh://gerrit.osmocom.org:29418/osmo-ttcn3-hacks refs/changes/03/28603/1
diff --git a/cbc/CBC_Tests.ttcn b/cbc/CBC_Tests.ttcn index 06fda92..0faf830 100644 --- a/cbc/CBC_Tests.ttcn +++ b/cbc/CBC_Tests.ttcn @@ -1,6 +1,7 @@ module CBC_Tests {
import from Osmocom_Types all; +import from Socket_API_Definitions all;
import from BSSAP_Types all; import from BSSMAP_Templates all; @@ -8,7 +9,15 @@ import from CBSP_Templates all; import from CBSP_Adapter all; import from CBSP_CodecPort all; -import from Socket_API_Definitions all; + +import from SBC_AP_IEs all; +import from SBC_AP_Constants all; +import from SBC_AP_PDU_Contents all; +import from SBC_AP_PDU_Descriptions all; +import from SBC_AP_Types all; +import from SBC_AP_Templates all; +import from SBC_AP_CodecPort all; +import from SBC_AP_Adapter all;
import from HTTP_Adapter all; import from HTTPmsg_Types all; @@ -17,11 +26,13 @@ modulepar { charstring mp_cbc_host := "127.0.0.1"; integer mp_cbc_cbsp_port := 48049; + integer mp_cbc_sbcap_port := c_SBC_AP_PORT; integer mp_cbc_ecbe_port := 12345; integer mp_local_cbsp_port := 9999; + integer mp_local_sbcap_port := 9998; };
-type component test_CT extends CBSP_Adapter_CT, http_CT { +type component test_CT extends CBSP_Adapter_CT, SBC_AP_Adapter_CT, http_CT { };
/********************************************************************************* @@ -141,6 +152,7 @@ private function f_init(boolean raw := false) runs on test_CT { f_http_init(mp_cbc_host, mp_cbc_ecbe_port); CBSP_Adapter.f_connect(mp_cbc_host, mp_cbc_cbsp_port, "", mp_local_cbsp_port); + SBC_AP_Adapter.f_connect(mp_cbc_host, mp_cbc_sbcap_port, "", mp_local_sbcap_port);
if (not raw) { var BSSMAP_FIELD_CellIdentificationList cell_list := { @@ -299,6 +311,86 @@ } }
+private function f_sbcap_tx_write_replace_warn_resp(CBS_Message msg, integer idx := 0, + template (omit) BSSMAP_FIELD_CellIdentificationList tx_cell_list := omit, + template (omit) CBSP_IE_NumBcastComplList tx_compl_list := omit) +runs on test_CT { + var template (value) SBC_AP_PDU tx; + var template (value) BSSMAP_FIELD_CellIdentificationList tx_list; + //if (istemplatekind(tx_cell_list, "omit")) { + // /* use the "expected list" when confirming the write-replace */ + // tx_list := msg.cell_list; + //} else { + // /* use an user-provided different list of cells */ + // tx_list := valueof(tx_cell_list); + //} + if (istemplatekind(tx_compl_list, "omit")) { + tx := ts_SBCAP_WRITE_WARNING_RESP(int2bit(msg.msg_id, 16), + int2bit(msg.ser_nr, 16)); + } /*else { + tx := ts_CBSP_REPLACE_CBS_COMPL(msg.msg_id, msg.ser_nr, msg.old_ser_nr, + valueof(tx_compl_list), tx_list, + msg.channel_ind); + }*/ + f_SBC_AP_send(tx, idx); +} + +private function f_sbcap_tx_stop_warn_resp(integer idx := 0, CBS_Message msg) +runs on test_CT { + var template (value) SBC_AP_PDU tx; + tx := ts_SBCAP_STOP_WARNING_RESP(int2bit(msg.msg_id, 16), + int2bit(msg.ser_nr, 16)); + f_SBC_AP_send(tx, idx); +} + +/* handle a SBc-AP Write-Replace Request and respond to it with Response or FAILURE depending on arguments */ +private function f_sbcap_handle_write_replace_warn_req(CBS_Message msg, integer idx := 0, + template (omit) BSSMAP_FIELD_CellIdentificationList tx_cell_list := omit, + template (omit) CBSP_FailureListItems tx_fail_list := omit, + template (omit) CBSP_IE_NumBcastComplList tx_compl_list := omit) +runs on test_CT { + var template (present) SBC_AP_PDU rx_templ; + var SBC_AP_RecvFrom rf; + rx_templ := tr_SBCAP_WRITE_WARNING(int2bit(msg.msg_id, 16), + int2bit(msg.ser_nr, 16), + msg.rep_period, + msg.num_bcast_req); + alt { + [] SBC_AP[idx].receive(tr_SBC_AP_Recv(g_cbsp_conn_id[idx], rx_templ)) -> value rf { + var template (value) SBC_AP_PDU tx; + log ("received expected req:", rf); + if (istemplatekind(tx_fail_list, "omit")) { + f_sbcap_tx_write_replace_warn_resp(msg, idx, tx_cell_list, tx_compl_list); + }/* else { + f_cbsp_tx_write_fail(msg, idx, tx_cell_list, tx_fail_list); + }*/ + } + [] SBC_AP[idx].receive { + setverdict(fail, "Received unexpected SBc-AP in index ", idx); + } + } +} + +/* handle a SBc-AP Stop-Warning-Request and respond to it with Response or FAILURE depending on arguments */ +private function f_sbcap_handle_stop_warn_req(integer idx := 0, CBS_Message msg) +runs on test_CT { + var template (present) SBC_AP_PDU rx_templ; + var SBC_AP_RecvFrom rf; + + rx_templ := tr_SBCAP_STOP_WARNING(int2bit(msg.msg_id, 16), + int2bit(msg.ser_nr, 16)); + alt { + [] SBC_AP[idx].receive(tr_SBC_AP_Recv(g_cbsp_conn_id[idx], rx_templ)) -> value rf { + var template (value) SBC_AP_PDU tx; + log ("received expected req:", rf); + f_sbcap_tx_stop_warn_resp(idx, msg); + } + [] SBC_AP[idx].receive { + setverdict(fail, "Received unexpected SBc-AP in index ", idx); + } + } +} + private const BSSMAP_FIELD_CellIdentificationList cil_BSS := { cIl_allInBSS := ''O }; @@ -396,6 +488,7 @@ var EcbeCbcMessage ecbe := f_cbs2ecbe(msg, "TTCN-3"); f_ecbe_tx_post_cbs(ecbe); f_cbsp_handle_write(msg, 0, cell_list_success); + f_sbcap_handle_write_replace_warn_req(msg, 0, cell_list_success); f_ecbe_rx_resp(201);
f_sleep(2.0); @@ -404,6 +497,7 @@ /* FIXME: cbc segfaults if we terminate here (if we don't wait for Connect_result? */ f_cbsp_handle_kill(0, msg.msg_id, msg.ser_nr, exp_list:=cell_list_success, tx_list:=cell_list_success, tx_fail_list:=omit, tx_compl_list:=omit, channel_ind:=msg.channel_ind); + f_sbcap_handle_stop_warn_req(0, msg); f_ecbe_rx_resp(200); }
diff --git a/cbc/gen_links.sh b/cbc/gen_links.sh index 8b88605..3bb9e77 100755 --- a/cbc/gen_links.sh +++ b/cbc/gen_links.sh @@ -34,6 +34,11 @@ FILES+="SABP_CodecPort.ttcn SABP_CodecPort_CtrlFunct.ttcn SABP_CodecPort_CtrlFunctDef.cc SABP_Adapter.ttcn " gen_links $DIR $FILES
+DIR=../library/sbcap +FILES="SBC_AP_CommonDataTypes.asn SBC_AP_Constants.asn SBC_AP_Containers.asn SBC_AP_IEs.asn SBC_AP_PDU_Contents.asn SBC_AP_PDU_Descriptions.asn " +FILES+="SBC_AP_Types.ttcn SBC_AP_EncDec.cc SBC_AP_Templates.ttcn SBC_AP_CodecPort.ttcn SBC_AP_CodecPort_CtrlFunct.ttcn SBC_AP_CodecPort_CtrlFunctDef.cc SBC_AP_Adapter.ttcn " +gen_links $DIR $FILES + DIR=$BASEDIR/titan.TestPorts.Common_Components.Abstract_Socket/src FILES="Abstract_Socket.cc Abstract_Socket.hh " gen_links $DIR $FILES diff --git a/cbc/regen_makefile.sh b/cbc/regen_makefile.sh index 11a93c4..96900b3 100755 --- a/cbc/regen_makefile.sh +++ b/cbc/regen_makefile.sh @@ -15,6 +15,8 @@ Native_FunctionDefs.cc SABP_CodecPort_CtrlFunctDef.cc SABP_EncDec.cc + SBC_AP_CodecPort_CtrlFunctDef.cc + SBC_AP_EncDec.cc SCTPasp_PT.cc TCCConversion.cc TCCEncoding.cc diff --git a/library/sbcap/SBC_AP_Adapter.ttcn b/library/sbcap/SBC_AP_Adapter.ttcn new file mode 100644 index 0000000..3217c5e --- /dev/null +++ b/library/sbcap/SBC_AP_Adapter.ttcn @@ -0,0 +1,91 @@ +module SBC_AP_Adapter { + +/* SBC_AP Adapter layer, sitting on top of SBC_AP_CodecPort. + * test suites can 'inherit' in order to have a SBC_AP connection to the IUT which they're testing + * + * (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. + */ + + +import from Osmocom_Types all; +import from General_Types all; +import from SBC_AP_Types all; +import from SBC_AP_PDU_Descriptions all; +import from SBC_AP_Templates all; +import from SBC_AP_CodecPort all; +import from SBC_AP_CodecPort_CtrlFunct all; +import from IPL4asp_Types all; +import from IPL4asp_PortType all; +import from Socket_API_Definitions all; +import from Misc_Helpers all; + + +const integer SBC_AP_HDR_LEN := 3; + +const integer NUM_SBC_AP := 3; + +type component SBC_AP_Adapter_CT { + /* down-facing port to SBC_AP Codec port */ + port SBC_AP_CODEC_PT SBC_AP[NUM_SBC_AP]; + var IPL4asp_Types.ConnectionId g_SBC_AP_conn_id[NUM_SBC_AP] := { -1, -1, -1 }; +} + +private template Socket_API_Definitions.PortEvent tr_SctpAssocChange_COMM_UP(IPL4asp_Types.ConnectionId id) := { + sctpEvent := { + sctpAssocChange := { + clientId := id, + proto := { + sctp := ? + }, + sac_state := SCTP_COMM_UP + } + } +} + +function f_connect(charstring remote_host, IPL4asp_Types.PortNumber remote_port, + charstring local_host, IPL4asp_Types.PortNumber local_port, integer idx := 0) +runs on SBC_AP_Adapter_CT { + var IPL4asp_Types.Result res; + map(self:SBC_AP[idx], system:SBC_AP); + res := SBC_AP_CodecPort_CtrlFunct.f_IPL4_connect(SBC_AP[idx], remote_host, remote_port, + local_host, local_port, 0, { sctp := valueof(ts_SBC_AP_SctpTuple) }); + if (not ispresent(res.connId)) { + setverdict(fail, "Could not connect to SBC_AP port, check your configuration"); + mtc.stop; + } + g_SBC_AP_conn_id[idx] := res.connId; + timer Tcommup := 10.0; + Tcommup.start; + alt { + [] SBC_AP[idx].receive(tr_SctpAssocChange_COMM_UP(g_SBC_AP_conn_id[idx])) {} + [] Tcommup.timeout { + Misc_Helpers.f_shutdown(__BFILE__, __LINE__, fail, "Timeout waiting SCTP_COMM_UP"); + } + } +} + +/* Function to use to bind to a local port as IPA server, accepting remote clients */ +function f_bind(charstring local_host, IPL4asp_Types.PortNumber local_port, integer idx := 0) +runs on SBC_AP_Adapter_CT { + var IPL4asp_Types.Result res; + map(self:SBC_AP[idx], system:SBC_AP); + res := SBC_AP_CodecPort_CtrlFunct.f_IPL4_listen(SBC_AP[idx], local_host, local_port, { sctp := valueof(ts_SBC_AP_SctpTuple) }); + g_SBC_AP_conn_id[idx] := res.connId; +} + +function f_SBC_AP_send(template (value) SBC_AP_PDU pdu, integer idx := 0) runs on SBC_AP_Adapter_CT { + SBC_AP[idx].send(ts_SBC_AP_Send(g_SBC_AP_conn_id[idx], pdu)); +} + +function f_SBC_AP_exp(template SBC_AP_PDU exp, integer idx := 0) runs on SBC_AP_Adapter_CT return SBC_AP_PDU { + var SBC_AP_RecvFrom rf; + SBC_AP[idx].receive(tr_SBC_AP_Recv(g_SBC_AP_conn_id[idx], exp)) -> value rf; + return rf.msg; +} + + +} diff --git a/library/sbcap/SBC_AP_CodecPort.ttcn b/library/sbcap/SBC_AP_CodecPort.ttcn new file mode 100644 index 0000000..bd17031 --- /dev/null +++ b/library/sbcap/SBC_AP_CodecPort.ttcn @@ -0,0 +1,84 @@ +module SBC_AP_CodecPort { + +/* Simple SBC AP Codec Port, translating between raw SCTP primitives with + * octetstring payload towards the IPL4asp provider, and SBC-AP primitives + * which carry the decoded SBC-AP data types as payload. + * + * (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 IPL4asp_PortType all; + import from IPL4asp_Types all; + import from SBC_AP_PDU_Descriptions all; + import from SBC_AP_Types all; + + type record SBC_AP_RecvFrom { + ConnectionId connId, + HostName remName, + PortNumber remPort, + HostName locName, + PortNumber locPort, + SBC_AP_PDU msg + }; + + type record SBC_AP_Send { + ConnectionId connId, + SBC_AP_PDU msg + }; + + template (value) SctpTuple ts_SBC_AP_SctpTuple := { + sinfo_stream := omit, + sinfo_ppid := c_SBC_AP_PPID, + remSocks := omit, + assocId := omit + }; + + template (value) SBC_AP_Send ts_SBC_AP_Send(ConnectionId connId, template (value) SBC_AP_PDU msg) := { + connId := connId, + msg := msg + } + + template (present) SBC_AP_RecvFrom tr_SBC_AP_Recv(template ConnectionId connId, template SBC_AP_PDU msg) := { + connId := connId, + remName := ?, + remPort := ?, + locName := ?, + locPort := ?, + msg := msg + } + + private function IPL4_to_SBC_AP_RecvFrom(in ASP_RecvFrom pin, out SBC_AP_RecvFrom pout) { + pout.connId := pin.connId; + pout.remName := pin.remName; + pout.remPort := pin.remPort; + pout.locName := pin.locName; + pout.locPort := pin.locPort; + pout.msg := dec_SBC_AP_PDU(pin.msg); + } with { extension "prototype(fast)" }; + + private function SBC_AP_to_IPL4_Send(in SBC_AP_Send pin, out ASP_Send pout) { + pout.connId := pin.connId; + pout.proto := { + sctp := valueof(ts_SBC_AP_SctpTuple) + }; + pout.msg := enc_SBC_AP_PDU(pin.msg); + } with { extension "prototype(fast)" }; + + type port SBC_AP_CODEC_PT message { + out SBC_AP_Send; + in SBC_AP_RecvFrom, + ASP_ConnId_ReadyToRelease, + ASP_Event; + } with { extension "user IPL4asp_PT + out(SBC_AP_Send -> ASP_Send:function(SBC_AP_to_IPL4_Send)) + in(ASP_RecvFrom -> SBC_AP_RecvFrom: function(IPL4_to_SBC_AP_RecvFrom); + ASP_ConnId_ReadyToRelease -> ASP_ConnId_ReadyToRelease: simple; + ASP_Event -> ASP_Event: simple)" + } +} diff --git a/library/sbcap/SBC_AP_CodecPort_CtrlFunct.ttcn b/library/sbcap/SBC_AP_CodecPort_CtrlFunct.ttcn new file mode 100644 index 0000000..bdf1eec --- /dev/null +++ b/library/sbcap/SBC_AP_CodecPort_CtrlFunct.ttcn @@ -0,0 +1,44 @@ +module SBC_AP_CodecPort_CtrlFunct { + + import from SBC_AP_CodecPort all; + import from IPL4asp_Types all; + + external function f_IPL4_listen( + inout SBC_AP_CODEC_PT portRef, + in HostName locName, + in PortNumber locPort, + in ProtoTuple proto, + in OptionList options := {} + ) return Result; + + external function f_IPL4_connect( + inout SBC_AP_CODEC_PT portRef, + in HostName remName, + in PortNumber remPort, + in HostName locName, + in PortNumber locPort, + in ConnectionId connId, + in ProtoTuple proto, + in OptionList options := {} + ) return Result; + + external function f_IPL4_close( + inout SBC_AP_CODEC_PT portRef, + in ConnectionId id, + in ProtoTuple proto := { unspecified := {} } + ) return Result; + + external function f_IPL4_setUserData( + inout SBC_AP_CODEC_PT portRef, + in ConnectionId id, + in UserData userData + ) return Result; + + external function f_IPL4_getUserData( + inout SBC_AP_CODEC_PT portRef, + in ConnectionId id, + out UserData userData + ) return Result; + +} + diff --git a/library/sbcap/SBC_AP_CodecPort_CtrlFunctDef.cc b/library/sbcap/SBC_AP_CodecPort_CtrlFunctDef.cc new file mode 100644 index 0000000..84269f3 --- /dev/null +++ b/library/sbcap/SBC_AP_CodecPort_CtrlFunctDef.cc @@ -0,0 +1,56 @@ +#include "IPL4asp_PortType.hh" +#include "SBC_AP_CodecPort.hh" +#include "IPL4asp_PT.hh" + +namespace SBC__AP__CodecPort__CtrlFunct { + + IPL4asp__Types::Result f__IPL4__listen( + SBC__AP__CodecPort::SBC__AP__CODEC__PT& portRef, + const IPL4asp__Types::HostName& locName, + const IPL4asp__Types::PortNumber& locPort, + const IPL4asp__Types::ProtoTuple& proto, + const IPL4asp__Types::OptionList& options) + { + return f__IPL4__PROVIDER__listen(portRef, locName, locPort, proto, options); + } + + IPL4asp__Types::Result f__IPL4__connect( + SBC__AP__CodecPort::SBC__AP__CODEC__PT& portRef, + const IPL4asp__Types::HostName& remName, + const IPL4asp__Types::PortNumber& remPort, + const IPL4asp__Types::HostName& locName, + const IPL4asp__Types::PortNumber& locPort, + const IPL4asp__Types::ConnectionId& connId, + const IPL4asp__Types::ProtoTuple& proto, + const IPL4asp__Types::OptionList& options) + { + return f__IPL4__PROVIDER__connect(portRef, remName, remPort, + locName, locPort, connId, proto, options); + } + + IPL4asp__Types::Result f__IPL4__close( + SBC__AP__CodecPort::SBC__AP__CODEC__PT& portRef, + const IPL4asp__Types::ConnectionId& connId, + const IPL4asp__Types::ProtoTuple& proto) + { + return f__IPL4__PROVIDER__close(portRef, connId, proto); + } + + IPL4asp__Types::Result f__IPL4__setUserData( + SBC__AP__CodecPort::SBC__AP__CODEC__PT& portRef, + const IPL4asp__Types::ConnectionId& connId, + const IPL4asp__Types::UserData& userData) + { + return f__IPL4__PROVIDER__setUserData(portRef, connId, userData); + } + + IPL4asp__Types::Result f__IPL4__getUserData( + SBC__AP__CodecPort::SBC__AP__CODEC__PT& portRef, + const IPL4asp__Types::ConnectionId& connId, + IPL4asp__Types::UserData& userData) + { + return f__IPL4__PROVIDER__getUserData(portRef, connId, userData); + } + +} + diff --git a/library/sbcap/SBC_AP_CommonDataTypes.asn b/library/sbcap/SBC_AP_CommonDataTypes.asn new file mode 100644 index 0000000..e11f317 --- /dev/null +++ b/library/sbcap/SBC_AP_CommonDataTypes.asn @@ -0,0 +1,35 @@ +-- SBC-AP-CommonDataTypes.asn +-- +-- Taken from 3GPP TS 29.168 V15.1.0 (2018-09) +-- http://www.3gpp.org/ftp/Specs/archive/29_series/29.168/29168-930.zip +-- +-- 4.4.6 Common Definitions +-- + +-- ************************************************************** +-- +-- Common definitions +-- +-- ************************************************************** + +SBC-AP-CommonDataTypes { +itu-t (0) identified-organization (4) etsi (0) mobileDomain (0) +eps-Access (21) modules (3) sbc-AP (3) version1 (1) sbc-AP-CommonDataTypes (3)} + +DEFINITIONS AUTOMATIC TAGS ::= + +BEGIN + +Criticality ::= ENUMERATED { reject, ignore, notify } + +Presence ::= ENUMERATED { optional, conditional, mandatory } + +ProcedureCode ::= INTEGER (0..255) + +ProtocolExtensionID ::= INTEGER (0..65535) + +ProtocolIE-ID ::= INTEGER (0..65535) + +TriggeringMessage ::= ENUMERATED {initiating-message, successful-outcome, unsuccessful-outcome, outcome} + +END diff --git a/library/sbcap/SBC_AP_Constants.asn b/library/sbcap/SBC_AP_Constants.asn new file mode 100644 index 0000000..447e1c4 --- /dev/null +++ b/library/sbcap/SBC_AP_Constants.asn @@ -0,0 +1,127 @@ +-- SBC-AP-Constants.asn +-- +-- Taken from 3GPP TS 29.168 V15.1.0 (2018-09) +-- http://www.3gpp.org/ftp/Specs/archive/29_series/29.168/29168-930.zip +-- +-- 4.4.7 Constant Definitions +-- +-- ************************************************************** +-- +-- Constant definitions +-- +-- ************************************************************** + +SBC-AP-Constants { +itu-t (0) identified-organization (4) etsi (0) mobileDomain (0) +eps-Access (21) modules (3) sbc-AP (3) version1 (1) sbc-AP-Constants (4)} + +DEFINITIONS AUTOMATIC TAGS ::= + +BEGIN + +-- ************************************************************** +-- +-- Elementary Procedures +-- +-- ************************************************************** + +id-Write-Replace-Warning INTEGER ::= 0 +id-Stop-Warning INTEGER ::= 1 +id-Error-Indication INTEGER ::= 2 +id-Write-Replace-Warning-Indication INTEGER ::= 3 +id-Stop-Warning-Indication INTEGER ::= 4 +id-PWS-Restart-Indication INTEGER ::= 5 +id-PWS-Failure-Indication INTEGER ::= 6 + +-- ************************************************************** +-- +-- IEs +-- +-- ************************************************************** + +id-Broadcast-Message-Content INTEGER ::= 0 +id-Cause INTEGER ::= 1 +id-Criticality-Diagnostics INTEGER ::=2 +id-Data-Coding-Scheme INTEGER ::= 3 +id-Failure-List INTEGER ::= 4 +id-Message-Identifier INTEGER ::= 5 +id-Number-of-Broadcasts-Completed-List INTEGER ::= 6 +id-Number-of-Broadcasts-Requested INTEGER ::= 7 +id-Radio-Resource-Loading-List INTEGER ::= 8 +id-Recovery-Indication INTEGER ::= 9 +id-Repetition-Period INTEGER ::= 10 +id-Serial-Number INTEGER ::= 11 +id-Service-Areas-List INTEGER ::= 12 +id-TypeOfError INTEGER ::= 13 +id-List-of-TAIs INTEGER ::= 14 +id-Warning-Area-List INTEGER ::= 15 +id-Warning-Message-Content INTEGER ::= 16 +id-Warning-Security-Information INTEGER ::= 17 +id-Warning-Type INTEGER ::= 18 +id-Omc-Id INTEGER ::= 19 +id-Concurrent-Warning-Message-Indicator INTEGER ::= 20 +id-Extended-Repetition-Period INTEGER ::= 21 +id-Unknown-Tracking-Area-List INTEGER ::= 22 +id-Broadcast-Scheduled-Area-List INTEGER ::= 23 +id-Send-Write-Replace-Warning-Indication INTEGER ::= 24 +id-Broadcast-Cancelled-Area-List INTEGER ::= 25 +id-Send-Stop-Warning-Indication INTEGER ::= 26 +id-Stop-All-Indicator INTEGER ::= 27 +id-Global-ENB-ID INTEGER ::= 28 +id-Broadcast-Empty-Area-List INTEGER ::= 29 +id-Restarted-Cell-List INTEGER ::= 30 +id-List-of-TAIs-Restart INTEGER ::= 31 +id-List-of-EAIs-Restart INTEGER ::= 32 +id-Failed-Cell-List INTEGER ::= 33 +id-List-of-5GS-TAIs INTEGER ::= 34 +id-Warning-Area-List-5GS INTEGER ::= 35 +id-Global-RAN-Node-ID INTEGER ::= 36 +id-Global-GNB-ID INTEGER ::= 37 +id-RAT-Selector-5GS INTEGER ::= 38 +id-Unknown-5GS-Tracking-Area-List INTEGER ::= 39 +id-Broadcast-Scheduled-Area-List-5GS INTEGER ::= 40 +id-Broadcast-Cancelled-Area-List-5GS INTEGER ::= 41 +id-Broadcast-Empty-Area-List-5GS INTEGER ::= 42 +id-Restarted-Cell-List-NR INTEGER ::= 43 +id-Failed-Cell-List-NR INTEGER ::= 44 +id-List-of-5GS-TAI-for-Restart INTEGER ::= 45 +id-Warning-Area-Coordinates INTEGER ::= 46 + + + +-- ************************************************************** +-- +-- Extension constants +-- +-- ************************************************************** + +-- ************************************************************** +-- +-- Lists +-- +-- ************************************************************** + +maxNrOfErrors INTEGER ::= 256 +maxnoofCellID INTEGER ::= 65535 +maxnoofCellinEAI INTEGER ::= 65535 +maxnoofCellinTAI INTEGER ::= 65535 +maxNrOfTAIs INTEGER ::= 65535 +maxnoofEmergencyAreaID INTEGER ::= 65535 +maxnoofTAIforWarning INTEGER ::= 65535 + +maxProtocolExtensions INTEGER ::= 65535 +maxProtocolIEs INTEGER ::= 65535 +maxnoofeNBIds INTEGER ::= 256 +maxnoofRestartedCells INTEGER ::= 256 +maxnoofRestartTAIs INTEGER ::= 2048 +maxnoofRestartEAIs INTEGER ::= 256 +maxnoofFailedCells INTEGER ::= 256 +maxnoof5GSTAIs INTEGER ::= 2048 +maxnoofCellsingNB INTEGER ::= 16384 +maxnoofCellsin5GS INTEGER ::= 16776960 +maxnoofCellsin5GSTAI INTEGER ::= 65535 +maxnoofRANNodes INTEGER ::= 65535 +maxnoofRestart5GSTAIs INTEGER ::= 2048maxnoofCellsforRestartNR INTEGER ::= 16384 + + +END diff --git a/library/sbcap/SBC_AP_Containers.asn b/library/sbcap/SBC_AP_Containers.asn new file mode 100644 index 0000000..8b71821 --- /dev/null +++ b/library/sbcap/SBC_AP_Containers.asn @@ -0,0 +1,121 @@ +-- SBC-AP-Containers.asn +-- +-- Taken from 3GPP TS 29.168 V15.1.0 (2018-09) +-- http://www.3gpp.org/ftp/Specs/archive/29_series/29.168/29168-930.zip +-- +-- 4.4.8 Container Definitions +-- + +-- ************************************************************** +-- +-- Container definitions +-- +-- ************************************************************** + +SBC-AP-Containers { +itu-t (0) identified-organization (4) etsi (0) mobileDomain (0) +eps-Access (21) modules (3) sbc-AP (3) version1 (1) sbc-AP-Containers (5)} + +DEFINITIONS AUTOMATIC TAGS ::= + +BEGIN + +-- ************************************************************** +-- +-- IE parameter types from other modules. +-- +-- ************************************************************** + +IMPORTS + Criticality, + Presence, + ProtocolExtensionID, + ProtocolIE-ID +FROM SBC-AP-CommonDataTypes + + maxProtocolExtensions, + maxProtocolIEs +FROM SBC-AP-Constants; + +-- ************************************************************** +-- +-- Class Definition for Protocol IEs +-- +-- ************************************************************** + +SBC-AP-PROTOCOL-IES ::= CLASS { + &id ProtocolIE-ID UNIQUE, + &criticality Criticality DEFAULT ignore, + &Value, + &presence Presence +} +WITH SYNTAX { + ID &id + CRITICALITY &criticality + TYPE &Value + PRESENCE &presence +} + +-- ************************************************************** +-- +-- Class Definition for Protocol Extensions +-- +-- ************************************************************** + +SBC-AP-PROTOCOL-EXTENSION ::= CLASS { + &id ProtocolExtensionID UNIQUE, + &criticality Criticality DEFAULT ignore, + &Extension, + &presence Presence +} +WITH SYNTAX { + ID &id + CRITICALITY &criticality + EXTENSION &Extension + PRESENCE &presence +} + +-- ************************************************************** +-- +-- Container for Protocol IEs +-- +-- ************************************************************** + +ProtocolIE-Container {SBC-AP-PROTOCOL-IES : IEsSetParam} ::= + SEQUENCE (SIZE (0..maxProtocolIEs)) OF + ProtocolIE-Field {{IEsSetParam}} + +ProtocolIE-Field {SBC-AP-PROTOCOL-IES : IEsSetParam} ::= SEQUENCE { + id SBC-AP-PROTOCOL-IES.&id ({IEsSetParam}), + criticality SBC-AP-PROTOCOL-IES.&criticality ({IEsSetParam}{@id}), + value SBC-AP-PROTOCOL-IES.&Value ({IEsSetParam}{@id}) +} + +-- ************************************************************** +-- +-- Container Lists for Protocol IE Containers +-- +-- ************************************************************** + +ProtocolIE-ContainerList {INTEGER : lowerBound, INTEGER : upperBound, SBC-AP-PROTOCOL-IES : IEsSetParam} ::= + SEQUENCE (SIZE (lowerBound..upperBound)) OF + ProtocolIE-Container {{IEsSetParam}} + +-- ************************************************************** +-- +-- Container for Protocol Extensions +-- +-- ************************************************************** + +ProtocolExtensionContainer {SBC-AP-PROTOCOL-EXTENSION : ExtensionSetParam} ::= + SEQUENCE (SIZE (1..maxProtocolExtensions)) OF + ProtocolExtensionField {{ExtensionSetParam}} + +ProtocolExtensionField {SBC-AP-PROTOCOL-EXTENSION : ExtensionSetParam} ::= SEQUENCE { + id SBC-AP-PROTOCOL-EXTENSION.&id ({ExtensionSetParam}), + criticality SBC-AP-PROTOCOL-EXTENSION.&criticality ({ExtensionSetParam}{@id}), + extensionValue SBC-AP-PROTOCOL-EXTENSION.&Extension ({ExtensionSetParam}{@id}) +} + + +END diff --git a/library/sbcap/SBC_AP_EncDec.cc b/library/sbcap/SBC_AP_EncDec.cc new file mode 100644 index 0000000..08ee75f --- /dev/null +++ b/library/sbcap/SBC_AP_EncDec.cc @@ -0,0 +1,64 @@ + +#include <string.h> +#include <stdarg.h> +#include "SBC_AP_PDU_Descriptions.hh" + +extern "C" { +#include <fftranscode/transcode.h> +} + +namespace SBC__AP__Types { + +TTCN_Module SBC__AP__EncDec("SBC_AP_EncDec", __DATE__, __TIME__); + +OCTETSTRING enc__SBC__AP__PDU(const SBC__AP__PDU__Descriptions::SBC__AP__PDU &pdu) +{ + uint8_t *aper_buf; + int aper_buf_len; + TTCN_Buffer TTCN_buf; + TTCN_buf.clear(); + + /* Encode from abstract data type into BER/DER */ + pdu.encode(SBC__AP__PDU__Descriptions::SBC__AP__PDU_descr_, TTCN_buf, + TTCN_EncDec::CT_BER, BER_ENCODE_DER); + + aper_buf_len = fftranscode_ber2aper(FFTRANSC_T_SBCAP, &aper_buf, TTCN_buf.get_data(), TTCN_buf.get_len()); + if (aper_buf_len < 0) { + TTCN_error("fftranscode failed."); + } + + /* make octetstring from output buffer */ + OCTETSTRING ret_val(aper_buf_len, aper_buf); + + /* release dynamically-allocated output buffer */ + fftranscode_free(aper_buf); + + return ret_val; +} + +SBC__AP__PDU__Descriptions::SBC__AP__PDU dec__SBC__AP__PDU(const OCTETSTRING &stream) +{ + uint8_t *ber_buf; + int ber_buf_len; + + /* First, decode APER + re-encode as BER */ + ber_buf_len = fftranscode_aper2ber(FFTRANSC_T_SBCAP, &ber_buf, (const unsigned char *)stream, stream.lengthof()); + if (ber_buf_len < 0) { + TTCN_error("fftranscode failed."); + } + + /* Then, re-encode from BER to TITAN representation */ + SBC__AP__PDU__Descriptions::SBC__AP__PDU ret_dcc; + TTCN_Buffer TTCN_buf; + TTCN_buf.clear(); + TTCN_buf.put_s(ber_buf_len, ber_buf); + + ret_dcc.decode(SBC__AP__PDU__Descriptions::SBC__AP__PDU_descr_, TTCN_buf, + TTCN_EncDec::CT_BER, BER_ACCEPT_ALL); + + fftranscode_free(ber_buf); + + return ret_dcc; +} + +} diff --git a/library/sbcap/SBC_AP_IEs.asn b/library/sbcap/SBC_AP_IEs.asn new file mode 100644 index 0000000..3cfa847 --- /dev/null +++ b/library/sbcap/SBC_AP_IEs.asn @@ -0,0 +1,650 @@ +-- SBC-AP-IEs.asn +-- +-- Taken from 3GPP TS 29.168 V15.1.0 (2018-09) +-- http://www.3gpp.org/ftp/Specs/archive/29_series/29.168/29168-930.zip +-- +-- 4.4.5 Information Element Definitions +-- + +-- ************************************************************** +-- +-- Information Element Definitions +-- +-- ************************************************************** + +SBC-AP-IEs { +itu-t (0) identified-organization (4) etsi (0) mobileDomain (0) +eps-Access (21) modules (3) sbc-AP (3) version1 (1) sbc-AP-IEs (2)} + +DEFINITIONS AUTOMATIC TAGS ::= + +BEGIN + +IMPORTS + maxNrOfErrors, + maxNrOfTAIs, + maxnoofTAIforWarning, + maxnoofCellID, + maxnoofEmergencyAreaID, + + id-TypeOfError, + maxnoofCellinEAI, + maxnoofCellinTAI, + maxnoofeNBIds, + maxnoofRestartTAIs, + maxnoofRestartEAIs, + maxnoofRestartedCells, + maxnoofFailedCells, + maxnoof5GSTAIs, + maxnoofCellsingNB, + maxnoofCellsin5GS, + maxnoofCellsforRestartNR, + maxnoofRANNodes, + maxnoofRestart5GSTAIs, + maxnoofCellsin5GSTAI + +FROM SBC-AP-Constants + + Criticality, + ProcedureCode, + TriggeringMessage, + ProtocolIE-ID +FROM SBC-AP-CommonDataTypes + + ProtocolExtensionContainer{}, + + SBC-AP-PROTOCOL-EXTENSION +FROM SBC-AP-Containers; + + +-- A + +-- B + +Broadcast-Scheduled-Area-List ::= SEQUENCE { + cellId-Broadcast-List CellId-Broadcast-List OPTIONAL, + tAI-Broadcast-List TAI-Broadcast-List OPTIONAL, + emergencyAreaID-Broadcast-List EmergencyAreaID-Broadcast-List OPTIONAL, + iE-Extensions ProtocolExtensionContainer {{Broadcast-Scheduled-Area-List-ExtIEs}} OPTIONAL, + ... +} + +Broadcast-Scheduled-Area-List-ExtIEs SBC-AP-PROTOCOL-EXTENSION ::= { + ... +} + +Broadcast-Scheduled-Area-List-5GS ::= SEQUENCE { + cellId-Broadcast-List-5GS CellId-Broadcast-List-5GS OPTIONAL, + tAI-Broadcast-List-5GS TAI-Broadcast-List-5GS OPTIONAL, + emergencyAreaID-Broadcast-List EmergencyAreaID-Broadcast-List OPTIONAL, + iE-Extensions ProtocolExtensionContainer {{Broadcast-Scheduled-Area-List-5GS-ExtIEs}} OPTIONAL, + ... +} + +Broadcast-Scheduled-Area-List-5GS-ExtIEs SBC-AP-PROTOCOL-EXTENSION ::= { + ... +} + +Broadcast-Cancelled-Area-List ::= SEQUENCE { + cellID-Cancelled-List CellID-Cancelled-List OPTIONAL, + tAI-Cancelled-List TAI-Cancelled-List OPTIONAL, + emergencyAreaID-Cancelled-List EmergencyAreaID-Cancelled-List OPTIONAL, + iE-Extensions ProtocolExtensionContainer {{Broadcast-Cancelled-Area-List-ExtIEs}} OPTIONAL, + ... +} + +Broadcast-Cancelled-Area-List-ExtIEs SBC-AP-PROTOCOL-EXTENSION ::= { + ... +} + +Broadcast-Cancelled-Area-List-5GS ::= SEQUENCE { + cellID-Cancelled-List-5GS CellID-Cancelled-List-5GS OPTIONAL, + tAI-Cancelled-List-5GS TAI-Cancelled-List-5GS OPTIONAL, + emergencyAreaID-Cancelled-List EmergencyAreaID-Cancelled-List OPTIONAL, + iE-Extensions ProtocolExtensionContainer {{Broadcast-Cancelled-Area-List-5GS-ExtIEs}} OPTIONAL, + ... +} + +Broadcast-Cancelled-Area-List-5GS-ExtIEs SBC-AP-PROTOCOL-EXTENSION ::= { + ... +} + + +Broadcast-Empty-Area-List ::= SEQUENCE (SIZE (1.. maxnoofeNBIds)) OF Global-ENB-ID + +Broadcast-Empty-Area-List-5GS ::= SEQUENCE (SIZE (1.. maxnoofRANNodes)) OF Global-RAN-Node-ID + + +-- C + +CancelledCellinEAI ::= SEQUENCE (SIZE(1..maxnoofCellinEAI)) OF CancelledCellinEAI-Item + +CancelledCellinEAI-Item ::= SEQUENCE { + eCGI EUTRAN-CGI, + numberOfBroadcasts NumberOfBroadcasts, + iE-Extensions ProtocolExtensionContainer { {CancelledCellinEAI-Item-ExtIEs} } OPTIONAL, + ... +} + +CancelledCellinEAI-Item-ExtIEs SBC-AP-PROTOCOL-EXTENSION ::= { + ... +} +CancelledCellinTAI ::= SEQUENCE (SIZE(1..maxnoofCellinTAI)) OF CancelledCellinTAI-Item + +CancelledCellinTAI-Item ::= SEQUENCE{ + eCGI EUTRAN-CGI, + numberOfBroadcasts NumberOfBroadcasts, + iE-Extensions ProtocolExtensionContainer { {CancelledCellinTAI-Item-ExtIEs} } OPTIONAL, + ... +} + +CancelledCellinTAI-Item-ExtIEs SBC-AP-PROTOCOL-EXTENSION ::= { + ... +} + +CancelledCellinTAI-5GS ::= SEQUENCE (SIZE(1..maxnoofCellsin5GSTAI)) OF + SEQUENCE{ + nR-CGI NR-CGI, + numberOfBroadcasts NumberOfBroadcasts, + iE-Extensions ProtocolExtensionContainer { {CancelledCellinTAI-5GS-ExtIEs} } OPTIONAL, + ... +} + +CancelledCellinTAI-5GS-ExtIEs SBC-AP-PROTOCOL-EXTENSION ::= { + ... +} + +Cause ::= INTEGER { + message-accepted (0), + parameter-not-recognised (1), + parameter-value-invalid (2), + valid-message-not-identified (3), + tracking-area-not-valid (4), + unrecognised-message (5), + missing-mandatory-element (6), + mME-capacity-exceeded (7), + mME-memory-exceeded (8), + warning-broadcast-not-supported (9), + warning-broadcast-not-operational (10), + message-reference-already-used (11), + unspecifed-error (12), + transfer-syntax-error (13), + semantic-error (14), + message-not-compatible-with-receiver-state (15), + abstract-syntax-error-reject (16), + abstract-syntax-error-ignore-and-notify (17), + abstract-syntax-error-falsely-constructed-message (18) +} (0..255) + +CellId-Broadcast-List ::= SEQUENCE (SIZE(1..maxnoofCellID)) OF CellId-Broadcast-List-Item + +CellId-Broadcast-List-Item ::= SEQUENCE { + eCGI EUTRAN-CGI, + iE-Extensions ProtocolExtensionContainer { {CellId-Broadcast-List-Item-ExtIEs} } OPTIONAL, + ... +} + +CellId-Broadcast-List-Item-ExtIEs SBC-AP-PROTOCOL-EXTENSION ::= { + ... +} + +CellId-Broadcast-List-5GS ::= SEQUENCE (SIZE(1..maxnoofCellsin5GS)) OF + SEQUENCE { + nR-CGI NR-CGI, + iE-Extensions ProtocolExtensionContainer { {CellId-Broadcast-List-5GS-ExtIEs} } OPTIONAL, + ... +} + +CellId-Broadcast-List-5GS-ExtIEs SBC-AP-PROTOCOL-EXTENSION ::= { + ... +} + +CellID-Cancelled-List ::= SEQUENCE (SIZE(1..maxnoofCellID)) OF CellID-Cancelled-Item + +CellID-Cancelled-Item ::= SEQUENCE { + eCGI EUTRAN-CGI, + numberOfBroadcasts NumberOfBroadcasts, + iE-Extensions ProtocolExtensionContainer { {CellID-Cancelled-Item-ExtIEs} } OPTIONAL, + ... +} + +CellID-Cancelled-Item-ExtIEs SBC-AP-PROTOCOL-EXTENSION ::= { + ... +} + +CellID-Cancelled-List-5GS ::= SEQUENCE (SIZE(1..maxnoofCellsin5GS)) OF + SEQUENCE { + nR-CGI NR-CGI, + numberOfBroadcasts NumberOfBroadcasts, + iE-Extensions ProtocolExtensionContainer { {CellID-Cancelled-5GS-ExtIEs} } OPTIONAL, + ... +} + +CellID-Cancelled-5GS-ExtIEs SBC-AP-PROTOCOL-EXTENSION ::= { + ... +} + + + +CellIdentity ::= BIT STRING (SIZE (28)) + +Concurrent-Warning-Message-Indicator ::= ENUMERATED {true} + +Criticality-Diagnostics ::= SEQUENCE { + procedureCode ProcedureCode OPTIONAL, + triggeringMessage TriggeringMessage OPTIONAL, + procedureCriticality Criticality OPTIONAL, + iE-CriticalityDiagnostics CriticalityDiagnostics-IE-List OPTIONAL, + iE-Extensions ProtocolExtensionContainer { {CriticalityDiagnostics-ExtIEs} } OPTIONAL, + ... +} + +CriticalityDiagnostics-ExtIEs SBC-AP-PROTOCOL-EXTENSION ::= { + ... +} + +CriticalityDiagnostics-IE-List ::= SEQUENCE (SIZE (1..maxNrOfErrors)) OF + SEQUENCE { + iECriticality Criticality, + iE-ID ProtocolIE-ID, + typeOfError TypeOfError, + iE-Extensions ProtocolExtensionContainer {{CriticalityDiagnostics-IE-Item-ExtIEs}} OPTIONAL, + ... +} + +CriticalityDiagnostics-IE-Item-ExtIEs SBC-AP-PROTOCOL-EXTENSION ::= { + ... +} + + + +-- D + +Data-Coding-Scheme ::= BIT STRING (SIZE (8)) + +-- E + +ECGIList ::= SEQUENCE (SIZE(1..maxnoofCellID)) OF EUTRAN-CGI + +Emergency-Area-ID-List ::= SEQUENCE (SIZE(1..maxnoofEmergencyAreaID)) OF Emergency-Area-ID + +Emergency-Area-ID ::= OCTET STRING (SIZE (3)) + +EmergencyAreaID-Broadcast-List ::= SEQUENCE (SIZE(1..maxnoofEmergencyAreaID)) OF EmergencyAreaID-Broadcast-List-Item + +EmergencyAreaID-Broadcast-List-Item ::= SEQUENCE { + emergencyAreaID Emergency-Area-ID, + scheduledCellinEAI ScheduledCellinEAI, + iE-Extensions ProtocolExtensionContainer { {EmergencyAreaID-Broadcast-List-Item-ExtIEs} } OPTIONAL, + ... +} + +EmergencyAreaID-Broadcast-List-Item-ExtIEs SBC-AP-PROTOCOL-EXTENSION ::= { + ... +} + +EmergencyAreaID-Cancelled-List ::= SEQUENCE (SIZE(1..maxnoofEmergencyAreaID)) OF EmergencyAreaID-Cancelled-Item + +EmergencyAreaID-Cancelled-Item ::= SEQUENCE { + emergencyAreaID Emergency-Area-ID, + cancelledCellinEAI CancelledCellinEAI, + iE-Extensions ProtocolExtensionContainer { {EmergencyAreaID-Cancelled-Item-ExtIEs} } OPTIONAL, + ... +} + +EmergencyAreaID-Cancelled-Item-ExtIEs SBC-AP-PROTOCOL-EXTENSION ::= { + ... +} + +EUTRAN-CGI ::= SEQUENCE { + pLMNidentity PLMNidentity, + cell-ID CellIdentity, + iE-Extensions ProtocolExtensionContainer { {EUTRAN-CGI-ExtIEs} } OPTIONAL, + ... +} + +EUTRAN-CGI-ExtIEs SBC-AP-PROTOCOL-EXTENSION ::= { + ... +} + +Extended-Repetition-Period ::= INTEGER (4096..131071) + +ENB-ID ::= CHOICE { + macroENB-ID BIT STRING (SIZE(20)), + homeENB-ID BIT STRING (SIZE(28)), + ..., + short-macroENB-ID BIT STRING (SIZE(18)), + long-macroENB-ID BIT STRING (SIZE(21)) +} + + +-- F + +Failed-Cell-List ::= SEQUENCE (SIZE(1..maxnoofFailedCells)) OF EUTRAN-CGI + +Failed-Cell-List-NR ::= SEQUENCE (SIZE(1..maxnoofCellsingNB)) OF NR-CGI + +-- G + +Global-ENB-ID ::= SEQUENCE { + pLMNidentity PLMNidentity, + eNB-ID ENB-ID, + iE-Extensions ProtocolExtensionContainer { {GlobalENB-ID-ExtIEs} } OPTIONAL, + ... +} + +GlobalENB-ID-ExtIEs SBC-AP-PROTOCOL-EXTENSION ::= { + ... +} + +Global-RAN-Node-ID ::= CHOICE { + global-GNB-ID Global-GNB-ID, + global-NgENB-ID Global-NgENB-ID, + ... +} + +Global-GNB-ID ::= SEQUENCE { + pLMNidentity PLMNidentity, + gNB-ID GNB-ID, + iE-Extensions ProtocolExtensionContainer { {Global-GNB-ID-ExtIEs} } OPTIONAL, + ... +} + +Global-GNB-ID-ExtIEs SBC-AP-PROTOCOL-EXTENSION ::= { + ... +} + +GNB-ID ::= CHOICE { + gNB-ID BIT STRING (SIZE(22..32)), + ... +} +Global-NgENB-ID ::= SEQUENCE { + pLMNidentity PLMNidentity, + ngENB-ID ENB-ID, + iE-Extensions ProtocolExtensionContainer { {Global-NgENB-ID-ExtIEs} } OPTIONAL, + ... +} + +Global-NgENB-ID-ExtIEs SBC-AP-PROTOCOL-EXTENSION ::= { + ... +} + + + +-- H + +-- I + +-- J + +-- K + +-- L + +List-of-TAIs ::= SEQUENCE (SIZE (1..maxNrOfTAIs)) OF + SEQUENCE { + tai TAI +} + +List-of-TAIs-Restart ::= SEQUENCE (SIZE (1..maxnoofRestartTAIs)) OF + SEQUENCE { + tai TAI +} + + +List-of-EAIs-Restart ::= SEQUENCE (SIZE(1..maxnoofRestartEAIs)) OF Emergency-Area-ID + +List-of-5GS-TAIs ::= SEQUENCE (SIZE (1..maxnoof5GSTAIs)) OF TAI-5GS + +List-of-5GS-Cells-for-Failure ::= SEQUENCE ( SIZE(1..maxnoofCellsingNB)) OF NR-CGI + +List-of-5GS-TAI-for-Restart ::= SEQUENCE (SIZE (1..maxnoofRestart5GSTAIs)) OF TAI-5GS + + +-- M + +Message-Identifier ::= BIT STRING (SIZE (16)) + +-- N + +Number-of-Broadcasts-Requested ::= INTEGER (0..65535) + +-- For Number-of-Broadcasts-Requested = 0 and Repetition-Period = 0, then eNB action is no broadcast +-- for ETWS Secondary and CMAS. +-- +-- For Number-of-Broadcasts-Requested = 1 and Repetition-Period = 0, then eNB action is broadcast +-- only once for ETWS and CMAS. +-- +-- For Number-of-Broadcasts-Requested = 0 and Repetition-Period > 0, then eNB action is no broadcast +-- for the ETWS Secondary, and broadcast until further notice for the CMAS. +-- +-- For Number-of-Broadcasts-Requested > 0 and Repetition-Period > 0, then eNB action is normal +-- broadcast. +-- All other combinations of Number-of-Broadcasts-Requested and Repetition-Period are considered +-- invalid. + +NumberOfBroadcasts ::= INTEGER (0..65535) + +NR-CGIList ::= SEQUENCE (SIZE(1..maxnoofCellsingNB)) OF NR-CGI + +NR-CGI ::= SEQUENCE { + pLMNidentity PLMNidentity, + nRCellIdentity NRCellIdentity, + iE-Extensions ProtocolExtensionContainer { {NR-CGI-ExtIEs} } OPTIONAL, + ... +} + +NR-CGI-ExtIEs SBC-AP-PROTOCOL-EXTENSION ::= { + ... +} + +NRCellIdentity ::= BIT STRING (SIZE(36)) + +NgENB-ID ::= CHOICE { + macroNgENB-ID BIT STRING (SIZE(20)), + shortMacroNgENB-ID BIT STRING (SIZE(18)), + longMacroNgENB-ID BIT STRING (SIZE(21)), + ... +} + +-- O +Omc-Id ::= OCTET STRING (SIZE (1..20)) + + +-- P +PLMNidentity ::= TBCD-STRING + +-- Q + +-- R + +Repetition-Period ::= INTEGER (0..4096) +-- 1 to 4096: Each unit represents a repetition of one second to a maximum of +-- once per 4096 seconds (~1 hour). +-- 0: no repetition +-- A CBC compliant to this version or later of this specification shall not send a repetition period +-- greater than 4095. +-- For backwards compatibility with a CBC compliant to an earlier version of this specification the +-- maximum value of the repetition period defined in ASN.1 remains at 4096. +-- If the value of the Repetition Period IE received in the WRITE-REPLACE WARNING REQUEST message is +-- set to 4096, the MME shall set the Repetition Period IE to the maximum value 4095 supported on +-- the S1-MME interface as defined in [7] before forwarding to the selected eNBs. + +Restarted-Cell-List ::= SEQUENCE (SIZE(1.. maxnoofRestartedCells)) OF EUTRAN-CGI + +RAT-Selector-5GS ::= ENUMERATED {true} + +Restarted-Cell-List-NR ::= SEQUENCE (SIZE(1.. maxnoofCellsforRestartNR)) OF NR-CGI + + + +-- S + +ScheduledCellinEAI ::= SEQUENCE (SIZE(1..maxnoofCellinEAI)) OF ScheduledCellinEAI-Item + +ScheduledCellinEAI-Item ::= SEQUENCE { + eCGI EUTRAN-CGI, + iE-Extensions ProtocolExtensionContainer { {ScheduledCellinEAI-Item-ExtIEs} } OPTIONAL, + ... +} + +ScheduledCellinEAI-Item-ExtIEs SBC-AP-PROTOCOL-EXTENSION ::= { + ... +} + +ScheduledCellinTAI ::= SEQUENCE (SIZE(1..maxnoofCellinTAI)) OF ScheduledCellinTAI-Item + +ScheduledCellinTAI-Item ::= SEQUENCE{ + eCGI EUTRAN-CGI, + iE-Extensions ProtocolExtensionContainer { {ScheduledCellinTAI-Item-ExtIEs} } OPTIONAL, + ... +} + +ScheduledCellinTAI-Item-ExtIEs SBC-AP-PROTOCOL-EXTENSION ::= { + ... +} + +ScheduledCellinTAI-5GS ::= SEQUENCE (SIZE(1..maxnoofCellsin5GSTAI)) OF + SEQUENCE{ + nR-CGI NR-CGI, + iE-Extensions ProtocolExtensionContainer { {ScheduledCellinTAI-5GS-ExtIEs} } OPTIONAL, + ... +} + +ScheduledCellinTAI-5GS-ExtIEs SBC-AP-PROTOCOL-EXTENSION ::= { + ... +} + +Send-Write-Replace-Warning-Indication ::= ENUMERATED {true} + +Send-Stop-Warning-Indication ::= ENUMERATED {true} + +Serial-Number ::= BIT STRING (SIZE (16)) + +Stop-All-Indicator ::= ENUMERATED {true} + +-- T + +TAC ::= OCTET STRING (SIZE (2)) + +TAC-5GS ::= OCTET STRING (SIZE (3)) + +TAI-Broadcast-List ::= SEQUENCE (SIZE(1..maxnoofTAIforWarning)) OF TAI-Broadcast-List-Item + +TAI-Broadcast-List-Item ::= SEQUENCE { + tAI TAI, + scheduledCellinTAI ScheduledCellinTAI, + iE-Extensions ProtocolExtensionContainer { {TAI-Broadcast-List-Item-ExtIEs} } OPTIONAL, + ... +} + +TAI-Broadcast-List-Item-ExtIEs SBC-AP-PROTOCOL-EXTENSION ::= { + ... +} + +TAI-Broadcast-List-5GS ::= SEQUENCE (SIZE(1..maxnoof5GSTAIs)) OF + SEQUENCE { + tAI-5GS TAI-5GS, + scheduledCellinTAI-5GS ScheduledCellinTAI-5GS, + iE-Extensions ProtocolExtensionContainer { {TAI-Broadcast-List-5GS-ExtIEs} } OPTIONAL, + ... +} + +TAI-Broadcast-List-5GS-ExtIEs SBC-AP-PROTOCOL-EXTENSION ::= { + ... +} + + +TAI-Cancelled-List ::= SEQUENCE (SIZE(1..maxnoofTAIforWarning)) OF TAI-Cancelled-List-Item + +TAI-Cancelled-List-Item ::= SEQUENCE { + tAI TAI, + cancelledCellinTAI CancelledCellinTAI, + iE-Extensions ProtocolExtensionContainer { {TAI-Cancelled-List-Item-ExtIEs} } OPTIONAL, + ... +} + +TAI-Cancelled-List-Item-ExtIEs SBC-AP-PROTOCOL-EXTENSION ::= { + ... +} + +TAI-Cancelled-List-5GS ::= SEQUENCE (SIZE(1..maxnoof5GSTAIs)) OF + SEQUENCE { + tAI-5GS TAI-5GS, + cancelledCellinTAI-5GS CancelledCellinTAI-5GS, + iE-Extensions ProtocolExtensionContainer { {TAI-Cancelled-List-5GS-ExtIEs} } OPTIONAL, + ... +} + +TAI-Cancelled-List-5GS-ExtIEs SBC-AP-PROTOCOL-EXTENSION ::= { + ... +} + +TAI-List-for-Warning ::= SEQUENCE (SIZE(1.. maxnoofTAIforWarning)) OF TAI + +TAI ::= SEQUENCE { + pLMNidentity PLMNidentity, + tAC TAC, + iE-Extensions ProtocolExtensionContainer { {TAI-ExtIEs} } OPTIONAL +} + +TAI-ExtIEs SBC-AP-PROTOCOL-EXTENSION ::= { + ... +} + +TBCD-STRING ::= OCTET STRING (SIZE (3)) + +TypeOfError ::= ENUMERATED { + not-understood, + missing, + ... +} +TAI-5GS ::= SEQUENCE { + pLMNidentity PLMNidentity, + tAC-5GS TAC-5GS, + iE-Extensions ProtocolExtensionContainer { {TAI-5GS-ExtIEs} } OPTIONAL +} + +TAI-5GS-ExtIEs SBC-AP-PROTOCOL-EXTENSION ::= { + ... +} + + +-- U + +Unknown-Tracking-Area-List ::= SEQUENCE (SIZE(1.. maxNrOfTAIs)) OF TAI + +Unknown-5GS-Tracking-Area-List ::= SEQUENCE (SIZE(1.. maxnoof5GSTAIs)) OF TAI-5GS + + +-- V + +-- W + +Warning-Area-List ::= CHOICE { + cell-ID-List ECGIList, + tracking-Area-List-for-Warning TAI-List-for-Warning, + emergency-Area-ID-List Emergency-Area-ID-List, + ... +} + +Warning-Message-Content ::= OCTET STRING (SIZE (1..9600)) +Warning-Area-Coordinates ::= OCTET STRING (SIZE (1..1024)) +Warning-Security-Information ::= OCTET STRING (SIZE (50)) +Warning-Type ::= OCTET STRING (SIZE (2)) + +Warning-Area-List-5GS ::= CHOICE { + cell-ID-List ECGIList, + nR-CGIList NR-CGIList, + tAIList-5GS TAI-5GS, + emergencyAreaIDList Emergency-Area-ID-List, + ... +} + + + +-- X + +-- Y + +END diff --git a/library/sbcap/SBC_AP_PDU_Contents.asn b/library/sbcap/SBC_AP_PDU_Contents.asn new file mode 100644 index 0000000..1117432 --- /dev/null +++ b/library/sbcap/SBC_AP_PDU_Contents.asn @@ -0,0 +1,374 @@ +-- SBC-AP-PDU-Contents.asn +-- +-- Taken from 3GPP TS 29.168 V15.1.0 (2018-09) +-- http://www.3gpp.org/ftp/Specs/archive/29_series/29.168/29168-930.zip +-- +-- 4.4.4 PDU Definitions +-- + +-- ************************************************************** +-- +-- PDU definitions for SBC-AP. +-- +-- ************************************************************** + +SBC-AP-PDU-Contents { +itu-t (0) identified-organization (4) etsi (0) mobileDomain (0) +eps-Access (21) modules (3) sbc-AP (3) version1 (1) sbc-AP-PDU-Contents (1)} + +DEFINITIONS AUTOMATIC TAGS ::= + +BEGIN + +-- ************************************************************** +-- +-- IE parameter types from other modules. +-- +-- ************************************************************** + +IMPORTS + + Cause, + Concurrent-Warning-Message-Indicator, + Criticality-Diagnostics, + Data-Coding-Scheme, + Message-Identifier, + Serial-Number, + List-of-TAIs, + Warning-Area-List, + Omc-Id, + Repetition-Period, + Extended-Repetition-Period, + Number-of-Broadcasts-Requested, + Warning-Type, + Warning-Security-Information, + Warning-Message-Content, + Warning-Area-Coordinates, + Send-Write-Replace-Warning-Indication, + Broadcast-Scheduled-Area-List, + Unknown-Tracking-Area-List, + Send-Stop-Warning-Indication, + Broadcast-Cancelled-Area-List, + Stop-All-Indicator, + Broadcast-Empty-Area-List, + Restarted-Cell-List, + Global-ENB-ID, + List-of-TAIs-Restart, + List-of-EAIs-Restart, + Failed-Cell-List, + List-of-5GS-TAIs, + Warning-Area-List-5GS, + Global-RAN-Node-ID, + Global-GNB-ID, + RAT-Selector-5GS, + Unknown-5GS-Tracking-Area-List, + Broadcast-Scheduled-Area-List-5GS, + Broadcast-Cancelled-Area-List-5GS, + Broadcast-Empty-Area-List-5GS, + Restarted-Cell-List-NR, + Failed-Cell-List-NR, + List-of-5GS-TAI-for-Restart + +FROM SBC-AP-IEs + + ProtocolExtensionContainer{}, + ProtocolIE-Container{}, + SBC-AP-PROTOCOL-EXTENSION, + SBC-AP-PROTOCOL-IES +FROM SBC-AP-Containers + + id-Concurrent-Warning-Message-Indicator, + id-Criticality-Diagnostics, + id-Cause, + id-Data-Coding-Scheme, + id-List-of-TAIs, + id-Message-Identifier, + id-Serial-Number, + id-Number-of-Broadcasts-Requested, + id-Omc-Id, + id-Radio-Resource-Loading-List, + id-Recovery-Indication, + id-Repetition-Period, + id-Extended-Repetition-Period, + id-Warning-Area-List, + id-Warning-Message-Content, + id-Warning-Area-Coordinates, + id-Warning-Security-Information, + id-Warning-Type, + id-Send-Write-Replace-Warning-Indication, + id-Broadcast-Scheduled-Area-List, + id-Unknown-Tracking-Area-List, + id-Send-Stop-Warning-Indication, + id-Broadcast-Cancelled-Area-List, + id-Stop-All-Indicator, + id-Broadcast-Empty-Area-List, + id-Global-ENB-ID, + id-Restarted-Cell-List, + id-List-of-TAIs-Restart, + id-List-of-EAIs-Restart, + id-Failed-Cell-List, + id-List-of-5GS-TAIs, + id-Warning-Area-List-5GS, + id-Global-RAN-Node-ID, + id-Global-GNB-ID, + id-RAT-Selector-5GS, + id-Unknown-5GS-Tracking-Area-List, + id-Broadcast-Scheduled-Area-List-5GS, + id-Broadcast-Cancelled-Area-List-5GS, + id-Broadcast-Empty-Area-List-5GS, + id-Restarted-Cell-List-NR, + id-Failed-Cell-List-NR, + id-List-of-5GS-TAI-for-Restart + +FROM SBC-AP-Constants; + +-- ************************************************************** +-- +-- Write-Replace-Warning-Request +-- +-- ************************************************************** + +Write-Replace-Warning-Request ::= SEQUENCE { + protocolIEs ProtocolIE-Container { {Write-Replace-Warning-Request-IEs} }, + protocolExtensions ProtocolExtensionContainer { {Write-Replace-Warning-Request-Extensions} } OPTIONAL, + ... +} + +Write-Replace-Warning-Request-IEs SBC-AP-PROTOCOL-IES ::= { + { ID id-Message-Identifier CRITICALITY reject TYPE Message-Identifier PRESENCE mandatory } | + { ID id-Serial-Number CRITICALITY reject TYPE Serial-Number PRESENCE mandatory } | + { ID id-List-of-TAIs CRITICALITY reject TYPE List-of-TAIs PRESENCE optional } | + { ID id-Warning-Area-List CRITICALITY ignore TYPE Warning-Area-List PRESENCE optional } | + { ID id-Repetition-Period CRITICALITY reject TYPE Repetition-Period PRESENCE mandatory } | + { ID id-Extended-Repetition-Period CRITICALITY reject TYPE Extended-Repetition-Period PRESENCE optional } | + + { ID id-Number-of-Broadcasts-Requested + CRITICALITY reject TYPE Number-of-Broadcasts-Requested PRESENCE mandatory } | + { ID id-Warning-Type CRITICALITY ignore TYPE Warning-Type PRESENCE optional } | + { ID id-Warning-Security-Information CRITICALITY ignore TYPE Warning-Security-Information PRESENCE optional } | + { ID id-Data-Coding-Scheme CRITICALITY ignore TYPE Data-Coding-Scheme PRESENCE optional } | + { ID id-Warning-Message-Content + CRITICALITY ignore TYPE Warning-Message-Content PRESENCE optional } | + { ID id-Omc-Id CRITICALITY ignore TYPE Omc-Id PRESENCE optional } | + { ID id-Concurrent-Warning-Message-Indicator CRITICALITY reject TYPE Concurrent-Warning-Message-Indicator PRESENCE optional } | + { ID id-Send-Write-Replace-Warning-Indication CRITICALITY ignore TYPE Send-Write-Replace-Warning-Indication PRESENCE optional } | + { ID id-Global-ENB-ID CRITICALITY ignore TYPE Global-ENB-ID PRESENCE optional }, + ... , + {ID id-Warning-Area-Coordinates CRITICALITY ignore TYPE Warning-Area-Coordinates PRESENCE optional} +} + +Write-Replace-Warning-Request-Extensions SBC-AP-PROTOCOL-EXTENSION ::= { + { ID id-List-of-5GS-TAIs CRITICALITY ignore EXTENSION List-of-5GS-TAIs PRESENCE optional }| + { ID id-Warning-Area-List-5GS CRITICALITY ignore EXTENSION Warning-Area-List-5GS PRESENCE optional }| + { ID id-Global-RAN-Node-ID CRITICALITY ignore EXTENSION Global-RAN-Node-ID PRESENCE optional }| + { ID id-RAT-Selector-5GS CRITICALITY ignore EXTENSION RAT-Selector-5GS PRESENCE optional }, + ... +} + +-- ************************************************************** +-- +-- Write-Replace-Warning-Response +-- +-- ************************************************************** + +Write-Replace-Warning-Response ::= SEQUENCE { + protocolIEs ProtocolIE-Container { {Write-Replace-Warning-Response-IEs} }, + protocolExtensions ProtocolExtensionContainer { {Write-Replace-Warning-Response-Extensions} } OPTIONAL, + ... +} + +Write-Replace-Warning-Response-IEs SBC-AP-PROTOCOL-IES ::= { + { ID id-Message-Identifier CRITICALITY reject TYPE Message-Identifier PRESENCE mandatory } | + { ID id-Serial-Number CRITICALITY reject TYPE Serial-Number PRESENCE mandatory } | + { ID id-Cause CRITICALITY reject TYPE Cause PRESENCE mandatory } | + { ID id-Criticality-Diagnostics CRITICALITY ignore TYPE Criticality-Diagnostics PRESENCE optional } | + { ID id-Unknown-Tracking-Area-List CRITICALITY ignore TYPE List-of-TAIs PRESENCE optional }, + ... +} + +Write-Replace-Warning-Response-Extensions SBC-AP-PROTOCOL-EXTENSION ::= { + { ID id-Unknown-5GS-Tracking-Area-List CRITICALITY ignore EXTENSION Unknown-5GS-Tracking-Area-List PRESENCE optional }, + ... +} + +-- ************************************************************** +-- +-- Stop-Warning-Request +-- +-- ************************************************************** + +Stop-Warning-Request ::= SEQUENCE { + protocolIEs ProtocolIE-Container { {Stop-Warning-Request-IEs} }, + protocolExtensions ProtocolExtensionContainer { {Stop-Warning-Request-Extensions} } OPTIONAL, + ... +} + +Stop-Warning-Request-IEs SBC-AP-PROTOCOL-IES ::= { + { ID id-Message-Identifier CRITICALITY reject TYPE Message-Identifier PRESENCE mandatory } | + { ID id-Serial-Number CRITICALITY reject TYPE Serial-Number PRESENCE mandatory } | + { ID id-List-of-TAIs CRITICALITY reject TYPE List-of-TAIs PRESENCE optional } | + { ID id-Warning-Area-List CRITICALITY ignore TYPE Warning-Area-List PRESENCE optional }| + { ID id-Omc-Id CRITICALITY ignore TYPE Omc-Id PRESENCE optional } | + { ID id-Send-Stop-Warning-Indication CRITICALITY ignore TYPE Send-Stop-Warning-Indication PRESENCE optional } | + { ID id-Stop-All-Indicator CRITICALITY reject TYPE Stop-All-Indicator PRESENCE optional}, + ... +} + +Stop-Warning-Request-Extensions SBC-AP-PROTOCOL-EXTENSION ::= { + { ID id-List-of-5GS-TAIs CRITICALITY ignore EXTENSION List-of-5GS-TAIs PRESENCE optional }| + { ID id-Warning-Area-List-5GS CRITICALITY ignore EXTENSION Warning-Area-List-5GS PRESENCE optional } | { ID id-RAT-Selector-5GS CRITICALITY ignore EXTENSION RAT-Selector-5GS PRESENCE optional }, + ... +} + +-- ************************************************************** +-- +-- Stop-Warning-Response +-- +-- ************************************************************** + +Stop-Warning-Response ::= SEQUENCE { + protocolIEs ProtocolIE-Container { {Stop-Warning-Response-IEs} }, + protocolExtensions ProtocolExtensionContainer { {Stop-Warning-Response-Extensions} } OPTIONAL, + ... +} + +Stop-Warning-Response-IEs SBC-AP-PROTOCOL-IES ::= { + { ID id-Message-Identifier CRITICALITY reject TYPE Message-Identifier PRESENCE mandatory } | + { ID id-Serial-Number CRITICALITY reject TYPE Serial-Number PRESENCE mandatory } | + { ID id-Cause CRITICALITY reject TYPE Cause PRESENCE mandatory } | + { ID id-Criticality-Diagnostics CRITICALITY ignore TYPE Criticality-Diagnostics PRESENCE optional } | + { ID id-Unknown-Tracking-Area-List CRITICALITY ignore TYPE List-of-TAIs PRESENCE optional }, + ... +} + +Stop-Warning-Response-Extensions SBC-AP-PROTOCOL-EXTENSION ::= { + { ID id-Unknown-5GS-Tracking-Area-List CRITICALITY ignore EXTENSION Unknown-5GS-Tracking-Area-List PRESENCE optional }, + ... +} + +-- ************************************************************** +-- +-- Write-Replace-Warning-Indication +-- +-- ************************************************************** + +Write-Replace-Warning-Indication ::= SEQUENCE { + protocolIEs ProtocolIE-Container { {Write-Replace-Warning-Indication-IEs} }, + protocolExtensions ProtocolExtensionContainer { {Write-Replace-Warning-Indication-Extensions} } OPTIONAL, + ... +} + +Write-Replace-Warning-Indication-IEs SBC-AP-PROTOCOL-IES ::= { + { ID id-Message-Identifier CRITICALITY reject TYPE Message-Identifier PRESENCE mandatory } | + { ID id-Serial-Number CRITICALITY reject TYPE Serial-Number PRESENCE mandatory } | + { ID id-Broadcast-Scheduled-Area-List CRITICALITY reject TYPE Broadcast-Scheduled-Area-List PRESENCE optional }, + ... +} + +Write-Replace-Warning-Indication-Extensions SBC-AP-PROTOCOL-EXTENSION ::= { + { ID id-Broadcast-Scheduled-Area-List-5GS CRITICALITY ignore EXTENSION Broadcast-Scheduled-Area-List-5GS PRESENCE optional }, + + ... +} + +-- ************************************************************** +-- +-- Stop-Warning-Indication +-- +-- ************************************************************** + +Stop-Warning-Indication ::= SEQUENCE { + protocolIEs ProtocolIE-Container { {Stop-Warning-Indication-IEs} }, + protocolExtensions ProtocolExtensionContainer { {Stop-Warning-Indication-Extensions} } OPTIONAL, + ... +} + +Stop-Warning-Indication-IEs SBC-AP-PROTOCOL-IES ::= { + { ID id-Message-Identifier CRITICALITY reject TYPE Message-Identifier PRESENCE mandatory } | + { ID id-Serial-Number CRITICALITY reject TYPE Serial-Number PRESENCE mandatory } | + { ID id-Broadcast-Cancelled-Area-List CRITICALITY reject TYPE Broadcast-Cancelled-Area-List PRESENCE optional }| + { ID id-Broadcast-Empty-Area-List CRITICALITY ignore TYPE Broadcast-Empty-Area-List PRESENCE optional }, + ... +} + +Stop-Warning-Indication-Extensions SBC-AP-PROTOCOL-EXTENSION ::= { + { ID id-Broadcast-Cancelled-Area-List-5GS CRITICALITY ignore EXTENSION Broadcast-Cancelled-Area-List-5GS PRESENCE optional }| + { ID id-Broadcast-Empty-Area-List-5GS CRITICALITY ignore EXTENSION Broadcast-Empty-Area-List-5GS PRESENCE optional }, + ... +} + +-- ************************************************************** +-- +-- PWS-Restart-Indication +-- +-- ************************************************************** + +PWS-Restart-Indication ::= SEQUENCE { + protocolIEs ProtocolIE-Container { {PWS-Restart-Indication-IEs} }, + protocolExtensions ProtocolExtensionContainer { {PWS-Restart-Indication-Extensions} } OPTIONAL, + ... +} + +PWS-Restart-Indication-IEs SBC-AP-PROTOCOL-IES ::= { + { ID id-Restarted-Cell-List CRITICALITY reject TYPE Restarted-Cell-List PRESENCE mandatory }| + { ID id-Global-ENB-ID CRITICALITY reject TYPE Global-ENB-ID PRESENCE mandatory } | + { ID id-List-of-TAIs-Restart CRITICALITY reject TYPE List-of-TAIs-Restart PRESENCE mandatory } | + { ID id-List-of-EAIs-Restart CRITICALITY reject TYPE List-of-EAIs-Restart PRESENCE optional }, + ... +} + +PWS-Restart-Indication-Extensions SBC-AP-PROTOCOL-EXTENSION ::= { + { ID id-Restarted-Cell-List-NR CRITICALITY ignore EXTENSION Restarted-Cell-List-NR PRESENCE optional }| + { ID id-List-of-5GS-TAI-for-Restart CRITICALITY ignore EXTENSION List-of-5GS-TAI-for-Restart PRESENCE optional }| +{ ID id-Global-GNB-ID CRITICALITY ignore EXTENSION Global-GNB-ID PRESENCE optional }, + ... +} + +-- ************************************************************** +-- +-- PWS-Failure-Indication +-- +-- ************************************************************** + +PWS-Failure-Indication ::= SEQUENCE { + protocolIEs ProtocolIE-Container { {PWS-Failure-Indication-IEs} }, + protocolExtensions ProtocolExtensionContainer { {PWS-Failure-Indication-Extensions} } OPTIONAL, + ... +} + +PWS-Failure-Indication-IEs SBC-AP-PROTOCOL-IES ::= { + { ID id-Failed-Cell-List CRITICALITY reject TYPE Failed-Cell-List PRESENCE mandatory }| + { ID id-Global-ENB-ID CRITICALITY reject TYPE Global-ENB-ID PRESENCE mandatory }, + ... +} + +PWS-Failure-Indication-Extensions SBC-AP-PROTOCOL-EXTENSION ::= { + { ID id-Failed-Cell-List-NR CRITICALITY ignore EXTENSION Failed-Cell-List-NR PRESENCE optional }| + { ID id-Global-GNB-ID CRITICALITY ignore EXTENSION Global-GNB-ID PRESENCE optional }, + ... +} + +-- ************************************************************** +-- +-- ERROR INDICATION ELEMENTARY PROCEDURE +-- +-- ************************************************************** + +-- ************************************************************** +-- +-- Error Indication +-- +-- ************************************************************** + +Error-Indication ::= SEQUENCE { + protocolIEs ProtocolIE-Container {{ErrorIndicationIEs}}, + ... +} + +ErrorIndicationIEs SBC-AP-PROTOCOL-IES ::= { + { ID id-Cause CRITICALITY ignore TYPE Cause PRESENCE optional } | + { ID id-Criticality-Diagnostics CRITICALITY ignore TYPE Criticality-Diagnostics PRESENCE optional } , + ... +} + +END diff --git a/library/sbcap/SBC_AP_PDU_Descriptions.asn b/library/sbcap/SBC_AP_PDU_Descriptions.asn new file mode 100644 index 0000000..fbb80d5 --- /dev/null +++ b/library/sbcap/SBC_AP_PDU_Descriptions.asn @@ -0,0 +1,179 @@ +-- SBC-AP-PDU-Descriptions.asn +-- +-- Taken from 3GPP TS 29.168 V15.1.0 (2018-09) +-- http://www.3gpp.org/ftp/Specs/archive/29_series/29.168/29168-930.zip +-- +-- 4.4.3 Elementary Procedure Definitions +-- + +-- ************************************************************** +-- +-- Elementary Procedure definitions +-- +-- ************************************************************** + +SBC-AP-PDU-Descriptions { +itu-t (0) identified-organization (4) etsi (0) mobileDomain (0) +eps-Access (21) modules (3) sbc-AP (3) version1 (1) sbc-AP-PDU-Descriptions (0)} + +DEFINITIONS AUTOMATIC TAGS ::= + +BEGIN + +-- ************************************************************** +-- +-- IE parameter types from other modules. +-- +-- ************************************************************** + +IMPORTS + Criticality, + ProcedureCode +FROM SBC-AP-CommonDataTypes + + Write-Replace-Warning-Request, + Write-Replace-Warning-Response, + Stop-Warning-Request, + Stop-Warning-Response, + Error-Indication, + Write-Replace-Warning-Indication, + Stop-Warning-Indication, + PWS-Restart-Indication, + PWS-Failure-Indication +FROM SBC-AP-PDU-Contents + + id-Write-Replace-Warning, + id-Stop-Warning, + id-Error-Indication, + id-Write-Replace-Warning-Indication, + id-Stop-Warning-Indication, + id-PWS-Restart-Indication, + id-PWS-Failure-Indication +FROM SBC-AP-Constants; + +-- ************************************************************** +-- +-- Interface Elementary Procedure Class +-- +-- ************************************************************** + +SBC-AP-ELEMENTARY-PROCEDURE ::= CLASS { + &InitiatingMessage , + &SuccessfulOutcome OPTIONAL, + &UnsuccessfulOutcome OPTIONAL, + &procedureCode ProcedureCode UNIQUE, + &criticality Criticality DEFAULT ignore +} +WITH SYNTAX { + INITIATING MESSAGE &InitiatingMessage + [SUCCESSFUL OUTCOME &SuccessfulOutcome] + [UNSUCCESSFUL OUTCOME &UnsuccessfulOutcome] + PROCEDURE CODE &procedureCode + [CRITICALITY &criticality] +} + +-- ************************************************************** +-- +-- Interface PDU Definition +-- +-- ************************************************************** + +SBC-AP-PDU ::= CHOICE { + initiatingMessage InitiatingMessage, + successfulOutcome SuccessfulOutcome, + unsuccessfulOutcome UnsuccessfulOutcome, + ... +} + +InitiatingMessage ::= SEQUENCE { + procedureCode SBC-AP-ELEMENTARY-PROCEDURE.&procedureCode ({SBC-AP-ELEMENTARY-PROCEDURES}), + criticality SBC-AP-ELEMENTARY-PROCEDURE.&criticality ({SBC-AP-ELEMENTARY-PROCEDURES}{@procedureCode}), + value SBC-AP-ELEMENTARY-PROCEDURE.&InitiatingMessage ({SBC-AP-ELEMENTARY-PROCEDURES}{@procedureCode}) +} + +SuccessfulOutcome ::= SEQUENCE { + procedureCode SBC-AP-ELEMENTARY-PROCEDURE.&procedureCode ({SBC-AP-ELEMENTARY-PROCEDURES}), + criticality SBC-AP-ELEMENTARY-PROCEDURE.&criticality ({SBC-AP-ELEMENTARY-PROCEDURES}{@procedureCode}), + value SBC-AP-ELEMENTARY-PROCEDURE.&SuccessfulOutcome ({SBC-AP-ELEMENTARY-PROCEDURES}{@procedureCode}) +} + +UnsuccessfulOutcome ::= SEQUENCE { + procedureCode SBC-AP-ELEMENTARY-PROCEDURE.&procedureCode ({SBC-AP-ELEMENTARY-PROCEDURES}), + criticality SBC-AP-ELEMENTARY-PROCEDURE.&criticality ({SBC-AP-ELEMENTARY-PROCEDURES}{@procedureCode}), + value SBC-AP-ELEMENTARY-PROCEDURE.&UnsuccessfulOutcome ({SBC-AP-ELEMENTARY-PROCEDURES}{@procedureCode}) +} + +-- ************************************************************** +-- +-- Interface Elementary Procedure List +-- +-- ************************************************************** + +SBC-AP-ELEMENTARY-PROCEDURES SBC-AP-ELEMENTARY-PROCEDURE ::= { + SBC-AP-ELEMENTARY-PROCEDURES-CLASS-1 | + SBC-AP-ELEMENTARY-PROCEDURES-CLASS-2 , + ... +} + +SBC-AP-ELEMENTARY-PROCEDURES-CLASS-1 SBC-AP-ELEMENTARY-PROCEDURE ::= { + write-Replace-Warning | + stop-Warning , + ... +} + +SBC-AP-ELEMENTARY-PROCEDURES-CLASS-2 SBC-AP-ELEMENTARY-PROCEDURE ::= { + error-Indication | + write-Replace-Warning-Indication | + stop-Warning-Indication | + pws-Restart-Indication | + pws-Failure-Indication, + ... + } + +write-Replace-Warning SBC-AP-ELEMENTARY-PROCEDURE ::= { + INITIATING MESSAGE Write-Replace-Warning-Request + SUCCESSFUL OUTCOME Write-Replace-Warning-Response + + PROCEDURE CODE id-Write-Replace-Warning + CRITICALITY reject +} + +stop-Warning SBC-AP-ELEMENTARY-PROCEDURE ::= { + INITIATING MESSAGE Stop-Warning-Request + SUCCESSFUL OUTCOME Stop-Warning-Response + + PROCEDURE CODE id-Stop-Warning + CRITICALITY reject +} + +error-Indication SBC-AP-ELEMENTARY-PROCEDURE ::= { + INITIATING MESSAGE Error-Indication + PROCEDURE CODE id-Error-Indication + CRITICALITY ignore +} + +write-Replace-Warning-Indication SBC-AP-ELEMENTARY-PROCEDURE ::= { + INITIATING MESSAGE Write-Replace-Warning-Indication + PROCEDURE CODE id-Write-Replace-Warning-Indication + CRITICALITY ignore +} + +stop-Warning-Indication SBC-AP-ELEMENTARY-PROCEDURE ::= { + INITIATING MESSAGE Stop-Warning-Indication + PROCEDURE CODE id-Stop-Warning-Indication + CRITICALITY ignore +} + +pws-Restart-Indication SBC-AP-ELEMENTARY-PROCEDURE ::= { + INITIATING MESSAGE PWS-Restart-Indication + PROCEDURE CODE id-PWS-Restart-Indication + CRITICALITY ignore +} + +pws-Failure-Indication SBC-AP-ELEMENTARY-PROCEDURE ::= { + INITIATING MESSAGE PWS-Failure-Indication + PROCEDURE CODE id-PWS-Failure-Indication + CRITICALITY ignore +} + +END diff --git a/library/sbcap/SBC_AP_Templates.ttcn b/library/sbcap/SBC_AP_Templates.ttcn new file mode 100644 index 0000000..c0c0837 --- /dev/null +++ b/library/sbcap/SBC_AP_Templates.ttcn @@ -0,0 +1,276 @@ +module SBC_AP_Templates { + +import from General_Types all; +import from Osmocom_Types all; + +import from SBC_AP_IEs all; +import from SBC_AP_Constants all; +import from SBC_AP_Containers all; +import from SBC_AP_PDU_Contents all; +import from SBC_AP_PDU_Descriptions all; + +import from SBC_AP_Types all; + +template (value) SBC_AP_PDU +ts_SBCAP_PWS_RESTART( + template (value) Restarted_Cell_List restart_cl, + template (value) Global_ENB_ID global_enb_id) := { + initiatingMessage := { + procedureCode := id_PWS_Restart_Indication, + criticality := reject, + value_ := { + PWS_Restart_Indication := { + protocolIEs := { + { + id := SBC_AP_Constants.id_Restarted_Cell_List, + criticality := reject, + value_ := { Restarted_Cell_List := restart_cl } + }, { + id := SBC_AP_Constants.id_Global_ENB_ID, + criticality := reject, + value_ := { Global_ENB_ID := global_enb_id } + } + /* List of TAIs (mandatory) */ + /* List of EAIs (optional) */ + }, + protocolExtensions := omit + } + } + } +} + +template (value) SBC_AP_PDU +ts_SBCAP_PWS_FAILURE( + template (value) Failed_Cell_List fail_cl, + template (value) Global_ENB_ID global_enb_id) := { + initiatingMessage := { + procedureCode := id_PWS_Failure_Indication, + criticality := reject, + value_ := { + PWS_Failure_Indication := { + protocolIEs := { + { + id := SBC_AP_Constants.id_Failed_Cell_List, + criticality := reject, + value_ := { Failed_Cell_List := fail_cl } + }, { + id := SBC_AP_Constants.id_Global_ENB_ID, + criticality := reject, + value_ := { Global_ENB_ID := global_enb_id } + } + }, + protocolExtensions := omit + } + } + } +} + +/* 4.3.4.2.1 WRITE-REPLACE WARNING REQUEST */ +template (value) SBC_AP_PDU +ts_SBCAP_WRITE_WARNING(template (value) BIT16 p_msg_id, template (value) BIT16 p_ser_nr, + template (value) uint12_t p_rep_per, template (value) uint16_t p_num_bcast, + template (value) OCT2 p_w_type, OCT1 p_dcs, + template (value) octetstring p_msg_content) := { + initiatingMessage := { + procedureCode := id_Write_Replace_Warning, + criticality := reject, + value_ := { + write_Replace_Warning_Request := { + protocolIEs := { + { + id := SBC_AP_Constants.id_Message_Identifier, + criticality := reject, + value_ := { Message_Identifier := p_msg_id } + }, { + id := SBC_AP_Constants.id_Serial_Number, + criticality := reject, + value_ := { Serial_Number := p_ser_nr } + /* List of TAIs */ + /* Warning Area List */ + }, { + id := SBC_AP_Constants.id_Repetition_Period, + criticality := reject, + value_ := { Repetition_Period := p_rep_per } + /* Extended Repetition Period */ + }, { + id := SBC_AP_Constants.id_Number_of_Broadcasts_Requested, + criticality := reject, + value_ := { Number_of_Broadcasts_Requested := p_num_bcast } + }, { + id := SBC_AP_Constants.id_Warning_Type, + criticality := ignore, + value_ := { Warning_Type := p_w_type } + }, { + /* Warning Security Info */ + /* Data Coding Scheme */ + id := SBC_AP_Constants.id_Data_Coding_Scheme, + criticality := ignore, + value_ := { Data_Coding_Scheme := oct2bit(p_dcs) } + }, { + /* Warning Message Content */ + id := SBC_AP_Constants.id_Warning_Message_Content, + criticality := ignore, + value_ := { Warning_Message_Content := p_msg_content } + } + /* OMC ID */ + /* Concurrent Warning Message Indicator */ + /* Send Write Replace Warning Indication */ + /* Global eNB ID */ + /* Warning Area Coordinates */ + }, + protocolExtensions := omit + } + } + } +} + +template (present) SBC_AP_PDU +tr_SBCAP_WRITE_WARNING(template (present) BIT16 p_msg_id, template (present) BIT16 p_ser_nr, + template (present) uint12_t p_rep_per, + template (present) uint16_t p_num_bcast, + template (present) BIT8 dcs := ?, + template (present) octetstring p_msg_content := ? + ) := { + initiatingMessage := { + procedureCode := id_Write_Replace_Warning, + criticality := reject, + value_ := { + write_Replace_Warning_Request := { + protocolIEs := { + { + id := SBC_AP_Constants.id_Message_Identifier, + criticality := reject, + value_ := { Message_Identifier := p_msg_id } + }, { + id := SBC_AP_Constants.id_Serial_Number, + criticality := reject, + value_ := { Serial_Number := p_ser_nr } + /* List of TAIs */ + /* Warning Area List */ + }, { + id := SBC_AP_Constants.id_Repetition_Period, + criticality := reject, + value_ := { Repetition_Period := p_rep_per } + /* Extended Repetition Period */ + }, { + id := SBC_AP_Constants.id_Number_of_Broadcasts_Requested, + criticality := reject, + value_ := { Number_of_Broadcasts_Requested := p_num_bcast } + }/*, { + id := SBC_AP_Constants.id_Warning_Type, + criticality := ignore, + value_ := { Warning_Type := warn_type } + }, { + id := SBC_AP_Constants.id_Warning_Security_Information, + criticality := reject, + value_ := { Warning_Security_Information := ? } + }*/, { + id := SBC_AP_Constants.id_Data_Coding_Scheme, + criticality := ignore, + value_ := { Data_Coding_Scheme := dcs } + }, { + /* Warning Message Content */ + id := SBC_AP_Constants.id_Warning_Message_Content, + criticality := ignore, + value_ := { Warning_Message_Content := p_msg_content } + } + /* Warning Message Content */ + /* OMC ID */ + /* Concurrent Warning Message Indicator */ + /* Send Write Replace Warning Indication */ + /* Global eNB ID */ + /* Warning Area Coordinates */ + }, + protocolExtensions := omit + } + } + } +} + +/* 4.3.4.2.3 STOP WARNING REQUEST */ +template (value) SBC_AP_PDU +ts_SBCAP_WRITE_WARNING_RESP(template (value) BIT16 p_msg_id, template (value) BIT16 p_ser_nr, + template (value) SBC_AP_Cause cause := SBC_AP_Cause_message_accepted) := { + successfulOutcome := { + procedureCode := id_Write_Replace_Warning, + criticality := reject, + value_ := { + write_Replace_Warning_Response := { + protocolIEs := { + { + id := SBC_AP_Constants.id_Message_Identifier, + criticality := reject, + value_ := { Message_Identifier := p_msg_id } + }, { + id := SBC_AP_Constants.id_Serial_Number, + criticality := reject, + value_ := { Serial_Number := p_ser_nr } + }, { + id := SBC_AP_Constants.id_Cause, + criticality := reject, + value_ := { Cause := enum2int(valueof(cause)) } + } + }, + protocolExtensions := omit + } + } + } +} + +template (present) SBC_AP_PDU +tr_SBCAP_STOP_WARNING(template (present) BIT16 p_msg_id, template (present) BIT16 p_ser_nr) := { + initiatingMessage := { + procedureCode := id_Stop_Warning, + criticality := reject, + value_ := { + stop_Warning_Request := { + protocolIEs := { + { + id := SBC_AP_Constants.id_Message_Identifier, + criticality := reject, + value_ := { Message_Identifier := p_msg_id } + }, { + id := SBC_AP_Constants.id_Serial_Number, + criticality := reject, + value_ := { Serial_Number := p_ser_nr } + /* List of TAIs */ + /* Warning Area List */ + } + }, + protocolExtensions := omit + } + } + } +} + +/* 4.3.4.2.4 STOP WARNING RESPONSE */ +template (value) SBC_AP_PDU +ts_SBCAP_STOP_WARNING_RESP(template (value) BIT16 p_msg_id, template (value) BIT16 p_ser_nr, + template (value) SBC_AP_Cause cause := SBC_AP_Cause_message_accepted) := { + successfulOutcome := { + procedureCode := id_Stop_Warning, + criticality := reject, + value_ := { + stop_Warning_Response := { + protocolIEs := { + { + id := SBC_AP_Constants.id_Message_Identifier, + criticality := reject, + value_ := { Message_Identifier := p_msg_id } + }, { + id := SBC_AP_Constants.id_Serial_Number, + criticality := reject, + value_ := { Serial_Number := p_ser_nr } + }, { + id := SBC_AP_Constants.id_Cause, + criticality := reject, + value_ := { Cause := enum2int(valueof(cause)) } + } + }, + protocolExtensions := omit + } + } + } +} + +} diff --git a/library/sbcap/SBC_AP_Types.ttcn b/library/sbcap/SBC_AP_Types.ttcn new file mode 100644 index 0000000..cfb043d --- /dev/null +++ b/library/sbcap/SBC_AP_Types.ttcn @@ -0,0 +1,15 @@ +module SBC_AP_Types { + + import from SBC_AP_PDU_Descriptions language "ASN.1:1997" all; + + external function enc_SBC_AP_PDU(in SBC_AP_PDU pdu) return octetstring; + external function dec_SBC_AP_PDU(in octetstring stream) return SBC_AP_PDU; + + const integer c_SBC_AP_PPID := 24; + const integer c_SBC_AP_PORT := 29168; + + /* 3GPP TS 29.168 4.3.4.3.2 Cause */ + type enumerated SBC_AP_Cause { + SBC_AP_Cause_message_accepted ('00'O) + } +} diff --git a/library/sbcap/regen_makefile.sh b/library/sbcap/regen_makefile.sh new file mode 100755 index 0000000..0cd6083 --- /dev/null +++ b/library/sbcap/regen_makefile.sh @@ -0,0 +1,9 @@ +#!/bin/sh + +FILES="*.asn *.ttcn SBC_AP_EncDec.cc" + +../../regen-makefile.sh $FILES + +sed -i -e '/^CPPFLAGS/ s/$/ `pkg-config --cflags libfftranscode`/' Makefile +sed -i -e '/^LDFLAGS/ s/$/ `pkg-config --libs libfftranscode`/' Makefile +sed -i -e '/^LINUX_LIBS/ s/$/ `pkg-config --libs libfftranscode`/' Makefile