/** * @author ETSI / STF422_EETS * @version $URL:$ * $Id:$ * @desc Inter-ITS-SCU communications (ISO 24102-4) functions */ module LibItsMgt_Functions { // LibCommon import from LibCommon_BasicTypesAndValues { const c_uInt8Max; }; import from LibCommon_Sync { function f_selfOrClientSyncAndVerdict, f_selfOrClientSyncAndVerdictPreamble }; import from LibCommon_VerdictControl all; // LibIts import from CALMllsap language "ASN.1:1997" { type MedType, CIaClass, CIclass }; import from CALMmanagement language "ASN.1:1997" { type ITS_scuId }; import from CALMiitsscu language "ASN.1:1997" { type IIC_Request, ITS_SCUtype, PduCounter }; import from CALMmsap language "ASN.1:1997" { type CommandRef, MN_Request_request, FWTupdate, MF_Request_request }; import from CALMfsap language "ASN.1:1997" { type GCregServer, GCregClient, GCderegClient, GCctxTxCmd, CTXrxNot }; import from LibItsMgt_Templates all; import from LibItsMgt_Pixits all; import from LibIts_Interface { type IiscReq, IiscResp, ItsMgt, MgtMNSapCommandReq }; group functions { /** * @desc Triggers a request command event in the test system adaptation. * @param p_requestRequest The remote commad to trigger * @return FncRetCode */ function f_mgtMFTriggerRequest( in template (value) MF_Request_request p_requestRequest ) runs on ItsMgt return FncRetCode { var FncRetCode v_ret := e_success; mgtMFSapPort.send(m_mgtMFSapRequestReq(p_requestRequest)); return v_ret; } } // End of group functions group mgtAltsteps { group mfSap { /** * @desc The base default. * @see ISO/CD 24102-3 Clause 8.2 */ altstep a_mgtMFSapPortDefault() runs on ItsMgt { [] mgtMFSapPort.receive(mw_mgtMFSapCommandReq(mw_mfCommandRequest_any)) { // Receive any MF-COMMAND.request message log("*** a_mgtMFSapPortDefault: INFO: MF-SAP service primitive received in default ***"); repeat; } [] mgtMFSapPort.receive(mw_mgtMFSapRequestReq(mw_mfRequestRequest_any)) { // Receive any MF-COMMAND.request message log("*** a_mgtMFSapPortDefault: INFO: MF-SAP service primitive received in default ***"); repeat; } // FIXME Add support of response to CommandRequest & RequestRequest // [] mgtMFSapPort.receive(mw_mgtMFSapCommandInd(mw_mfCommandRequest_any)) { // Receive any MF-COMMAND.request message // log("*** a_mgtMFSapPortDefault: INFO: MF-SAP service primitive received in default ***"); // repeat; // } [] mgtMFSapPort.receive(mw_mgtMFSapRequestConfirm(mw_mfRequestConfirm(0))) { // Receive any MF-REQUEST.confirm message with success status log("*** a_mgtMFSapPortDefault: INFO: MF-SAP service primitive received in default ***"); repeat; } [] mgtMFSapPort.receive(mw_mgtMFSapRequestConfirm(mw_mfRequestConfirm(?))) { // Receive any MF-REQUEST.confirm message with error status f_selfOrClientSyncAndVerdict("error", e_error); log("*** a_mgtMFSapPortDefault: ERROR: Received MF-SAP error status ***"); } [] mgtMFSapPort.receive { // Receive unknown message f_selfOrClientSyncAndVerdict("error", e_error); log("*** a_mgtMFSapPortDefault: ERROR: Event received on MgtMFSapPort port in default ***"); } } // End of altstep a_mgtMFSapPortDefault // /** // * @desc Wait for REQUEST.confirm/GCregServer MF-REQUEST.confirm // * @param p_commandRef Unique cyclic reference number of command. Same value as in related MN-REQUEST.request // * @verdict Unchanged // */ // altstep a_mgtAwaitGCregServerReqConf(in CommandRef p_commandRef) runs on ItsMgt { // // [] mgtMFSapPort.receive(mw_mgtMFSapRequestConfirm(mdw_gCregServerRequestConf(p_commandRef))) { // log("*** a_mgtAwaitGCregServerReqConf: INFO: MF-SAP GCregServer service primitive received ***"); // repeat; // } // } // End of altstep a_mgtAwaitGCregServerReqConf } // End of group mfSap group mnSap { /** * @desc The base default. * @see ISO/CD 24102-3 Clause 8.2 */ altstep a_mgtMNSapPortDefault() runs on ItsMgt { [] mgtMNSapPort.receive(mw_mgtMNSapCommandConfirm(mw_mnCommandConfirm_any)) { // Receive any MF-COMMAND.confirm message log("*** a_mgtMNSapPortDefault: INFO: MN-SAP service primitive MF-COMMAND.confirm received in default ***"); repeat; } [] mgtMNSapPort.receive(mw_mgtMNSapRequestConfirm(mw_mnRequestConfirm_any)) { // Receive any MF-REQUEST.confirm message log("*** a_mgtMNSapPortDefault: INFO: MN-SAP service primitive MF-REQUEST.confirm received in default ***"); repeat; } [] mgtMNSapPort.receive(mw_mgtMNSapRequestReq(mw_mnRequestRequest_any)) { // Receive any MF-REQUEST.request message log("*** a_mgtMNSapPortDefault: INFO: MN-SAP service primitive MF-REQUEST.request received in default ***"); repeat; } [] mgtMNSapPort.receive { // Receive unknown message log("*** a_mgtMNSapPortDefault: ERROR: event received on MgtMNSapPort port in default ***"); f_selfOrClientSyncAndVerdict("error", e_error); } } // End of altstep a_mgtMNSapPortDefault /** * @desc Wait for MN_COMMAND/FWTupdate message * @verdict Unchanged * @see ISO/WD 24102-3 - Clause D.2.4 FWTupdate */ altstep a_mgtSapAwaitFWTupdate() runs on ItsMgt { var MgtMNSapCommandReq v_fWTupdate; [] mgtMNSapPort.receive(mw_mgtMNSapCommandReq(mw_fWTUpdateCommandReq)) -> value v_fWTupdate { // TODO Check if vc_noFNTPfwtEntry is used //vc_noFNTPfwtEntry := v_fWTupdate.msgIn.command_param.mnCmd.fWTupdate.update.fntp.reference; log("*** a_mgtSapAwaitFWTupdate: INFO: MN-SAP FWTupdate service primitive received: vc_noFNTPfwtEntry=" & int2str(vc_noFNTPfwtEntry) & " ***"); } } // End of altstep a_mgtSapAwaitFWTupdate /** * @desc Wait for a notification of creation of an entry in a forwarding table. * @see ISO/WD 24102-3 Clause E.2.2 FWTsetNot * @verdict Unchanged */ altstep a_mgtAwaitFWTsetNot() runs on ItsMgt { [] mgtMNSapPort.receive(mw_mgtMNSapRequestReq(mdw_fWTSetNotRequestReq)) { log("*** a_mgtAwaitFWTsetNot: INFO: MN-SAP FWTupdateNot service primitive received ***"); } } // End of altstep a_mgtAwaitFWTsetNot /** * @desc Wait for creation of an entry in a forwarding table. * @see ISO/WD 24102-4 Clause D.2.3 FWTset * @verdict Unchanged */ altstep a_mgtAwaitFWTset() runs on ItsMgt { [] mgtMNSapPort.receive(mw_mgtMNSapCommandReq(mw_fWTSetCommandReq)) { log("*** a_mgtAwaitFWTset: INFO: MN-SAP FWTupdateNot service primitive received ***"); } } // End of altstep a_mgtAwaitFWTset } // End of group mnSap } // End of group mgtAltsteps group iiscFunctions { /** * @desc Triggers a request command event in the test system adaptation. * @param p_rCmd The remote commad to trigger * @return FncRetCode */ function f_iiscTriggerRequest( in template (value) IIC_Request p_rCmd ) runs on ItsMgt return FncRetCode { var FncRetCode v_ret := e_success; iiscPort.send(m_iiscReq(p_rCmd)); return v_ret; } } // End of group iiscFunctions group iiscAltsteps { // /** // * @desc Trap for not processed IICP message // * @verdict Unchanged // */ // altstep a_iiscAwaitFWTupdateNot( // in template (value) ITS_scuId p_sourceITS_scuId, // in template (value) ITS_scuId p_destinationITS_scuId, // in template (value) PduCounter p_pduCounter // ) runs on ItsMgt { // [] iiscPort.receive(//mw_iiscResp(mdw_fWTupdateNotRequestReq)) { // mw_iiscResp( // mw_iiscMnRequestReq( // p_sourceITS_scuId, // p_destinationITS_scuId, // p_pduCounter, // mdw_fWTupdateNotRequestReq))) { // log("*** a_iiscAwaitFWTupdateNot: INFO: IISC FWTupdateNot service primitive received ***"); // repeat; // } // } // End of function a_iiscAwaitFWTupdateNot /** * @desc Inter-ITS-SCU communications MN-rreq (see ISO/CD 24102-5) with payload MN-Request "SAMrxNot" (see ISO/CD 24102-3 & ISO/CD 24102-5) * @param p_sourceITS-scuId ITS-SCU-ID of the source ITS-SCU which produces the request * @param p_destinationITS-scuId ITS-SCU-ID of the destination ITS-SCU which shall evaluate the request * @param p_pduCounter Even number generated fro a cyclic counter at the ITS-SCU * @param p_mn_rreq The MN-REQUEST.request/SAMrxNot to be forwarded * @verdict Unchanged */ // altstep a_iiscAwaitSAMrxNotRequestReq( // in template (value) ITS_scuId p_sourceITS_scuId, // in template (value) ITS_scuId p_destinationITS_scuId, // in template (value) PduCounter p_pduCounter, // in template (value) MN_Request_request p_mn_rreq // FIXME Replace MN_Request_request by SAMrxNot template // ) runs on ItsMgt { // [] iiscPort.receive( // mw_iiscResp( // mw_iiscMnRequestReq( // p_sourceITS_scuId, // p_destinationITS_scuId, // p_pduCounter, // p_mn_rreq))) { // Receive MN-REQUEST.request/SAMrxNot message // log("*** a_iiscAwaitSAMrxNotRequestReq: INFO: Remote command service primitive received in default ***"); // repeat; // } // } // End of altstep a_iiscAwaitSAMrxNotRequestReq /** * @desc Inter-ITS-SCU communications MN-rreq (see ISO/WD 24102-4) with payload MN-Request "CTXrxNot" (see ISO/CD 24102-3 & ISO/CD 24102-5) * @param p_sourceITS-scuId ITS-SCU-ID of the source ITS-SCU which produces the request * @param p_destinationITS-scuId ITS-SCU-ID of the destination ITS-SCU which shall evaluate the request * @param p_pduCounter Even number generated fro a cyclic counter at the ITS-SCU * @param p_mn_rcmd The MN-REQUEST.request/SAMrxNot to be forwarded * @verdict Unchanged */ // altstep a_iiscAwaitCTXrxNotRequestReq( // in template (value) ITS_scuId p_sourceITS_scuId, // in template (value) ITS_scuId p_destinationITS_scuId, // in template (value) PduCounter p_pduCounter, // in template (value) MN_Request_request p_mn_rreq // FIXME Replace MN_Request_request by CTXrxNot template // ) runs on ItsMgt { // [] iiscPort.receive(mw_iiscResp(mw_iiscMnRequestReq( // p_sourceITS_scuId, // p_destinationITS_scuId, // p_pduCounter, // p_mn_rreq))) { // Receive MN-REQUEST.request/CTXrxNot message // log("*** a_iiscAwaitCTXrxNotRequestReq: INFO: Remote command service primitive received in default ***"); // repeat; // } // } // End of altstep a_iiscAwaitCTXrxNotRequestReq /** * @desc Trap for not processed IICP message. * @verdict Set to fail on unknown message */ altstep a_iiscDefault() runs on ItsMgt { // FIXME To be removed if we have not to check remote command request // [] iiscPort.receive(mw_iiscReq(mw_iiscRequest_any)) { // Receive any IIC-Request message // log("*** a_iiscDefault: INFO: Remote IIC-Request command service primitive received in default ***"); // repeat; // } [] iiscPort.receive(mw_iiscResp(mw_iiscResponse_any)) { // Receive any IIC-Response message log("*** a_iiscDefault: INFO: Remote IIC-Response command service primitive received in default ***"); repeat; } [] iiscPort.receive { // Receive unknown message log("*** a_iiscDefault: ERROR: event received on IISC port in default ***"); f_selfOrClientSyncAndVerdict("error", e_error); } } // End of altstep a_iiscDefault } // End of group iiscAltsteps group preambule { // /** // * @desc TODO // * // * @see ISO/CD 29281-2 Clause 7.8.1 // */ // function f_fntpForwardingTableRegisterEntry() runs on ItsMgt { // var PduCounter v_pduCounter; // var CommandRef v_commandRef; // // // Get a pdu counter value // v_pduCounter := f_getNextPduCounter(); // v_commandRef := f_getNextCommandRef(); // // // Send FWSet MN-COMMAND // iiscPort.send(m_iiscReq( // m_remoteMnCommandRequest( // PX_SRC_ITS_SCU_ID, // PX_DST_ITS_SCU_ID, // v_pduCounter, // m_mnCommandRequest( // v_commandRef, // m_mnFWTSet( // PX_HOST_CIID, // PX_HOST_SCU_ID, // PX_REMOTE_PORT, // PX_HOST_SCU_ID, // PX_USER_PRIORITY))))); // tc_ac.start; // alt { // [] iiscPort.receive(mw_iiscResp( // mw_mnCommandConfirm( // PX_DST_ITS_SCU_ID, // PX_SRC_ITS_SCU_ID, // v_pduCounter + 1, // ISO/WD 24102-4 - Clause 6.2.1 // mw_mnCommandConfirmAny // FIXME Use a more restrictive template // ))) { // tc_ac.stop; // } // [] tc_ac.timeout { // log("*** f_fntpForwardingTableRegisterEntry: INCONC: Pre-conditions: Failed to initialize FNTP Forwarding Table ***"); // f_selfOrClientSyncAndVerdictPreamble("error", e_timeout); // } // } // End of 'alt' statement // // } // End of function f_fntpForwardingTableRegisterEntry } // End of group preambule group testerFunctions { /** * @desc Increments the pdu counter and returns the new value * @return The new pdu counter value * * @see ISO/WD 24102-4 - Clause 6.2.1 */ function f_getNextPduCounter() runs on ItsMgt return PduCounter { vc_pduCounter := (vc_pduCounter + 2) mod (c_uInt8Max - 1); // ISO/WD 24102-4 - Clause 6.2.1: modulus 254 return vc_pduCounter; } // End of function f_getNextPduCounter /** * @desc Increments the commandRef value and returns it * @return The new commandRef value */ function f_getNextCommandRef() runs on ItsMgt return CommandRef { vc_commandRef := (vc_commandRef + 1) mod (c_uInt8Max + 1); return vc_commandRef; } // End of function f_getNextCommandRef } // End of group testerFunctions group iutFunctions { /** * @desc TODO * @return TODO * @verdict Unchanged * @see PX_SRC_ITS_SCU_ID */ function f_getIutSourceITS_scuId() return ITS_scuId { return PX_SRC_ITS_SCU_ID; } /** * @desc TODO * @return TODO * @verdict Unchanged * @see PX_DST_ITS_SCU_ID */ function f_getIutDestITS_scuId() return ITS_scuId { return PX_DST_ITS_SCU_ID; } /** * @desc TODO * @return TODO * @verdict Unchanged * @see PX_SRC_ITS_SCU_TYPE */ function f_getIutSourceITS_scuType() return ITS_SCUtype { return PX_SRC_ITS_SCU_TYPE; } /** * @desc TODO * @return TODO * @verdict Unchanged * @see PX_MED_TYPE */ function f_getIutMedType() return MedType { return PX_MED_TYPE; } /** * @desc TODO * @return TODO * @verdict Unchanged * @see PX_CIACLASS */ function f_getIutCIaClass() return CIaClass { return PX_CIACLASS; } /** * @desc TODO * @return TODO * @verdict Unchanged * @see PX_CICLASS */ function f_getIutCIClass() return CIclass { return PX_CICLASS; } } // End of group iutFunctions } // End of module LibItsMgt_Functions