diff --git a/Makefile b/Makefile index 2510e2801..319cb8720 100644 --- a/Makefile +++ b/Makefile @@ -13,7 +13,7 @@ # See the License for the specific language governing permissions and # limitations under the License. -SUBDIRS=bsc bsc-nat bts ccid fr fr-net gbproxy ggsn_tests hlr mgw mme msc pcu pgw remsim \ +SUBDIRS=bsc bsc-nat bts cbc ccid fr fr-net gbproxy ggsn_tests hlr mgw mme msc pcu pgw remsim \ sccp selftest sgsn simtrace sip stp sysinfo smlc NPROC=$(shell nproc 2>/dev/null) diff --git a/cbc/CBC_Tests.cfg b/cbc/CBC_Tests.cfg new file mode 100644 index 000000000..7c2a3acce --- /dev/null +++ b/cbc/CBC_Tests.cfg @@ -0,0 +1,18 @@ +[ORDERED_INCLUDE] +# Common configuration, shared between test suites +"../Common.cfg" +# testsuite specific configuration, not expected to change +"./CBC_Tests.default" + +# Local configuration below + +[LOGGING] + +[TESTPORT_PARAMETERS] + +[MODULE_PARAMETERS] + +[MAIN_CONTROLLER] + +[EXECUTE] +CBC_Tests.control diff --git a/cbc/CBC_Tests.default b/cbc/CBC_Tests.default new file mode 100644 index 000000000..48fe83de5 --- /dev/null +++ b/cbc/CBC_Tests.default @@ -0,0 +1,12 @@ +[LOGGING] +mtc.FileMask := LOG_ALL | TTCN_DEBUG | TTCN_MATCHING | DEBUG_ENCDEC; + +[TESTPORT_PARAMETERS] +*.CBCVTY.PROMPT1 := "OsmoCBC> " +*.TCP.noDelay := "yes" // turn off nagle +*.HTTP.use_notification_ASPs := "yes" + +[MODULE_PARAMETERS] +// Osmocom_VTY_Functions.mp_prompt_prefix := "OsmoCBC"; + +[EXECUTE] diff --git a/cbc/CBC_Tests.ttcn b/cbc/CBC_Tests.ttcn new file mode 100644 index 000000000..36fa55cd5 --- /dev/null +++ b/cbc/CBC_Tests.ttcn @@ -0,0 +1,467 @@ +module CBC_Tests { + +import from Osmocom_Types all; + +import from BSSAP_Types all; +import from BSSMAP_Templates all; +import from CBSP_Types all; +import from CBSP_Templates all; +import from CBSP_Adapter all; +import from CBSP_CodecPort all; +import from Socket_API_Definitions all; + +import from HTTP_Adapter all; +import from HTTPmsg_Types all; +import from ECBE_Types all; + +modulepar { + charstring mp_cbc_host := "127.0.0.1"; + integer mp_cbc_port := 48049; + integer mp_ecbe_port := 12345; +}; + +type component test_CT extends CBSP_Adapter_CT, http_CT { +}; + +/********************************************************************************* + * ECBE (REST) interface + *********************************************************************************/ + +function f_ecbe_tx_post_cbs(EcbeCbcMessage cbc) +runs on http_CT { + var charstring body := oct2char(enc_EcbeCbcMessage(cbc)); + log("TX POST CBS: ", body); + var HTTPMessage http_resp; + f_http_tx_request(url := "/api/ecbe/v1/message", method := "POST", body := body); +} + +function f_ecbe_rx_resp(template integer exp_sts := (200..299)) +runs on http_CT return HTTPResponse { + var HTTPMessage http_resp := f_http_rx_response(tr_HTTP_Resp(exp_sts), tout := 20.0); + return http_resp.response; +} + +/* run a HTTP POST to add a new CBC message */ +function f_ecbe_post_cbs(EcbeCbcMessage cbc, template integer exp_sts := 201) +runs on http_CT return HTTPResponse { + f_ecbe_tx_post_cbs(cbc); + return f_ecbe_rx_resp(exp_sts) +} + +function f_ecbe_tx_delete_cbs(integer msg_id) +runs on http_CT { + f_http_tx_request("/api/ecbe/v1/message/" & int2str(msg_id), method := "DELETE"); +} + +/* run a HTTP GET on specified URL expecting json in RSRES format as response */ +function f_ecbe_delete_cbs(integer msg_id, template integer exp_sts := 200) +runs on http_CT return HTTPResponse { + f_ecbe_tx_delete_cbs(msg_id); + return f_ecbe_rx_resp(exp_sts); +} + + +altstep as_cbsp_reset(integer idx) runs on CBSP_Adapter_CT { + var CBSP_RecvFrom rf; + [] CBSP[idx].receive(tr_CBSP_Recv(g_cbsp_conn_id[idx], tr_CBSP_RESET)) -> value rf { + var CBSP_IE ie; + f_cbsp_find_ie(rf.msg, CBSP_IEI_CELL_LIST, ie); + CBSP[idx].send(ts_CBSP_Send(g_cbsp_conn_id[idx], + ts_CBSP_RESET_COMPL(ie.body.cell_list.cell_id))); + } +} + +private function f_cbs2ecbe_category(CBSP_Category cat_in) return EcbeCategory +{ + select (cat_in) { + case (CBSP_CATEG_HIGH_PRIO) { return high_priority; } + case (CBSP_CATEG_BACKGROUND) { return background; } + case (CBSP_CATEG_NORMAL) { return normal; } + case else { mtc.stop } + } +} + +private function f_cbs2ecbe_page(CBS_MessageContent inp) return EcbePage +{ + return hex2str(oct2hex(inp.payload)); +} + +/* convert from CBS_Message to EcbeCbcMessage */ +function f_cbs2ecbe(CBS_Message inp, charstring cbe_name) return EcbeCbcMessage +{ + var EcbeCbcMessage ret := { + cbe_name := cbe_name, + category := f_cbs2ecbe_category(inp.category), + repetition_period := inp.rep_period, + num_of_bcast := inp.num_bcast_req, + scope := { scope_plmn := {} }, + smscb_message := { + serial_nr := { + serial_nr_encoded := inp.ser_nr + }, + message_id := inp.msg_id, + payload := { + payload_encoded := { + dcs := inp.dcs, + pages := { } /* appended below */ + } + } + } + }; + for (var integer i := 0; i < lengthof(inp.content); i := i+1) { + ret.smscb_message.payload.payload_encoded.pages := + ret.smscb_message.payload.payload_encoded.pages & { f_cbs2ecbe_page(inp.content[i]) }; + } + return ret; +} + +/********************************************************************************* + * CBSP interface + *********************************************************************************/ + +/* receive + acknowledge KEEP-ALIVE */ +altstep as_cbsp_keepalive_ack(integer idx) runs on CBSP_Adapter_CT { + [] CBSP[idx].receive(tr_CBSP_Recv(g_cbsp_conn_id[idx], tr_CBSP_KEEP_ALIVE)) { + CBSP[idx].send(ts_CBSP_Send(g_cbsp_conn_id[idx], ts_CBSP_KEEP_ALIVE_COMPL)); + } +} + +/* receive + ignore RESTART */ +altstep as_cbsp_restart(integer idx) runs on CBSP_Adapter_CT { + [] CBSP[idx].receive(tr_CBSP_Recv(g_cbsp_conn_id[idx], tr_CBSP_RESTART)); +} + +private function f_init(boolean raw := false) runs on test_CT { + f_http_init(mp_cbc_host, mp_ecbe_port); + CBSP_Adapter.f_connect(mp_cbc_host, mp_cbc_port, "", -1); + + if (not raw) { + var BSSMAP_FIELD_CellIdentificationList cell_list := { + cIl_allInBSS := ''O + }; + activate(as_cbsp_keepalive_ack(0)); + activate(as_cbsp_restart(0)); + f_cbsp_send(ts_CBSP_RESTART(cell_list, CBSP_BC_MSGT_CBS, CBSP_RI_DATA_LOST)); + f_cbsp_send(ts_CBSP_RESTART(cell_list, CBSP_BC_MSGT_EMERG, CBSP_RI_DATA_LOST)); + as_cbsp_reset(0); + } +} + +/* test whether or not we receive a valid KEEP-ALIVE from the CBC */ +testcase TC_rx_keepalive() runs on test_CT { + var CBSP_PDU rx; + var CBSP_IE ie; + + f_init(); + rx := f_cbsp_exp(tr_CBSP_KEEP_ALIVE(?)); + f_cbsp_find_ie(rx, CBSP_IEI_KEEP_ALIVE_REP_PERIOD, ie); + + setverdict(pass); +} + +/* test whether CBC terminates connection if KEEP-ALIVE is not answered by BSC */ +testcase TC_rx_keepalive_timeout() runs on test_CT { + var CBSP_PDU rx; + var CBSP_IE ie; + var integer ka_rep_per_s; + + f_init(); + rx := f_cbsp_exp(tr_CBSP_KEEP_ALIVE(?)); + f_cbsp_find_ie(rx, CBSP_IEI_KEEP_ALIVE_REP_PERIOD, ie); + + /* sleep for longer than the keep-alive period */ + ka_rep_per_s := f_cbsp_period2s(ie.body.keep_alive_rep_period); + f_sleep(int2float(ka_rep_per_s + 5)); + + /* expect the CBSP connection to be closed */ + CBSP[0].receive(PortEvent:{connClosed:=?}) + + setverdict(pass); +} + +type record CBS_Message { + uint16_t msg_id, + uint16_t ser_nr, + uint16_t old_ser_nr optional, + BSSMAP_FIELD_CellIdentificationList cell_list, + uint8_t channel_ind, + CBSP_Category category, + uint16_t rep_period, + uint16_t num_bcast_req, + uint8_t dcs, + CBS_MessageContents content +}; +type record CBS_MessageContent { + octetstring payload, + uint8_t user_len +}; +type record of CBS_MessageContent CBS_MessageContents; + +/* handle a CBSP-WRITE-REPLACE and respond to it with COMPLETE or FAILURE depending on arguments */ +private function f_cbsp_write(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 CBSP_IEs content_ies := {}; + var template (present) CBSP_PDU rx_templ; + var CBSP_RecvFrom rf; + for (var integer i := 0; i < lengthof(msg.content); i := i+1) { + //content_ies[i] := tr_CbspMsgContent(msg.content[i].payload, msg.content[i].user_len); + content_ies[i] := tr_CbspMsgContent(?, ?); + } + rx_templ := tr_CBSP_WRITE_CBS(msg.msg_id, msg.ser_nr, msg.cell_list, msg.channel_ind, + msg.category, msg.rep_period, msg.num_bcast_req, msg.dcs, + content_ies); + alt { + [] CBSP[idx].receive(tr_CBSP_Recv(g_cbsp_conn_id[idx], rx_templ)) -> value rf { + var template (value) CBSP_PDU tx; + if (istemplatekind(tx_fail_list, "omit")) { + 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_CBSP_WRITE_CBS_COMPL(msg.msg_id, msg.ser_nr, tx_list, msg.channel_ind); + } 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); + } + } else { + tx := ts_CBSP_WRITE_CBS_FAIL(msg.msg_id, msg.ser_nr, valueof(tx_fail_list), + omit, tx_cell_list, msg.channel_ind); + } + CBSP[idx].send(ts_CBSP_Send(g_cbsp_conn_id[idx], tx)); + } + [] as_cbsp_keepalive_ack(idx) { repeat; } + [] CBSP[idx].receive { + setverdict(fail, "Received unexpected CBSP in index ", idx); + } + } +} + +/* handle a CBSP-KILL and respond to it with COMPLETE or FAILURE depending on arguments */ +private function f_cbsp_handle_kill(integer idx, uint16_t msg_id, uint16_t ser_nr, + template BSSMAP_FIELD_CellIdentificationList exp_list, + template (omit) BSSMAP_FIELD_CellIdentificationList tx_list, + template (omit) CBSP_FailureListItems tx_fail_list := omit, + template (omit) CBSP_IE_NumBcastComplList tx_compl_list := omit, + template (omit) uint8_t channel_ind := omit) +runs on test_CT { + var template (present) CBSP_PDU rx_templ; + var CBSP_RecvFrom rf; + + rx_templ := tr_CBSP_KILL(msg_id, ser_nr, exp_list, channel_ind); + alt { + [] CBSP[idx].receive(tr_CBSP_Recv(g_cbsp_conn_id[idx], rx_templ)) -> value rf { + var template (value) CBSP_PDU tx; + if (istemplatekind(tx_fail_list, "omit")) { + tx := ts_CBSP_KILL_COMPL(msg_id, ser_nr, tx_compl_list, tx_list, channel_ind); + } else { + tx := ts_CBSP_KILL_FAIL(msg_id, ser_nr, valueof(tx_fail_list), tx_compl_list, + tx_list, channel_ind); + } + CBSP[idx].send(ts_CBSP_Send(g_cbsp_conn_id[idx], tx)); + } + [] as_cbsp_keepalive_ack(idx) { repeat; } + [] CBSP[idx].receive { + setverdict(fail, "Received unexpected CBSP in index ", idx); + } + } +} + +private const BSSMAP_FIELD_CellIdentificationList cil_BSS := { + cIl_allInBSS := ''O +}; + +testcase TC_write_replace() runs on test_CT { + f_init(); + var CBS_Message msg := { + msg_id := 42, + ser_nr := 16752, + old_ser_nr := omit, + cell_list := cil_BSS, + channel_ind := 0, + category := CBSP_CATEG_NORMAL, + rep_period := 5, + num_bcast_req := 3, + dcs := 1, + content := { + { '00'O, 1 } + } + }; + f_cbsp_write(msg); + f_sleep(100.0); +} + +testcase TC_selftest() runs on test_CT { + const octetstring c_load_q := '0700000d0400080000f110012345671200'O; + const octetstring c_load_q_compl := '0800000f0a000a0000f1100123456700001200'O; + const octetstring c_reset := '1000000b0400080000f11001234567'O; + const octetstring c_reset_compl := '1100000b0400080000f11001234567'O; + const octetstring c_msg_sts_q := '0a0000130e022b0200000400080000f110012345671200'O; + const octetstring c_msg_sts_q_fail := '0c0000140e022b0200000900090000f11001234567021200'O; + const octetstring c_kill := '040000110e00000200000400080000f11001234567'O; + const octetstring c_kill_fail := '060000120e00000200000900090000f1100123456702'O; + const octetstring c_write_repl := '010000c70e022b0300300400080000f110012345671200050006000407000613020c400107f4f29c9e769f5de337b90c921d1b8d46a3d168341a8d46a3d168341a8d46a3d168341a8d46a3d168341a8d46a3d168341a8d46a3d168341a8d46a3d168341a8d46a3d168341a8d46a3d168341a8d46a3d100'O; + const octetstring c_write_repl_compl := '020000130e022b0300300400080000f110012345671200'O; + const octetstring c_write_repl_fail := '030000140e022b0300300900090000f110012345670d1200'O; + const octetstring c_msg_s_q := '0a0000130e022b0200900400080000f110012345671200'O; + const octetstring c_msg_s_q_compl := '0b0000160e022b02009008000b0000f110012345670008001200'O; + const octetstring c_kill_compl := '050000160e022b02008008000b0000f110012345670006001200'O; + + log(dec_CBSP_PDU(c_load_q)); + log(dec_CBSP_PDU(c_load_q_compl)); + log(dec_CBSP_PDU(c_reset)); + log(dec_CBSP_PDU(c_reset_compl)); + log(dec_CBSP_PDU(c_msg_sts_q)); + log(dec_CBSP_PDU(c_msg_sts_q_fail)); + log(dec_CBSP_PDU(c_kill)); + log(dec_CBSP_PDU(c_kill_fail)); + log(dec_CBSP_PDU(c_write_repl)); + log(dec_CBSP_PDU(c_write_repl_compl)); + log(dec_CBSP_PDU(c_write_repl_fail)); + log(dec_CBSP_PDU(c_msg_s_q)); + log(dec_CBSP_PDU(c_msg_s_q_compl)); + log(dec_CBSP_PDU(c_kill_compl)); +} + +import from SABP_Types all; +import from SABP_Templates all; +import from SABP_IEs all; +import from SABP_PDU_Descriptions all; + +testcase TC_selftest_sabp() runs on test_CT { + const octetstring c_write := '00000080930000080006000211120007000240c0000f0010000113f0030282ec0613f0030282ec070001400100000d0002012a000900020000000400010100000056029f01b4d90d064297d9ec37e8fe96b3c9a0303bdd68341a8d46a3d168341a8d46a3d168341a8d46a3d168341a8d46a3d168341a8d46a3d168341a8d46a3d168341a8d46a3d168341a8d46a3d168341a8d46a3d10012'O; + + log(dec_SABP_PDU(c_write)); + log(enc_SABP_PDU(dec_SABP_PDU(c_write))); + + var template (value) Service_Areas_List sa_list := { + ts_SabpSai('62F224'O, '0023'O, '0042'O) + }; + var template (value) SABP_PDU tx; + + tx := ts_SABP_Write(int2bit(1, 16), int2bit(1, 16), sa_list, 23, 42, '00000000'B, '01011010'B); + log("Write: ", enc_SABP_PDU(valueof(tx))) + + var Service_Areas_List sa_list2 := { valueof(ts_SabpSai('62F224'O, '1000'O, '0042'O)) }; + for (var integer i := 0; i < 2500; i := i+1) { + sa_list2 := sa_list2 & {valueof(ts_SabpSai('62F224'O, '2000'O, int2oct(i,2))) }; + } + tx := ts_SABP_Write(int2bit(2, 16), int2bit(2, 16), sa_list2, 23, 42, '00000000'B, '01011010'B); + log("Write: ", enc_SABP_PDU(valueof(tx))) + + tx := ts_SABP_Restart(sa_list); + log("Restart: ", enc_SABP_PDU(valueof(tx))); +} + +/********************************************************************************* + * ECBE interface (verifying expected procedures on CBSP) + *********************************************************************************/ + +function f_create_and_delete(CBS_Message msg, + template (omit) BSSMAP_FIELD_CellIdentificationList cell_list_success) +runs on test_CT { + var EcbeCbcMessage ecbe := f_cbs2ecbe(msg, "TTCN-3"); + f_ecbe_tx_post_cbs(ecbe); + f_cbsp_write(msg, 0, cell_list_success); + f_ecbe_rx_resp(201); + + f_sleep(2.0); + + f_ecbe_tx_delete_cbs(msg.msg_id); + /* 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, cell_list_success, cell_list_success); + f_ecbe_rx_resp(200); +} + +private template (value) CBS_Message t_CBSmsg(uint16_t msg_id, uint16_t ser_nr) := { + msg_id := msg_id, + ser_nr := ser_nr, + old_ser_nr := omit, + cell_list := cil_BSS, + channel_ind := 0, + category := CBSP_CATEG_NORMAL, + rep_period := 5, + num_bcast_req := 3, + dcs := 1, + content := { + { '00'O, 1 } + } +}; + +/* specify a variety of different Cell Identifier formats to extend test coverage */ +testcase TC_ecbe_create_delete_cgi() runs on test_CT { + f_init(); + var template (value) BSSMAP_FIELD_CellIdentificationList cell_list_success; + var template (value) CBS_Message msg := t_CBSmsg(43, 16752); + + cell_list_success := ts_BSSMAP_CIL_CGI({ + ts_BSSMAP_CI_CGI('901'H, '70'H, 23, 42), + ts_BSSMAP_CI_CGI('901'H, '70'H, 24, 42), + ts_BSSMAP_CI_CGI('901'H, '70'H, 24, 43) + }); + f_create_and_delete(valueof(msg), cell_list_success); +} +testcase TC_ecbe_create_delete_lac_ci() runs on test_CT { + f_init(); + var template (value) BSSMAP_FIELD_CellIdentificationList cell_list_success; + var template (value) CBS_Message msg := t_CBSmsg(44, 16752); + cell_list_success := ts_BSSMAP_CIL_LAC_CI({ + ts_BSSMAP_CI_LAC_CI(10001, 50001), + ts_BSSMAP_CI_LAC_CI(10002, 50002), + ts_BSSMAP_CI_LAC_CI(10003, 50003) + }); + f_create_and_delete(valueof(msg), cell_list_success); +} +testcase TC_ecbe_create_delete_lac() runs on test_CT { + f_init(); + var template (value) BSSMAP_FIELD_CellIdentificationList cell_list_success; + var template (value) CBS_Message msg := t_CBSmsg(45, 16752); + cell_list_success := ts_BSSMAP_CIL_LAC({ + ts_BSSMAP_CI_LAC(10001), + ts_BSSMAP_CI_LAC(10002), + ts_BSSMAP_CI_LAC(10003) + }); + f_create_and_delete(valueof(msg), cell_list_success); +} +testcase TC_ecbe_create_delete_ci() runs on test_CT { + f_init(); + var template (value) BSSMAP_FIELD_CellIdentificationList cell_list_success; + var template (value) CBS_Message msg := t_CBSmsg(46, 16752); + cell_list_success := ts_BSSMAP_CIL_CI({ + ts_BSSMAP_CI_CI(50001), + ts_BSSMAP_CI_CI(50002), + ts_BSSMAP_CI_CI(50003) + }); + f_create_and_delete(valueof(msg), cell_list_success); +} +testcase TC_ecbe_create_delete_lai() runs on test_CT { + f_init(); + var template (value) BSSMAP_FIELD_CellIdentificationList cell_list_success; + var template (value) CBS_Message msg := t_CBSmsg(47, 16752); + cell_list_success := ts_BSSMAP_CIL_LAI({ + ts_BSSMAP_CI_LAI('901'H, '70'H, 25), + ts_BSSMAP_CI_LAI('901'H, '70'H, 26), + ts_BSSMAP_CI_LAI('901'H, '70'H, 27) + }); + f_create_and_delete(valueof(msg), cell_list_success); +} + +control { + execute( TC_rx_keepalive() ); + execute( TC_rx_keepalive_timeout() ); + execute( TC_ecbe_create_delete_cgi() ); + execute( TC_ecbe_create_delete_lac_ci() ); + execute( TC_ecbe_create_delete_lac() ); + execute( TC_ecbe_create_delete_ci() ); + execute( TC_ecbe_create_delete_lai() ); +} + +} diff --git a/cbc/ECBE_Types.ttcn b/cbc/ECBE_Types.ttcn new file mode 100644 index 000000000..7c66fb96e --- /dev/null +++ b/cbc/ECBE_Types.ttcn @@ -0,0 +1,147 @@ +module ECBE_Types { + +/* Type definitions for the ECBE (External Cell Broadcast Entity) protocol of OsmoCBC */ +/* (C) 2021 by Harald Welte + * All rights reserved. + */ + +/*********************************************************************** + * smscb.schema.json + ***********************************************************************/ + +type charstring EcbeLanguageCode length(2); + +type integer EcbeMessageId (0..65535); + +type enumerated EcbeGeographicScope { + cell_wide_immediate, + plmn_wide, + lac_sac_tac_wide, + cell_wide +}; + +type integer EcbeMessageCode (0..1023); + +type integer EcbeUpdateNumber (0..15); + +type integer EcbeSerialNrEncoded (0..65535); + +type record EcbeSerialNrDecoded { + EcbeGeographicScope geo_scope, + EcbeMessageCode msg_code, + EcbeUpdateNumber update_nr +}; + +type union EcbeSerialNr { + EcbeSerialNrEncoded serial_nr_encoded, + EcbeSerialNrDecoded serial_nr_decoded +}; + +type integer EcbeDcsEncoded (0..255); + +type enumerated EcbeCharacterSet { + gsm, + eight_bit, + ucs2 +}; + +type integer EcbeDcsClass (0..3); + +type record EcbePayloadDecoded { + EcbeCharacterSet character_set optional, + EcbeLanguageCode Language optional, + EcbeDcsClass dcs_class optional, + charstring data_utf8 +}; + +type charstring EcbePage; +type record of EcbePage EcbePages; + +type record EcbePayloadEncoded { + EcbeDcsEncoded dcs, + EcbePages pages +}; + +type integer EcbeWarningTypeEncoded (0..127); + +type enumerated EcbeWarningTypeDecoded { + earthquake, + tsunami, + earthquake_and_tsunami, + test, + other, + rfu +}; + +type union EcbeWarningType { + EcbeWarningTypeEncoded warning_type_encoded, + EcbeWarningTypeDecoded warning_type_decoded +}; + +type record EcbePayloadEtws { + EcbeWarningType warning_type, + boolean emergency_user_alert optional, + boolean popup_on_display optional, + charstring warning_sec_info optional +}; + +type union EcbePayload { + EcbePayloadEncoded payload_encoded, + EcbePayloadDecoded payload_decoded, + EcbePayloadEtws payload_etws +}; + +type record EcbeSmscbMessage { + EcbeSerialNr serial_nr, + EcbeMessageId message_id, + EcbePayload payload +}; + +external function enc_EcbeSmscbMessage(in EcbeSmscbMessage inp) return octetstring + with { extension "prototype(convert) encode(JSON)" } +external function dec_EcbeSmscbMessage(in octetstring inp) return EcbeSmscbMessage + with { extension "prototype(convert) decode(JSON)" } + +/*********************************************************************** + * cbc.schema.json + ***********************************************************************/ + +type enumerated EcbeCategory { + normal, + high_priority, + background +}; + +type integer EcbeRepetitionPeriod (1..4095); + +type enumerated EcbeChannelIndicator { + basic, + extended +}; + +type integer EcbeWarningPeriodSec (0..3600); + +type integer EcbeNumberOfBroadcasts (0..65535); + +type record EcbeScopePlmn { +}; + +type union EcbeScope { + EcbeScopePlmn scope_plmn +}; + +type record EcbeCbcMessage { + charstring cbe_name optional, + EcbeCategory category optional, + EcbeRepetitionPeriod repetition_period optional, + EcbeNumberOfBroadcasts num_of_bcast optional, + EcbeScope scope, + EcbeSmscbMessage smscb_message +}; + +external function enc_EcbeCbcMessage(in EcbeCbcMessage inp) return octetstring + with { extension "prototype(convert) encode(JSON)" } +external function dec_EcbeCbcMessage(in octetstring inp) return EcbeCbcMessage + with { extension "prototype(convert) decode(JSON)" } + +} with { encode "JSON" } diff --git a/cbc/SABP_Selftest.ttcn b/cbc/SABP_Selftest.ttcn new file mode 100644 index 000000000..1f6ecb51f --- /dev/null +++ b/cbc/SABP_Selftest.ttcn @@ -0,0 +1,180 @@ +module SABP_Selftest { + +/* This is testing the SABP code, specifically re-creating the SABP messages from within + * the TCP stream using SABP_Adapter.f_APER_getMsgLen() for the various possible APER + * length determinant cases */ + +import from Osmocom_Types all; + +import from SABP_Adapter all; +import from SABP_Templates all; +import from IPL4asp_Types all; +import from IPL4asp_PortType all; + +modulepar { + charstring mp_bind_ip := "127.0.0.1"; + integer mp_bind_port := 12345; +} + +type component test_CT extends SABP_Adapter_CT { + port IPL4asp_PT TCP; + var integer g_tcp_conn_id; + timer Tguard := 10.0; +} + +template (value) ASP_Send ts_AS(integer conn_id, octetstring msg) := { + connId := conn_id, + proto := omit, + msg := msg +} + +private altstep as_Tguard() runs on test_CT { + [] Tguard.timeout { + setverdict(fail, "Tguard timeout"); + mtc.stop; + } +} + +private function f_init() runs on test_CT { + var IPL4asp_Types.Result res; + var ASP_Event asp_evt; + + activate(as_Tguard()); + Tguard.start; + + f_bind(mp_bind_ip, mp_bind_port, 0); + + map(self:TCP, system:TCP); + res := f_IPL4_connect(TCP, mp_bind_ip, mp_bind_port, "", -1, 0, { tcp:={} }); + if (not ispresent(res.connId)) { + setverdict(fail, "Could not connect to SABP TCP port"); + mtc.stop; + } + g_tcp_conn_id := res.connId; + + SABP[0].receive(ASP_Event:{connOpened:=?}) -> value asp_evt { + g_sabp_conn_id[0] := asp_evt.connOpened.connId; + } +} + +/* send a given input octetstring 'stream' in chunks of 'chunk_size', spaced at 'delay' intervals */ +private function tcp_send_segmented(octetstring stream, integer chunk_size := 1, float delay := 0.05) +runs on test_CT { + var integer i; + + for (i := 0; i < lengthof(stream); i := i+chunk_size) { + var integer size := chunk_size; + if (lengthof(stream) - i < chunk_size) { + size := lengthof(stream) - i; + } + TCP.send(ts_AS(g_tcp_conn_id, substr(stream, i, size))); + f_sleep(delay); + } +} + +/* a simple SABP-RESTART message with single-byte length dteerminant (shorter than 128 byte) */ +const octetstring c_restart := '00044010000001000F0009000062F22400230042'O; + +/* test whether a message with 1-byte length determinant is parsed */ +testcase TC_1byte_len() runs on test_CT { + f_init(); + TCP.send(ts_AS(g_tcp_conn_id, c_restart)); + f_sabp_exp(tr_SABP_Restart(?)); + setverdict(pass); +} + +/* test whether a message with 1-byte length determinant is parsed if each byte is received separately */ +testcase TC_1byte_len_bytewise() runs on test_CT { + f_init(); + tcp_send_segmented(c_restart, 1, 0.05); + f_sabp_exp(tr_SABP_Restart(?)); + setverdict(pass); +} + +/* send three concatenated RESTART in one segment */ +testcase TC_1byte_len_chained() runs on test_CT { + var octetstring chain := c_restart & c_restart & c_restart; + f_init(); + TCP.send(ts_AS(g_tcp_conn_id, chain)); + f_sabp_exp(tr_SABP_Restart(?)); + f_sabp_exp(tr_SABP_Restart(?)); + f_sabp_exp(tr_SABP_Restart(?)); + setverdict(pass); +} + + +/* SABP write-replace with length determinant encoded over two bytes ('8093'O) */ +const octetstring c_wrepl := '00000080930000080006000211120007000240C0000F0010000113F0030282EC0613F0030282EC070001400100000D0002012A000900020000000400010100000056029F01B4D90D064297D9EC37E8FE96B3C9A0303BDD68341A8D46A3D168341A8D46A3D168341A8D46A3D168341A8D46A3D168341A8D46A3D168341A8D46A3D168341A8D46A3D168341A8D46A3D168341A8D46A3D10012'O; + +/* test whether a message with 2-byte length determinant is parsed */ +testcase TC_2byte_len() runs on test_CT { + f_init(); + TCP.send(ts_AS(g_tcp_conn_id, c_wrepl)); + f_sabp_exp(tr_SABP_Write(?, ?)); + f_sabp_send(ts_SABP_Reset({ { pLMNidentity := '09F107'O, lac := '0000'O, sac := '0000'O } })); + setverdict(pass); +} + +/* test whether a message with 2-byte length determinant is parsed if each byte is received separately */ +testcase TC_2byte_len_bytewise() runs on test_CT { + f_init(); + tcp_send_segmented(c_wrepl, 1, 0.05); + f_sabp_exp(tr_SABP_Write(?, ?)); + setverdict(pass); +} + +/* send three concatenated WRITE-REPLACE in one segment */ +testcase TC_2byte_len_chained() runs on test_CT { + var octetstring chain := c_wrepl & c_wrepl & c_wrepl; + f_init(); + TCP.send(ts_AS(g_tcp_conn_id, chain)); + f_sabp_exp(tr_SABP_Write(?, ?)); + f_sabp_exp(tr_SABP_Write(?, ?)); + f_sabp_exp(tr_SABP_Write(?, ?)); + setverdict(pass); +} + +/* send three concatenated WRITE-REPLACE in segments of 10 bytes */ +testcase TC_2byte_len_chained_bytewise() runs on test_CT { + var octetstring chain := c_wrepl & c_wrepl & c_wrepl; + f_init(); + tcp_send_segmented(chain, 10, 0.05); + f_sabp_exp(tr_SABP_Write(?, ?)); + f_sabp_exp(tr_SABP_Write(?, ?)); + f_sabp_exp(tr_SABP_Write(?, ?)); + setverdict(pass); +} + +/* SABP write-replace with length determinant encoded over multiple chunks ('Cx'O case) */ +const octetstring c_chunked := '000000C1000007000600020002000700020002000F00C109C462F2241000004262F2242000000062F2242000000162F2242000000262F2242000000362F2242000000462F2242000000562F2242000000662F2242000000762F2242000000862F2242000000962F2242000000A62F2242000000B62F2242000000C62F2242000000D62F2242000000E62F2242000000F62F2242000001062F2242000001162F2242000001262F2242000001362F2242000001462F2242000001562F2242000001662F2242000001762F2242000001862F2242000001962F2242000001A62F2242000001B62F2242000001C62F2242000001D62F2242000001E62F2242000001F62F2242000002062F2242000002162F2242000002262F2242000002362F2242000002462F2242000002562F2242000002662F2242000002762F2242000002862F2242000002962F2242000002A62F2242000002B62F2242000002C62F2242000002D62F2242000002E62F2242000002F62F2242000003062F2242000003162F2242000003262F2242000003362F2242000003462F2242000003562F2242000003662F2242000003762F2242000003862F2242000003962F2242000003A62F2242000003B62F2242000003C62F2242000003D62F2242000003E62F2242000003F62F2242000004062F2242000004162F2242000004262F2242000004362F2242000004462F2242000004562F2242000004662F2242000004762F2242000004862F2242000004962F2242000004A62F2242000004B62F2242000004C62F2242000004D62F2242000004E62F2242000004F62F2242000005062F2242000005162F2242000005262F2242000005362F2242000005462F2242000005562F2242000005662F2242000005762F2242000005862F2242000005962F2242000005A62F2242000005B62F2242000005C62F2242000005D62F2242000005E62F2242000005F62F2242000006062F2242000006162F2242000006262F2242000006362F2242000006462F2242000006562F2242000006662F2242000006762F2242000006862F2242000006962F2242000006A62F2242000006B62F2242000006C62F2242000006D62F2242000006E62F2242000006F62F2242000007062F2242000007162F2242000007262F2242000007362F2242000007462F2242000007562F2242000007662F2242000007762F2242000007862F2242000007962F2242000007A62F2242000007B62F2242000007C62F2242000007D62F2242000007E62F2242000007F62F2242000008062F2242000008162F2242000008262F2242000008362F2242000008462F2242000008562F2242000008662F2242000008762F2242000008862F2242000008962F2242000008A62F2242000008B62F2242000008C62F2242000008D62F2242000008E62F2242000008F62F2242000009062F2242000009162F2242000009262F2242000009362F2242000009462F2242000009562F2242000009662F2242000009762F2242000009862F2242000009962F2242000009A62F2242000009B62F2242000009C62F2242000009D62F2242000009E62F2242000009F62F224200000A062F224200000A162F224200000A262F224200000A362F224200000A462F224200000A562F224200000A662F224200000A762F224200000A862F224200000A962F224200000AA62F224200000AB62F224200000AC62F224200000AD62F224200000AE62F224200000AF62F224200000B062F224200000B162F224200000B262F224200000B362F224200000B462F224200000B562F224200000B662F224200000B762F224200000B862F224200000B962F224200000BA62F224200000BB62F224200000BC62F224200000BD62F224200000BE62F224200000BF62F224200000C062F224200000C162F224200000C262F224200000C362F224200000C462F224200000C562F224200000C662F224200000C762F224200000C862F224200000C962F224200000CA62F224200000CB62F224200000CC62F224200000CD62F224200000CE62F224200000CF62F224200000D062F224200000D162F224200000D262F224200000D362F224200000D462F224200000D562F224200000D662F224200000D762F224200000D862F224200000D962F224200000DA62F224200000DB62F224200000DC62F224200000DD62F224200000DE62F224200000DF62F224200000E062F224200000E162F224200000E262F224200000E362F224200000E462F224200000E562F224200000E662F224200000E762F224200000E862F224200000E962F224200000EA62F224200000EB62F224200000EC62F224200000ED62F224200000EE62F224200000EF62F224200000F062F224200000F162F224200000F262F224200000F362F224200000F462F224200000F562F224200000F662F224200000F762F224200000F862F224200000F962F224200000FA62F224200000FB62F224200000FC62F224200000FD62F224200000FE62F224200000FF62F2242000010062F2242000010162F2242000010262F2242000010362F2242000010462F2242000010562F2242000010662F2242000010762F2242000010862F2242000010962F2242000010A62F2242000010B62F2242000010C62F2242000010D62F2242000010E62F2242000010F62F2242000011062F2242000011162F2242000011262F2242000011362F2242000011462F2242000011562F2242000011662F2242000011762F2242000011862F2242000011962F2242000011A62F2242000011B62F2242000011C62F2242000011D62F2242000011E62F2242000011F62F2242000012062F2242000012162F2242000012262F2242000012362F2242000012462F2242000012562F2242000012662F2242000012762F2242000012862F2242000012962F2242000012A62F2242000012B62F2242000012C62F2242000012D62F2242000012E62F2242000012F62F2242000013062F2242000013162F2242000013262F2242000013362F2242000013462F2242000013562F2242000013662F2242000013762F2242000013862F2242000013962F2242000013A62F2242000013B62F2242000013C62F2242000013D62F2242000013E62F2242000013F62F2242000014062F2242000014162F2242000014262F2242000014362F2242000014462F2242000014562F2242000014662F2242000014762F2242000014862F2242000014962F2242000014A62F2242000014B62F2242000014C62F2242000014D62F2242000014E62F2242000014F62F2242000015062F2242000015162F2242000015262F2242000015362F2242000015462F2242000015562F2242000015662F2242000015762F2242000015862F2242000015962F2242000015A62F2242000015B62F2242000015C62F2242000015D62F2242000015E62F2242000015F62F2242000016062F2242000016162F2242000016262F2242000016362F2242000016462F2242000016562F2242000016662F2242000016762F2242000016862F2242000016962F2242000016A62F2242000016B62F2242000016C62F2242000016D62F2242000016E62F2242000016F62F2242000017062F2242000017162F2242000017262F2242000017362F2242000017462F2242000017562F2242000017662F2242000017762F2242000017862F2242000017962F2242000017A62F2242000017B62F2242000017C62F2242000017D62F2242000017E62F2242000017F62F2242000018062F2242000018162F2242000018262F2242000018362F2242000018462F2242000018562F2242000018662F2242000018762F2242000018862F2242000018962F2242000018A62F2242000018B62F2242000018C62F2242000018D62F2242000018E62F2242000018F62F2242000019062F2242000019162F2242000019262F2242000019362F2242000019462F2242000019562F2242000019662F2242000019762F2242000019862F2242000019962F2242000019A62F2242000019B62F2242000019C62F2242000019D62F2242000019E62F2242000019F62F224200001A062F224200001A162F224200001A262F224200001A362F224200001A462F224200001A562F224200001A662F224200001A762F224200001A862F224200001A962F224200001AA62F224200001AB62F224200001AC62F224200001AD62F224200001AE62F224200001AF62F224200001B062F224200001B162F224200001B262F224200001B362F224200001B462F224200001B562F224200001B662F224200001B762F224200001B862F224200001B962F224200001BA62F224200001BB62F224200001BC62F224200001BD62F224200001BE62F224200001BF62F224200001C062F224200001C162F224200001C262F224200001C362F224200001C462F224200001C562F224200001C662F224200001C762F224200001C862F224200001C962F224200001CA62F224200001CB62F224200001CC62F224200001CD62F224200001CE62F224200001CF62F224200001D062F224200001D162F224200001D262F224200001D362F224200001D462F224200001D562F224200001D662F224200001D762F224200001D862F224200001D962F224200001DA62F224200001DB62F224200001DC62F224200001DD62F224200001DE62F224200001DF62F224200001E062F224200001E162F224200001E262F224200001E362F224200001E462F224200001E562F224200001E662F224200001E762F224200001E862F224200001E962F224200001EA62F224200001EB62F224200001EC62F224200001ED62F224200001EE62F224200001EF62F224200001F062F224200001F162F224200001F262F224200001F362F224200001F462F224200001F562F224200001F662F224200001F762F224200001F862F224200001F962F224200001FA62F224200001FB62F224200001FC62F224200001FD62F224200001FE62F224200001FF62F2242000020062F2242000020162F2242000020262F2242000020362F2242000020462F2242000020562F2242000020662F2242000020762F2242000020862F2242000020962F2242000020A62F2242000020B62F2242000020C62F2242000020D62F2242000020E62F2242000020F62F2242000021062F2242000021162F2242000021262F2242000021362F2242000021462F2242000021562F2242000021662F2242000021762F2242000021862F2242000021962F2242000021A62F2242000021B62F2242000021C62F2242000021D62F2242000021E62F2242000021F62F2242000022062F2242000022162F2242000022262F2242000022362F2242000022462F2242000022562F2242000022662F2242000022762F2242000022862F2242000022962F2242000022A62F2242000022B62F2242000022C62F2242000022D62F2242000022E62F2242000022F62F2242000023062F2242000023162F2242000023262F2242000023362F2242000023462F2242000023562F2242000023662F2242000023762F2242000023862F2242000023962F2242000023A62F2242000023B62F2242000023C62F2242000023D62F2242000023E62F2242000023F62F2242000024062F2242000024162F2242000024262F2242000024362F2242000024462F2242000024562F2242000024662F2242000024762F2242000024862F2242000024962F2242000024A62F2242000024B62F2242000024C62F2242000024D62F2242000024E62F2242000024F62F2242000025062F2242000025162F2242000025262F2242000025362F2242000025462F2242000025562F2242000025662F2242000025762F2242000025862F2242000025962F2242000025A62F2242000025B62F2242000025C62F2242000025D62F2242000025E62F2242000025F62F2242000026062F2242000026162F2242000026262F2242000026362F2242000026462F2242000026562F2242000026662F2242000026762F2242000026862F2242000026962F2242000026A62F2242000026B62F2242000026C62F2242000026D62F2242000026E62F2242000026F62F2242000027062F2242000027162F2242000027262F2242000027362F2242000027462F2242000027562F2242000027662F2242000027762F2242000027862F2242000027962F2242000027A62F2242000027B62F2242000027C62F2242000027D62F2242000027E62F2242000027F62F2242000028062F2242000028162F2242000028262F2242000028362F2242000028462F2242000028562F2242000028662F2242000028762F2242000028862F2242000028962F2242000028A62F2242000028B62F2242000028C62F2242000028D62F2242000028E62F2242000028F62F2242000029062F2242000029162F2242000029262F2242000029362F2242000029462F2242000029562F2242000029662F2242000029762F2242000029862F2242000029962F2242000029A62F2242000029B62F2242000029C62F2242000029D62F2242000029E62F2242000029F62F224200002A062F224200002A162F224200002A262F224200002A362F224200002A462F224200002A562F224200002A662F224200002A762F224200002A862F224200002A962F224200002AA62F224200002AB62F224200002AC62F224200002AD62F224200002AE62F224200002AF62F224200002B062F224200002B162F224200002B262F224200002B362F224200002B462F224200002B562F224200002B662F224200002B762F224200002B862F224200002B962F224200002BA62F224200002BB62F224200002BC62F224200002BD62F224200002BE62F224200002BF62F224200002C062F224200002C162F224200002C262F224200002C362F224200002C462F224200002C562F224200002C662F224200002C762F224200002C862F224200002C962F224200002CA62F224200002CB62F224200002CC62F224200002CD62F224200002CE62F224200002CF62F224200002D062F224200002D162F224200002D262F224200002D362F224200002D462F224200002D562F224200002D662F224200002D762F224200002D862F224200002D962F224200002DA62F224200002DB62F224200002DC62F224200002DD62F224200002DE62F224200002DF62F224200002E062F224200002E162F224200002E262F224200002E362F224200002E462F224200002E562F224200002E662F224200002E762F224200002E862F224200002E962F224200002EA62F224200002EB62F224200002EC62F224200002ED62F224200002EE62F224200002EF62F224200002F062F224200002F162F224200002F262F224200002F362F224200002F462F224200002F562F224200002F662F224200002F762F224200002F862F224200002F962F224200002FA62F224200002FB62F224200002FC62F224200002FD62F224200002FE62F224200002FF62F2242000030062F2242000030162F2242000030262F2242000030362F2242000030462F2242000030562F2242000030662F2242000030762F2242000030862F2242000030962F2242000030A62F2242000030B62F2242000030C62F2242000030D62F2242000030E62F2242000030F62F2242000031062F2242000031162F2242000031262F2242000031362F2242000031462F2242000031562F2242000031662F2242000031762F2242000031862F2242000031962F2242000031A62F2242000031B62F2242000031C62F2242000031D62F2242000031E62F2242000031F62F2242000032062F2242000032162F2242000032262F2242000032362F2242000032462F2242000032562F2242000032662F2242000032762F2242000032862F2242000032962F2242000032A62F2242000032B62F2242000032C62F2242000032D62F2242000032E62F2242000032F62F2242000033062F2242000033162F2242000033262F2242000033362F2242000033462F2242000033562F2242000033662F2242000033762F2242000033862F2242000033962F2242000033A62F2242000033B62F2242000033C62F2242000033D62F2242000033E62F2242000033F62F2242000034062F2242000034162F2242000034262F2242000034362F2242000034462F2242000034562F2242000034662F2242000034762F2242000034862F2242000034962F2242000034A62F2242000034B62F2242000034C62F2242000034D62F2242000034E62F2242000034F62F2242000035062F2242000035162F2242000035262F2242000035362F2242000035462F2242000035562F2242000035662F2242000035762F2242000035862F2242000035962F2242000035A62F2242000035B62F2242000035C62F2242000035D62F2242000035E62F2242000035F62F2242000036062F2242000036162F2242000036262F2242000036362F2242000036462F2242000036562F2242000036662F2242000036762F2242000036862F2242000036962F2242000036A62F2242000036B62F2242000036C62F2242000036D62F2242000036E62F2242000036F62F2242000037062F2242000037162F2242000037262F2242000037362F2242000037462F2242000037562F2242000037662F2242000037762F2242000037862F2242000037962F2242000037A62F2242000037B62F2242000037C62F2242000037D62F2242000037E62F2242000037F62F2242000038062F2242000038162F2242000038262F2242000038362F2242000038462F2242000038562F2242000038662F2242000038762F2242000038862F2242000038962F2242000038A62F2242000038B62F2242000038C62F2242000038D62F2242000038E62F2242000038F62F2242000039062F2242000039162F2242000039262F2242000039362F2242000039462F2242000039562F2242000039662F2242000039762F2242000039862F2242000039962F2242000039A62F2242000039B62F2242000039C62F2242000039D62F2242000039E62F2242000039F62F224200003A062F224200003A162F224200003A262F224200003A362F224200003A462F224200003A562F224200003A662F224200003A762F224200003A862F224200003A962F224200003AA62F224200003AB62F224200003AC62F224200003AD62F224200003AE62F224200003AF62F224200003B062F224200003B162F224200003B262F224200003B362F224200003B462F224200003B562F224200003B662F224200003B762F224200003B862F224200003B962F224200003BA62F224200003BB62F224200003BC62F224200003BD62F224200003BE62F224200003BF62F224200003C062F224200003C162F224200003C262F224200003C362F224200003C462F224200003C562F224200003C662F224200003C762F224200003C862F224200003C962F224200003CA62F224200003CB62F224200003CC62F224200003CD62F224200003CE62F224200003CF62F224200003D062F224200003D162F224200003D262F224200003D362F224200003D462F224200003D562F224200003D662F224200003D762F224200003D862F224200003D962F224200003DA62F224200003DB62F224200003DC62F224200003DD62F224200003DE62F224200003DF62F224200003E062F224200003E162F224200003E262F224200003E362F224200003E462F224200003E562F224200003E662F224200003E762F224200003E862F224200003E962F224200003EA62F224200003EB62F224200003EC62F224200003ED62F224200003EE62F224200003EF62F224200003F062F224200003F162F224200003F262F224200003F362F224200003F462F224200003F562F224200003F662F224200003F762F224200003F862F224200003F962F224200003FA62F224200003FB62F224200003FC62F224200003FD62F224200003FE62F224200003FF62F2242000040062F2242000040162F2242000040262F2242000040362F2242000040462F2242000040562F2242000040662F2242000040762F2242000040862F2242000040962F2242000040A62F2242000040B62F2242000040C62F2242000040D62F2242000040E62F2242000040F62F2242000041062F2242000041162F2242000041262F2242000041362F2242000041462F2242000041562F2242000041662F2242000041762F2242000041862F2242000041962F2242000041A62F2242000041B62F2242000041C62F2242000041D62F2242000041E62F2242000041F62F2242000042062F2242000042162F2242000042262F2242000042362F2242000042462F2242000042562F2242000042662F2242000042762F2242000042862F2242000042962F2242000042A62F2242000042B62F2242000042C62F2242000042D62F2242000042E62F2242000042F62F2242000043062F2242000043162F2242000043262F2242000043362F2242000043462F2242000043562F2242000043662F2242000043762F2242000043862F2242000043962F2242000043A62F2242000043B62F2242000043C62F2242000043D62F2242000043E62F2242000043F62F2242000044062F2242000044162F2242000044262F2242000044362F2242000044462F2242000044562F2242000044662F2242000044762F2242000044862F2242000044962F2242000044A62F2242000044B62F2242000044C62F2242000044D62F2242000044E62F2242000044F62F2242000045062F2242000045162F2242000045262F2242000045362F2242000045462F2242000045562F2242000045662F2242000045762F2242000045862F2242000045962F2242000045A62F2242000045B62F2242000045C62F2242000045D62F2242000045E62F2242000045F62F2242000046062F2242000046162F2242000046262F2242000046362F2242000046462F2242000046562F2242000046662F2242000046762F2242000046862F2242000046962F2242000046A62F2242000046B62F2242000046C62F2242000046D62F2242000046E62F2242000046F62F2242000047062F2242000047162F2242000047262F2242000047362F2242000047462F2242000047562F2242000047662F2242000047762F2242000047862F2242000047962F2242000047A62F2242000047B62F2242000047C62F2242000047D62F2242000047E62F2242000047F62F2242000048062F2242000048162F2242000048262F2242000048362F2242000048462F2242000048562F2242000048662F2242000048762F2242000048862F2242000048962F2242000048A62F2242000048B62F2242000048C62F2242000048D62F2242000048E62F2242000048F62F2242000049062F2242000049162F2242000049262F2242000049362F2242000049462F2242000049562F2242000049662F2242000049762F2242000049862F2242000049962F2242000049A62F2242000049B62F2242000049C62F2242000049D62F2242000049E62F2242000049F62F224200004A062F224200004A162F224200004A262F224200004A362F224200004A462F224200004A562F224200004A662F224200004A762F224200004A862F224200004A962F224200004AA62F224200004AB62F224200004AC62F224200004AD62F224200004AE62F224200004AF62F224200004B062F224200004B162F224200004B262F224200004B362F224200004B462F224200004B562F224200004B662F224200004B762F224200004B862F224200004B962F224200004BA62F224200004BB62F224200004BC62F224200004BD62F224200004BE62F224200004BF62F224200004C062F224200004C162F224200004C262F224200004C362F224200004C462F224200004C562F224200004C662F224200004C762F224200004C862F224200004C962F224200004CA62F224200004CB62F224200004CC62F224200004CD62F224200004CE62F224200004CF62F224200004D062F224200004D162F224200004D262F224200004D362F224200004D462F224200004D562F224200004D662F224200004D762F224200004D862F224200004D962F224200004DA62F224200004DB62F224200004DC62F224200004DD62F224200004DE62F224200004DF62F224200004E062F224200004E162F224200004E262F224200004E362F224200004E462F224200004E562F224200004E662F224200004E762F224200004E862F224200004E962F224200004EA62F224200004EB62F224200004EC62F224200004ED62F224200004EE62F224200004EF62F224200004F062F224200004F162F224200004F262F224200004F362F224200004F462F224200004F562F224200004F662F224200004F762F224200004F862F224200004F962F224200004FA62F224200004FB62F224200004FC62F224200004FD62F224200004FE62F224200004FF62F2242000050062F2242000050162F2242000050262F2242000050362F2242000050462F2242000050562F2242000050662F2242000050762F2242000050862F2242000050962F2242000050A62F2242000050B62F2242000050C62F2242000050D62F2242000050E62F2242000050F62F2242000051062F2242000051162F2242000051262F2242000051362F2242000051462F2242000051562F2242000051662F2242000051762F2242000051862F2242000051962F2242000051A62F2242000051B62F2242000051C62F2242000051D62F2242000051E62F2242000051F62F2242000052062F2242000052162F2242000052262F2242000052362F2242000052462F2242000052562F2242000052662F2242000052762F2242000052862F2242000052962F2242000052A62F2242000052B62F2242000052C62F2242000052D62F2242000052E62F2242000052F62F2242000053062F2242000053162F2242000053262F2242000053362F2242000053462F2242000053562F2242000053662F2242000053762F2242000053862F2242000053962F2242000053A62F2242000053B62F2242000053C62F2242000053D62F2242000053E62F2242000053F62F2242000054062F2242000054162F2242000054262F2242000054362F2242000054462F2242000054562F2242000054662F2242000054762F2242000054862F2242000054962F2242000054A62F2242000054B62F2242000054C62F2242000054D62F2242000054E62F2242000054F62F2242000055062F2242000055162F2242000055262F2242000055362F2242000055462F2242000055562F2242000055662F2242000055762F2242000055862F2242000055962F2242000055A62F2242000055B62F2242000055C62F2242000055D62F2242000055E62F2242000055F62F2242000056062F2242000056162F2242000056262F2242000056362F2242000056462F2242000056562F2242000056662F2242000056762F2242000056862F2242000056962F2242000056A62F2242000056B62F2242000056C62F2242000056D62F2242000056E62F2242000056F62F2242000057062F2242000057162F2242000057262F2242000057362F2242000057462F2242000057562F2242000057662F2242000057762F2242000057862F2242000057962F2242000057A62F2242000057B62F2242000057C62F2242000057D62F2242000057E62F2242000057F62F2242000058062F2242000058162F2242000058262F2242000058362F2242000058462F2242000058562F2242000058662F2242000058762F2242000058862F2242000058962F2242000058A62F2242000058B62F2242000058C62F2242000058D62F2242000058E62F2242000058F62F2242000059062F2242000059162F2242000059262F2242000059362F2242000059462F2242000059562F2242000059662F2242000059762F2242000059862F2242000059962F2242000059A62F2242000059B62F2242000059C62F2242000059D62F2242000059E62F2242000059F62F224200005A062F224200005A162F224200005A262F224200005A362F224200005A462F224200005A562F224200005A662F224200005A762F224200005A862F224200005A962F224200005AA62F224200005AB62F224200005AC62F224200005AD62F224200005AE62F224200005AF62F224200005B062F224200005B162F224200005B262F224200005B362F224200005B462F224200005B562F224200005B662F224200005B762F224200005B862F224200005B962F224200005BA62F224200005BB62F224200005BC62F224200005BD62F224200005BE62F224200005BF62F224200005C062F224200005C162F224200005C262F224200005C362F224200005C462F224200005C562F224200005C662F224200005C762F224200005C862F224200005C962F224200005CA62F224200005CB62F224200005CC62F224200005CD62F224200005CE62F224200005CF62F224200005D062F224200005D162F224200005D262F224200005D362F224200005D462F224200005D562F224200005D662F224200005D762F224200005D862F224200005D962F224200005DA62F224200005DB62F224200005DC62F224200005DD62F224200005DE62F224200005DF62F224200005E062F224200005E162F224200005E262F224200005E362F224200005E462F224200005E562F224200005E662F224200005E762F224200005E862F224200005E962F224200005EA62F224200005EB62F224200005EC62F224200005ED62F224200005EE62F224200005EF62F224200005F062F224200005F162F224200005F262F224200005F362F224200005F462F224200005F562F224200005F662F224200005F762F224200005F862F224200005F962F224200005FA62F224200005FB62F224200005FC62F224200005FD62F224200005FE62F224200005FF62F2242000060062F2242000060162F2242000060262F2242000060362F2242000060462F2242000060562F2242000060662F2242000060762F2242000060862F2242000060962F2242000060A62F2242000060B62F2242000060C62F2242000060D62F2242000060E62F2242000060F62F2242000061062F2242000061162F2242000061262F2242000061362F2242000061462F2242000061562F2242000061662F2242000061762F2242000061862F2242000061962F2242000061A62F2242000061B62F2242000061C62F2242000061D62F2242000061E62F2242000061F62F2242000062062F2242000062162F2242000062262F2242000062362F2242000062462F2242000062562F2242000062662F2242000062762F2242000062862F2242000062962F2242000062A62F2242000062B62F2242000062C62F2242000062D62F2242000062E62F2242000062F62F2242000063062F2242000063162F2242000063262F2242000063362F2242000063462F2242000063562F2242000063662F2242000063762F2242000063862F2242000063962F2242000063A62F2242000063B62F2242000063C62F2242000063D62F2242000063E62F2242000063F62F2242000064062F2242000064162F2242000064262F2242000064362F2242000064462F2242000064562F2242000064662F2242000064762F2242000064862F2242000064962F2242000064A62F2242000064B62F2242000064C62F2242000064D62F2242000064E62F2242000064F62F2242000065062F2242000065162F2242000065262F2242000065362F2242000065462F2242000065562F2242000065662F2242000065762F2242000065862F2242000065962F2242000065A62F2242000065B62F2242000065C62F2242000065D62F2242000065E62F2242000065F62F2242000066062F2242000066162F2242000066262F2242000066362F2242000066462F2242000066562F2242000066662F2242000066762F2242000066862F2242000066962F2242000066A62F2242000066B62F2242000066C62F2242000066D62F2242000066E62F2242000066F62F2242000067062F2242000067162F2242000067262F2242000067362F2242000067462F2242000067562F2242000067662F2242000067762F2242000067862F2242000067962F2242000067A62F2242000067B62F2242000067C62F2242000067D62F2242000067E62F2242000067F62F2242000068062F2242000068162F2242000068262F2242000068362F2242000068462F2242000068562F2242000068662F2242000068762F2242000068862F2242000068962F2242000068A62F2242000068B62F2242000068C62F2242000068D62F2242000068E62F2242000068F62F2242000069062F2242000069162F2242000069262F2242000069362F2242000069462F2242000069562F2242000069662F2242000069762F2242000069862F2242000069962F2242000069A62F2242000069B62F2242000069C62F2242000069D62F2242000069E62F2242000069F62F224200006A062F224200006A162F224200006A262F224200006A362F224200006A462F224200006A562F224200006A662F224200006A762F224200006A862F224200006A962F224200006AA62F224200006AB62F224200006AC62F224200006AD62F224200006AE62F224200006AF62F224200006B062F224200006B162F224200006B262F224200006B362F224200006B462F224200006B562F224200006B662F224200006B762F224200006B862F224200006B962F224200006BA62F224200006BB62F224200006BC62F224200006BD62F224200006BE62F224200006BF62F224200006C062F224200006C162F224200006C262F224200006C362F224200006C462F224200006C562F224200006C662F224200006C762F224200006C862F224200006C962F224200006CA62F224200006CB62F224200006CC62F224200006CD62F224200006CE62F224200006CF62F224200006D062F224200006D162F224200006D262F224200006D362F224200006D462F224200006D562F224200006D662F224200006D762F224200006D862F224200006D962F224200006DA62F224200006DB62F224200006DC62F224200006DD62F224200006DE62F224200006DF62F224200006E062F224200006E162F224200006E262F224200006E362F224200006E462F224200006E562F224200006E662F224200006E762F224200006E862F224200006E962F224200006EA62F224200006EB62F224200006EC62F224200006ED62F224200006EE62F224200006EF62F224200006F062F224200006F162F224200006F262F224200006F362F224200006F462F224200006F562F224200006F662F224200006F762F224200006F862F224200006F962F224200006FA62F224200006FB62F224200006FC62F224200006FD62F224200006FE62F224200006FF62F2242000070062F2242000070162F2242000070262F2242000070362F2242000070462F2242000070562F2242000070662F2242000070762F2242000070862F2242000070962F2242000070A62F2242000070B62F2242000070C62F2242000070D62F2242000070E62F2242000070F62F2242000071062F2242000071162F2242000071262F2242000071362F2242000071462F2242000071562F2242000071662F2242000071762F2242000071862F2242000071962F2242000071A62F2242000071B62F2242000071C62F2242000071D62F2242000071E62F2242000071F62F2242000072062F2242000072162F2242000072262F2242000072362F2242000072462F2242000072562F2242000072662F2242000072762F2242000072862F2242000072962F2242000072A62F2242000072B62F2242000072C62F2242000072D62F2242000072E62F2242000072F62F2242000073062F2242000073162F2242000073262F2242000073362F2242000073462F2242000073562F2242000073662F2242000073762F2242000073862F2242000073962F2242000073A62F2242000073B62F2242000073C62F2242000073D62F2242000073E62F2242000073F62F2242000074062F2242000074162F2242000074262F2242000074362F2242000074462F2242000074562F2242000074662F2242000074762F2242000074862F2242000074962F2242000074A62F2242000074B62F2242000074C62F2242000074D62F2242000074E62F2242000074F62F2242000075062F2242000075162F2242000075262F2242000075362F2242000075462F2242000075562F2242000075662F2242000075762F2242000075862F2242000075962F2242000075A62F2242000075B62F2242000075C62F2242000075D62F2242000075E62F2242000075F62F2242000076062F2242000076162F2242000076262F2242000076362F2242000076462F2242000076562F2242000076662F2242000076762F2242000076862F2242000076962F2242000076A62F2242000076B62F2242000076C62F2242000076D62F2242000076E62F2242000076F62F2242000077062F2242000077162F2242000077262F2242000077362F2242000077462F2242000077562F2242000077662F2242000077762F2242000077862F2242000077962F2242000077A62F2242000077B62F2242000077C62F2242000077D62F2242000077E62F2242000077F62F2242000078062F2242000078162F2242000078262F2242000078362F2242000078462F2242000078562F2242000078662F2242000078762F2242000078862F2242000078962F2242000078A62F2242000078B62F2242000078C62F2242000078D62F2242000078E62F2242000078F62F2242000079062F2242000079162F2242000079262F2242000079362F2242000079462F2242000079562F2242000079662F2242000079762F2242000079862F2242000079962F2242000079A62F2242000079B62F2242000079C62F2242000079D62F2242000079E62F2242000079F62F224200007A062F224200007A162F224200007A262F224200007A362F224200007A462F224200007A562F224200007A662F224200007A762F224200007A862F224200007A962F224200007AA62F224200007AB62F224200007AC62F224200007AD62F224200007AE62F224200007AF62F224200007B062F224200007B162F224200007B262F224200007B362F224200007B462F224200007B562F224200007B662F224200007B762F224200007B862F224200007B962F224200007BA62F224200007BB62F224200007BC62F224200007BD62F224200007BE62F224200007BF62F224200007C062F224200007C162F224200007C262F224200007C362F224200007C462F224200007C562F224200007C662F224200007C762F224200007C862F224200007C962F224200007CA62F224200007CB62F224200007CC62F224200007CD62F224200007CE62F224200007CF62F224200007D062F224200007D162F224200007D262F224200007D362F224200007D462F224200007D562F224200007D662F224200007D762F224200007D862F224200007D962F224200007DA62F224200007DB62F224200007DC62F224200007DD62F224200007DE62F224200007DF62F224200007E062F224200007E162F224200007E262F224200007E362F224200007E462F224200007E562F224200007E662F224200007E762F224200007E862F224200007E962F224200007EA62F224200007EB62F224200007EC62F224200007ED62F224200007EE62F224200007EF62F224200007F062F224200007F162F224200007F262F224200007F362F224200007F462F224200007F562F224200007F662F224200007F762F224200007F862F224200007F962F224200007FA62F224200007FB62F224200007FC62F224200007FD62F224200007FE62F224200007FF62F2242000080062F2242000080162F2242000080262F2242000080362F2242000080462F2242000080562F2242000080662F2242000080762F2242000080862F2242000080962F2242000080A62F2242000080B62F2242000080C62F2242000080D62F2242000080E62F2242000080F62F2242000081062F2242000081162F2242000081262F2242000081362F2242000081462F2242000081562F2242000081662F2242000081762F2242000081862F2242000081962F2242000081A62F2242000081B62F2242000081C62F2242000081D62F2242000081E62F2242000081F62F2242000082062F2242000082162F2242000082262F2242000082362F2242000082462F2242000082562F2242000082662F2242000082762F2242000082862F2242000082962F2242000082A62F2242000082B62F2242000082C62F2242000082D62F2242000082E62F2242000082F62F2242000083062F2242000083162F2242000083262F2242000083362F2242000083462F2242000083562F2242000083662F2242000083762F2242000083862F2242000083962F2242000083A62F2242000083B62F2242000083C62F2242000083D62F2242000083E62F2242000083F62F2242000084062F2242000084162F2242000084262F2242000084362F2242000084462F2242000084562F2242000084662F2242000084762F2242000084862F2242000084962F2242000084A62F2242000084B62F2242000084C62F2242000084D62F2242000084E62F2242000084F62F2242000085062F2242000085162F2242000085262F2242000085362F2242000085462F2242000085562F2242000085662F2242000085762F2242000085862F2242000085962F2242000085A62F2242000085B62F2242000085C62F2242000085D62F2242000085E62F2242000085F62F2242000086062F2242000086162F2242000086262F2242000086362F2242000086462F2242000086562F2242000086662F2242000086762F2242000086862F2242000086962F2242000086A62F2242000086B62F2242000086C62F2242000086D62F2242000086E62F2242000086F62F2242000087062F2242000087162F2242000087262F2242000087362F2242000087462F2242000087562F2242000087662F2242000087762F2242000087862F2242000087962F2242000087A62F2242000087B62F2242000087C62F2242000087D62F2242000087E62F2242000087F62F2242000088062F2242000088162F2242000088262F2242000088362F2242000088462F2242000088562F2242000088662F2242000088762F2242000088862F2242000088962F2242000088A62F2242000088B62F2242000088C62F2242000088D62F2242000088E62F2242000088F62F2242000089062F2242000089162F2242000089262F2242000089362F2242000089462F2242000089562F2242000089662F2242000089762F2242000089862F2242000089962F2242000089A62F2242000089B62F2242000089C62F2242000089D62F2242000089E62F2242000089F62F224200008A062F224200008A162F224200008A262F224200008A362F224200008A462F224200008A562F224200008A662F224200008A762F224200008A862F224200008A962F224200008AA62F224200008AB62F224200008AC62F224200008AD62F224200008AE62F224200008AF62F224200008B062F224200008B162F224200008B262F224200008B362F224200008B462F224200008B562F224200008B662F224200008B762F224200008B862F224200008B962F224200008BA62F224200008BB62F224200008BC62F224200008BD62F224200008BE62F224200008BF62F224200008C062F224200008C162F224200008C262F224200008C362F224200008C462F224200008C562F224200008C662F224200008C762F224200008C862F224200008C962F224200008CA62F224200008CB62F224200008CC62F224200008CD62F224200008CE62F224200008CF62F224200008D062F224200008D162F224200008D262F224200008D362F224200008D462F224200008D562F224200008D662F224200008D762F224200008D862F224200008D962F224200008DA62F224200008DB62F224200008DC62F224200008DD62F224200008DE62F224200008DF62F224200008E062F224200008E162F224200008E262F224200008E362F224200008E462F224200008E562F224200008E662F224200008E762F224200008E862F224200008E962F224200008EA62F224200008EB62F224200008EC62F224200008ED62F224200008EE62F224200008EF62F224200008F062F224200008F162F224200008F262F224200008F362F224200008F462F224200008F562F224200008F662F224200008F762F224200008F862F224200008F962F224200008FA62F224200008FB62F224200008FC62F224200008FD62F224200008FE62F224200008FF62F2242000090062F2242000090162F2242000090262F2242000090362F2242000090462F2242000090562F2242000090662F2242000090762F2242000090862F2242000090962F2242000090A62F2242000090B62F2242000090C62F2242000090D62F2242000090E62F2242000090F62F2242000091062F2242000091162F2242000091262F2242000091362F2242000091462F2242000091562F2242000091662F2242000091762F2242000091862F2242000091962F2242000091A62F2242000091B62F2242000091C62F2242000091D62F2242000091E62F2242000091F62F22420849200092062F2242000092162F2242000092262F28465242000092362F2242000092462F2242000092562F2242000092662F2242000092762F2242000092862F2242000092962F2242000092A62F2242000092B62F2242000092C62F2242000092D62F2242000092E62F2242000092F62F2242000093062F2242000093162F2242000093262F2242000093362F2242000093462F2242000093562F2242000093662F2242000093762F2242000093862F2242000093962F2242000093A62F2242000093B62F2242000093C62F2242000093D62F2242000093E62F2242000093F62F2242000094062F2242000094162F2242000094262F2242000094362F2242000094462F2242000094562F2242000094662F2242000094762F2242000094862F2242000094962F2242000094A62F2242000094B62F2242000094C62F2242000094D62F2242000094E62F2242000094F62F2242000095062F2242000095162F2242000095262F2242000095362F2242000095462F2242000095562F2242000095662F2242000095762F2242000095862F2242000095962F2242000095A62F2242000095B62F2242000095C62F2242000095D62F2242000095E62F2242000095F62F2242000096062F2242000096162F2242000096262F2242000096362F2242000096462F2242000096562F2242000096662F2242000096762F2242000096862F2242000096962F2242000096A62F2242000096B62F2242000096C62F2242000096D62F2242000096E62F2242000096F62F2242000097062F2242000097162F2242000097262F2242000097362F2242000097462F2242000097562F2242000097662F2242000097762F2242000097862F2242000097962F2242000097A62F2242000097B62F2242000097C62F2242000097D62F2242000097E62F2242000097F62F2242000098062F2242000098162F2242000098262F2242000098362F2242000098462F2242000098562F2242000098662F2242000098762F2242000098862F2242000098962F2242000098A62F2242000098B62F2242000098C62F2242000098D62F2242000098E62F2242000098F62F2242000099062F2242000099162F2242000099262F2242000099362F2242000099462F2242000099562F2242000099662F2242000099762F2242000099862F2242000099962F2242000099A62F2242000099B62F2242000099C62F2242000099D62F2242000099E62F2242000099F62F224200009A062F224200009A162F224200009A262F224200009A362F224200009A462F224200009A562F224200009A662F224200009A762F224200009A862F224200009A962F224200009AA62F224200009AB62F224200009AC62F224200009AD62F224200009AE62F224200009AF62F224200009B062F224200009B162F224200009B262F224200009B362F224200009B462F224200009B562F224200009B662F224200009B762F224200009B862F224200009B962F224200009BA62F224200009BB62F224200009BC62F224200009BD62F224200009BE62F224200009BF62F224200009C062F224200009C162F224200009C262F224200009C3000D0002001600090002002A00040001000000000300075A'O; + +/* test whether a message with chnked length determinant is parsed */ +testcase TC_chunked_len() runs on test_CT { + f_init(); + TCP.send(ts_AS(g_tcp_conn_id, c_chunked)); + f_sabp_exp(tr_SABP_Write(?, ?)); + setverdict(pass); +} + +/* test whether a message with chunked length determinant is parsed if each byte is received separately */ +testcase TC_chunked_len_bytewise() runs on test_CT { + f_init(); + tcp_send_segmented(c_chunked, 100, 0.05); + f_sabp_exp(tr_SABP_Write(?, ?)); + setverdict(pass); +} + +control { + execute( TC_1byte_len() ); + execute( TC_1byte_len_bytewise() ); + execute( TC_1byte_len_chained() ); + execute( TC_2byte_len() ); + execute( TC_2byte_len_bytewise() ); + execute( TC_2byte_len_chained() ); + execute( TC_2byte_len_chained_bytewise() ); + execute( TC_chunked_len() ); + execute( TC_chunked_len_bytewise() ); +} + + +} diff --git a/cbc/gen_links.sh b/cbc/gen_links.sh new file mode 100755 index 000000000..075be2f46 --- /dev/null +++ b/cbc/gen_links.sh @@ -0,0 +1,57 @@ +#!/bin/bash + +BASEDIR=../deps + +. ../gen_links.sh.inc + +DIR=$BASEDIR/titan.Libraries.TCCUsefulFunctions/src +FILES="TCCInterface_Functions.ttcn TCCConversion_Functions.ttcn TCCConversion.cc TCCInterface.cc TCCInterface_ip.h" +FILES+=" TCCEncoding_Functions.ttcn TCCEncoding.cc " # GSM 7-bit coding +gen_links $DIR $FILES + +DIR=$BASEDIR/titan.TestPorts.Common_Components.Socket-API/src +FILES="Socket_API_Definitions.ttcn" +gen_links $DIR $FILES + +DIR=$BASEDIR/titan.TestPorts.IPL4asp/src +FILES="IPL4asp_Functions.ttcn IPL4asp_PT.cc IPL4asp_PT.hh IPL4asp_PortType.ttcn IPL4asp_Types.ttcn IPL4asp_discovery.cc IPL4asp_protocol_L234.hh" +gen_links $DIR $FILES + +DIR=$BASEDIR/titan.TestPorts.SCTPasp/src +FILES="SCTPasp_PT.cc SCTPasp_PT.hh SCTPasp_PortType.ttcn SCTPasp_Types.ttcn" +gen_links $DIR $FILES + +DIR=$BASEDIR/titan.TestPorts.TELNETasp/src +FILES="TELNETasp_PT.cc TELNETasp_PT.hh TELNETasp_PortType.ttcn" +gen_links $DIR $FILES + +DIR=$BASEDIR/titan.ProtocolModules.BSSMAP/src +FILES="BSSAP_Types.ttcn" +gen_links $DIR $FILES + +DIR=../library/sabp +FILES="SABP_CommonDataTypes.asn SABP_Constants.asn SABP_Containers.asn SABP_IEs.asn SABP_PDU_Contents.asn SABP_PDU_Descriptions.asn SABP_Types.ttcn SABP_EncDec.cc SABP_Templates.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 + +DIR=$BASEDIR/titan.TestPorts.HTTPmsg/src +FILES="HTTPmsg_MessageLen.ttcn HTTPmsg_MessageLen_Function.cc HTTPmsg_PT.cc HTTPmsg_PT.hh HTTPmsg_PortType.ttcn HTTPmsg_Types.ttcn " +gen_links $DIR $FILES + +DIR=$BASEDIR/titan.ProtocolModules.JSON_v07_2006/src +FILES="JSON_EncDec.cc JSON_Types.ttcn " +gen_links $DIR $FILES + +DIR=../library +FILES="Misc_Helpers.ttcn General_Types.ttcn GSM_Types.ttcn Osmocom_Types.ttcn Native_Functions.ttcn Native_FunctionDefs.cc " +FILES+="HTTP_Adapter.ttcn " +FILES+="BSSMAP_Templates.ttcn " +FILES+="CBSP_Types.ttcn CBSP_Templates.ttcn " +FILES+="CBSP_CodecPort.ttcn CBSP_CodecPort_CtrlFunct.ttcn CBSP_CodecPort_CtrlFunctdef.cc CBSP_Adapter.ttcn " +FILES+="SABP_CodecPort.ttcn SABP_CodecPort_CtrlFunct.ttcn SABP_CodecPort_CtrlFunctDef.cc SABP_Adapter.ttcn " +gen_links $DIR $FILES + +ignore_pp_results diff --git a/cbc/regen_makefile.sh b/cbc/regen_makefile.sh new file mode 100755 index 000000000..0dabc7de7 --- /dev/null +++ b/cbc/regen_makefile.sh @@ -0,0 +1,11 @@ +#!/bin/bash + +FILES="*.ttcn TCCConversion.cc TCCInterface.cc TCCEncoding.cc IPL4asp_PT.cc IPL4asp_discovery.cc TELNETasp_PT.cc Native_FunctionDefs.cc SCTPasp_PT.cc Abstract_Socket.cc HTTPmsg_PT.cc HTTPmsg_MessageLen_Function.cc JSON_EncDec.cc CBSP_CodecPort_CtrlFunctdef.cc SABP_EncDec.cc SABP_CodecPort_CtrlFunctDef.cc " +#FILES+="*.ttcnpp " +FILES+="*.asn" + +export CPPFLAGS_TTCN3="" + +../regen-makefile.sh CBC_Tests.ttcn $FILES + +sed -i -e 's/^LINUX_LIBS = -lxml2/LINUX_LIBS = -lxml2 -lfftranscode/' Makefile diff --git a/library/CBSP_Templates.ttcn b/library/CBSP_Templates.ttcn index 5ee1f33bf..5da29585c 100644 --- a/library/CBSP_Templates.ttcn +++ b/library/CBSP_Templates.ttcn @@ -54,7 +54,7 @@ function tr_CbspChannelInd(template uint8_t val := ?) return template CBSP_IE { if (istemplatekind(val, "omit")) { ie := omit; } else if (istemplatekind(val, "*")) { - ie := tr_CBSP_IE({channel_ind := ?}) ifpresent; + ie := tr_CBSP_IE({channel_ind := ?}); //ifpresent; } else { ie := tr_CBSP_IE({channel_ind := val}); } @@ -542,14 +542,20 @@ template (value) CBSP_PDU ts_CBSP_KILL(template (value) uint16_t msg_id, ts_OldSerNo(old_ser_nr), ts_CbspCellList(cell_list), ts_CbspChannelInd(channel_ind)}); -template CBSP_PDU tr_CBSP_KILL(template uint16_t msg_id := ?, template uint16_t old_ser_nr := ?, - template BSSMAP_FIELD_CellIdentificationList cell_list := ?, - template uint8_t channel_ind := ?) := - tr_CBSP(CBSP_MSGT_KILL, { - tr_CbspMsgId(msg_id), - tr_OldSerNo(old_ser_nr), - tr_CbspCellList(cell_list), - tr_CbspChannelInd(channel_ind) }); +function tr_CBSP_KILL(template uint16_t msg_id := ?, template uint16_t old_ser_nr := ?, + template BSSMAP_FIELD_CellIdentificationList cell_list := ?, + template uint8_t channel_ind := ?) +return template (present) CBSP_PDU { + var template CBSP_IEs ies := { + tr_CbspMsgId(msg_id), + tr_OldSerNo(old_ser_nr), + tr_CbspCellList(cell_list) + }; + if (not istemplatekind(channel_ind, "omit")) { + ies[lengthof(ies)] := tr_CbspChannelInd(channel_ind); + } + return tr_CBSP(CBSP_MSGT_KILL, ies); +} /* 8.1.3.5 KILL COMPLETE */ function ts_CBSP_KILL_COMPL(template (value) uint16_t msg_id, template (value) uint16_t old_ser_nr, diff --git a/library/CBSP_Types.ttcn b/library/CBSP_Types.ttcn index c4c6cf25d..5ab3c98bd 100644 --- a/library/CBSP_Types.ttcn +++ b/library/CBSP_Types.ttcn @@ -378,5 +378,24 @@ external function enc_CBSP_PDU(in CBSP_PDU msg) return octetstring external function dec_CBSP_PDU(in octetstring msg) return CBSP_PDU with { extension "prototype(convert) decode(RAW)" }; +/* convert from warning period encoding to seconds */ +function f_cbsp_period2s(uint8_t period) return integer +{ + if (period == 0) { + return -1; /* infinite */ + } else if (period <= 10) { + return period; + } else if (period <= 20) { + return 10 + (period - 10)*2; + } else if (period <= 38) { + return 30 + (period - 20)*5; + } else if (period <= 86) { + return 120 + (period - 38)*10; + } else if (period <= 186) { + return 600 + (period - 86)*30; + } else { + return 0; + } +} } with { encode "RAW"; variant "FIELDORDER(msb)" } diff --git a/library/SABP_Adapter.ttcn b/library/SABP_Adapter.ttcn index e94e91cb8..046f597cb 100644 --- a/library/SABP_Adapter.ttcn +++ b/library/SABP_Adapter.ttcn @@ -20,7 +20,7 @@ import from SABP_CodecPort all; import from SABP_CodecPort_CtrlFunct all; import from IPL4asp_Types all; import from IPL4asp_PortType all; -//import from Socket_API_Definitions all; +import from Socket_API_Definitions all; const integer SABP_HDR_LEN := 3; @@ -72,7 +72,7 @@ private function f_aper_len_det(in octetstring stream, out integer len_len) retu * If the callback function detects that the it will be impossible to determine the length of the message, * even receiving more octets, should return "-2". In this case the connection will be closed and the * length calculation error will be reported. */ -private function f_APER_getMsgLen(in octetstring stream, inout ro_integer args) return integer { +private function f_APER_getMsgLen(in octetstring stream, inout Socket_API_Definitions.ro_integer args) return integer { var integer stream_len := lengthof(stream); var integer hdr_len := args[0]; var octetstring stream_nohdr;