Skip to content
LibItsMgt_Functions.ttcn3 10.8 KiB
Newer Older
garciay's avatar
garciay committed
/**
 *  @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 CALMiitsscu language "ASN.1:1997" { 
        type 
            PduCounter 
    }; 
    import from CALMllsap language "ASN.1:1997" {
        type 
            MedType, CIaClass, CIclass 
    }; 
garciay's avatar
garciay committed
    import from CALMmanagement language "ASN.1:1997" {
        type 
            ITS_scuId
    };
    import from CALMmsap language "ASN.1:1997" {
        type 
            CommandRef, 
            MN_Request_request, FWTupdate, 
            MF_Request_request 
garciay's avatar
garciay committed
    };
//    import from CALMfsap language "ASN.1:1997" {
//        type
//            GCregServer, GCregClient, GCderegClient, GCctxTxCmd, CTXrxNot
//    };
garciay's avatar
garciay committed
    import from LibItsMgt_Templates all;
    import from LibItsMgt_Pixits all;
    import from LibIts_Interface {
        type 
            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
    
garciay's avatar
garciay committed
    group mgtAltsteps {
        
        group mfSap {
            
            /**
             * @desc The base default.
             * @see ISO/CD 24102-3 Clause 8.2
garciay's avatar
garciay committed
             */
            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
garciay's avatar
garciay committed
//                [] 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 ***");
                }
garciay's avatar
garciay committed
                [] mgtMFSapPort.receive { // Receive unknown message
                    f_selfOrClientSyncAndVerdict("error", e_error);
                    log("*** a_mgtMFSapPortDefault: ERROR: Event received on MgtMFSapPort port in default ***");
garciay's avatar
garciay committed
                }
            } // 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))) {
garciay's avatar
garciay committed
//                    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
garciay's avatar
garciay committed
             */
            altstep a_mgtMNSapPortDefault() runs on ItsMgt {
                [] mgtMNSapPort.receive(mw_mgtMNSapCommandConfirm(mw_mnCommandConfirm_any)) { // Receive any MF-COMMAND.confirm message
garciay's avatar
garciay committed
                    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
garciay's avatar
garciay committed
                    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
garciay's avatar
garciay committed
                    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
garciay's avatar
garciay committed
             */
            altstep a_mgtSapAwaitFWTupdate() runs on ItsMgt { 
                var MgtMNSapCommandReq v_fWTupdate;
                [] mgtMNSapPort.receive(mw_mgtMNSapCommandReq(mw_fWTUpdateCommandReq)) -> value v_fWTupdate {
garciay's avatar
garciay committed
                    // TODO Check if vc_noFNTPfwtEntry is used
                    //vc_noFNTPfwtEntry := v_fWTupdate.msgIn.command_param.mnCmd.fWTupdate.update.fntp.reference;
garciay's avatar
garciay committed
                    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
garciay's avatar
garciay committed
             * @verdict Unchanged
             */
            altstep a_mgtAwaitFWTsetNot() runs on ItsMgt {
                
                [] mgtMNSapPort.receive(mw_mgtMNSapRequestReq(mdw_fWTSetNotRequestReq)) {
                    log("*** a_mgtAwaitFWTsetNot: INFO: MN-SAP FWTupdateNot service primitive received ***");
garciay's avatar
garciay committed
                }
            } // 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
garciay's avatar
garciay committed
            
        } // End of group mnSap
        
    } // End of group mgtAltsteps
    
    
    group preambule {
        
    } // 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
garciay's avatar
garciay committed
         */
        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
         */
garciay's avatar
garciay committed
        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
         */
garciay's avatar
garciay committed
        function f_getIutDestITS_scuId() return ITS_scuId {
            return PX_DST_ITS_SCU_ID;
        }
        
        /**
         * @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; 
        }
        
garciay's avatar
garciay committed
    } // End of group iutFunctions
    
} // End of module LibItsMgt_Functions