Commit aa3111a7 authored by garciay's avatar garciay
Browse files

Add security information (ssp, its-aid) transfer from lower layer to upper layer

Start implementation of ETSI TS 103 V1.0.4 Test Purposes (ETSI TS 103 191-2)
Remove old MapSpat ATS
parent 3737f620
......@@ -9,6 +9,7 @@ module LibItsCam_Templates {
// LibCommon
import from LibCommon_BasicTypesAndValues all;
import from LibCommon_DataStrings all;
// LibIts
import from ITS_Container language "ASN.1:1997" all;
......@@ -68,6 +69,21 @@ module LibItsCam_Templates {
gnTrafficClass := p_gnTrafficClass
};
/**
* @desc Receive template for CA Message (DenmPort Primitive)
* @param p_caMsg The expected CA Message
* @param p_ssp SSP security parameter
* @param p_its_aid ITS-AID value
*/
template CamInd mw_camIndWithSecurityParameters(
template (present) CAM p_camMsg,
template Oct16 p_ssp := *,
template Oct16 p_its_aid := *
) modifies mw_camInd := {
ssp := p_ssp,
its_aid := p_its_aid
};
/**
* @desc Receive template for CAM Message (CamPort Primitive)
* @param p_camMsg Expected CAM Message
......
......@@ -11,6 +11,7 @@ module LibItsCam_TestSystem {
import from LibCommon_Time {modulepar all};
import from LibCommon_Sync all;
import from LibCommon_BasicTypesAndValues all;
import from LibCommon_DataStrings all;
// LibIts
import from CAM_PDU_Descriptions language "ASN.1:1997" all;
......@@ -125,8 +126,8 @@ module LibItsCam_TestSystem {
UInt8 gnTrafficClass optional,
UInt16 btpDestinationPort optional,
UInt16 btpInfo optional,
octetstring ssp optional,
octetstring its_aid optional
Oct16 ssp optional,
Oct16 its_aid optional
}
with {
encode (msgIn) "LibItsCam_asn1"
......
......@@ -9,6 +9,7 @@ module LibItsDenm_Templates {
// LibCommon
import from LibCommon_BasicTypesAndValues all;
import from LibCommon_DataStrings all;
// LibIts
import from ITS_Container language "ASN.1:1997" all;
......@@ -93,6 +94,21 @@ module LibItsDenm_Templates {
gnTrafficClass := p_gnTrafficClass
};
/**
* @desc Receive template for DEN Message (DenmPort Primitive)
* @param p_denMsg The expected DEN Message
* @param p_ssp SSP security parameter
* @param p_its_aid ITS-AID value
*/
template DenmInd mw_denmIndWithSecurityParameters(
template (present) DENM p_denMsg,
template Oct16 p_ssp := *,
template Oct16 p_its_aid := *
) modifies mw_denmInd := {
ssp := p_ssp,
its_aid := p_its_aid
};
/**
* @desc Receive template for DEN Message (DenmPort Primitive)
* @param p_denMsg The expected DEN Message
......
......@@ -11,6 +11,7 @@ module LibItsDenm_TestSystem {
import from LibCommon_Time {modulepar all};
import from LibCommon_Sync all;
import from LibCommon_BasicTypesAndValues all;
import from LibCommon_DataStrings all;
// LibIts
import from DENM_PDU_Descriptions language "ASN.1:1997" all;
......@@ -130,8 +131,8 @@ module LibItsDenm_TestSystem {
UInt8 gnTrafficClass optional,
UInt16 btpDestinationPort optional,
UInt16 btpInfo optional,
octetstring ssp optional,
octetstring its_aid optional
Oct16 ssp optional,
Oct16 its_aid optional
}
with {
encode (msgIn) "LibItsDenm_asn1"
......
......@@ -7,7 +7,7 @@
*/
module LibItsDenm_TypesAndValues {
//LibIts
// LibIts
import from DENM_PDU_Descriptions language "ASN.1:1997" all;
import from ITS_Container language "ASN.1:1997" all;
......@@ -34,6 +34,7 @@ module LibItsDenm_TypesAndValues {
* @desc List of ActionIDs used in behaviours
*/
type record of ActionID ActionIDList;
}
group denmConstants {
......
/**
* @author ETSI / STF517
* @version $URL$
* $Id$
* @desc Module containing functions for IVIM
*
*/
module LibItsIvim_Functions {
// LibCommon
import from LibCommon_Sync all;
import from LibCommon_VerdictControl all;
import from LibCommon_Time all;
// LibItsCommon
import from LibItsCommon_Templates all;
import from LibItsCommon_TypesAndValues all;
import from LibItsCommon_Functions all;
import from LibItsCommon_Pixits all;
// LibItsIvim
import from ITS_Container language "ASN.1:1997" all;
import from IVIM_PDU_Descriptions language "ASN.1:1997" all;
import from IVI language "ASN.1:1997" all;
import from EfcDsrcGeneric language "ASN.1:1997" all;
import from EfcDsrcApplication language "ASN.1:1997" all;
// LibItsIvim
import from LibItsIvim_TestSystem all;
import from LibItsIvim_TypesAndValues all;
import from LibItsIvim_Templates all;
import from LibItsIvim_Pixits all;
group itsFunction {
/**
* @desc Gets the Provifr of test system
* @return Test system's Provider value
* @see PX_PROVIDER
*/
function f_getProvider()
return Provider {
return PX_PROVIDER;
} // end f_getProvider
} // End of group itsFunction
group utFuntions {
/**
* @desc Requests to bring the IUT in an initial state
* @param p_init The initialisation to trigger.
*/
function f_utInitializeIut(template (value) UtInitialize p_init) runs on ItsIvim {
utPort.send(p_init);
tc_wait.start;
alt {
[] utPort.receive(UtInitializeResult:true) {
tc_wait.stop;
log("*** " & testcasename() & ": INFO: IUT initialized ***");
}
[] a_utDefault() {
//empty on purpose
}
[] tc_wait.timeout {
log("*** " & testcasename() & ": INFO: Could not receive expected UT message from IUT in time ***");
f_selfOrClientSyncAndVerdict("error", e_timeout);
}
[else] { // Shortcut defaults
// //f_sleep(0.050); // 50 ms
repeat;
}
}
}
/**
* @desc Triggers an event from the application layer
* @param p_event The event to trigger.
*/
function f_utTriggerEvent(
in template (value) UtIvimTrigger p_event
) runs on ItsIvim return IviIdentificationNumber {
var IviIdentificationNumber v_iviIdentificationNumber;
var UtIvimTriggerResult v_result;
utPort.send(p_event);
tc_wait.start;
alt {
[] utPort.receive(UtIvimTriggerResult:?) -> value v_result {
tc_wait.stop;
v_iviIdentificationNumber := v_result.iviIdentificationNumber;
if ( not v_result.result ) {
f_selfOrClientSyncAndVerdict("IVIM Trigger failed", e_error);
}
}
[] a_utDefault() {
//empty on purpose
}
[] tc_wait.timeout {
log("*** " & testcasename() & ": INFO: Could not receive expected UT message from IUT in time ***");
f_selfOrClientSyncAndVerdict("error", e_timeout);
}
[else] { // Shortcut defaults
// //f_sleep(0.050); // 50 ms
repeat;
}
}
return v_iviIdentificationNumber;
}
/**
* @desc Updates an event at the application layer
* @param p_event The event to update.
*/
function f_utUpdateEvent(
in template (value) UtIvimUpdate p_event
) runs on ItsIvim return IviIdentificationNumber {
var IviIdentificationNumber v_iviIdentificationNumber;
var UtIvimUpdateResult v_result;
utPort.send(p_event);
tc_wait.start;
alt {
[] utPort.receive(UtIvimUpdateResult:?) -> value v_result {
tc_wait.stop;
v_iviIdentificationNumber := v_result.iviIdentificationNumber;
}
[] a_utDefault() {
//empty on purpose
}
[] tc_wait.timeout {
log("*** " & testcasename() & ": INFO: Could not receive expected UT message from IUT in time ***");
f_selfOrClientSyncAndVerdict("error", e_timeout);
}
[else] { // Shortcut defaults
// //f_sleep(0.050); // 50 ms
repeat;
}
}
return v_iviIdentificationNumber;
}
/**
* @desc Terminates an event at the application layer
* @param p_event The event to terminate.
*/
function f_utTerminateEvent(template (value) UtIvimTermination p_event) runs on ItsIvim {
utPort.send(p_event);
tc_wait.start;
alt {
[] utPort.receive(UtIvimTerminationResult:?) {
tc_wait.stop;
}
[] tc_wait.timeout {
log("*** " & testcasename() & ": INFO: Could not receive expected UT message from IUT in time ***");
f_selfOrClientSyncAndVerdict("error", e_timeout);
}
[] a_utDefault() {
//empty on purpose
}
[else] { // Shortcut defaults
// //f_sleep(0.050); // 50 ms
repeat;
}
}
}
} // End of group utFunctions
group adapterControl {
/**
* @desc Triggers event in the test system adaptation.
* @param p_event The event to trigger
* @return FncRetCode
*/
function f_acTriggerGnssEvent(template (value) AcGnssPrimitive p_event) runs on ItsIvim return FncRetCode {
var FncRetCode v_ret := e_success;
acPort.send(p_event);
tc_ac.start;
alt {
[] acPort.receive(m_acGnssResponseSuccess) {
tc_ac.stop;
}
[] acPort.receive {
tc_ac.stop;
log("*** " & __SCOPE__ & ": ERROR: Received unexpected message ***");
f_selfOrClientSyncAndVerdict("error", e_error);
}
[] tc_ac.timeout {
log("*** " & __SCOPE__ & ": ERROR: Timeout while waiting for adapter control event result ***");
f_selfOrClientSyncAndVerdict("error", e_timeout);
}
}
return v_ret;
}
/**
* @desc Loads the given scenario
*
* @param p_scenario The scenario to load.
*/
function f_acLoadScenario(Scenario p_scenario) runs on ItsIvim {
if (PICS_GNSS_SCENARIO_SUPPORT==true) {
f_acTriggerGnssEvent(m_loadScenario(p_scenario));
}
} // end f_acLoadScenario
/**
* @desc Starts a loaded scenario
*/
function f_acStartScenario() runs on ItsIvim {
if (PICS_GNSS_SCENARIO_SUPPORT==true) {
f_acTriggerGnssEvent(m_startScenario);
vc_scenarioStarted := true;
}
} // end f_acStartScenario
/**
* @desc Stops a loaded scenario
*/
function f_acStopScenario() runs on ItsIvim {
if (PICS_GNSS_SCENARIO_SUPPORT==true and vc_scenarioStarted==true) {
f_acTriggerGnssEvent(m_stopScenario);
vc_scenarioStarted := false;
}
} // end f_acStopScenario
function f_acAwaitDistanceCovered(float p_distanceToCover) runs on ItsIvim return FncRetCode {
var FncRetCode v_ret := e_success;
if (PICS_GNSS_SCENARIO_SUPPORT==true and vc_scenarioStarted==true) {
f_acTriggerGnssEvent(m_distanceToCover(p_distanceToCover));
tc_ac.start;
alt {
[] acPort.receive(m_acGnssDistanceCovered) {
tc_ac.stop;
}
[] acPort.receive {
tc_ac.stop;
log("*** " & __SCOPE__ & ": ERROR: Received unexpected message ***");
f_selfOrClientSyncAndVerdict("error", e_error);
}
[] tc_ac.timeout {
log("*** " & __SCOPE__ & ": ERROR: Timeout while waiting for covered distance indication ***");
f_selfOrClientSyncAndVerdict("error", e_timeout);
}
}
}
return v_ret;
} // end f_acAwaitDistanceCovered
} // End of group adapterControl
group ivimConfigurationFunctions {
/**
* @desc Setups default configuration
*/
function f_cfUp() runs on ItsIvim system ItsIvimSystem {
map(self:acPort, system:acPort);
map(self:utPort, system:utPort);
map(self:ivimPort, system:ivimPort);
f_connect4SelfOrClientSync();
} // end f_cfUp
/**
* @desc Deletes default configuration
*/
function f_cfDown() runs on ItsIvim system ItsIvimSystem {
unmap(self:acPort, system:acPort);
unmap(self:utPort, system:utPort);
unmap(self:ivimPort, system:ivimPort);
f_disconnect4SelfOrClientSync();
} // end f_cfDown
} //end ivimConfigurationFunctions
group altsteps {
/**
* @desc The base default.
*/
altstep a_default() runs on ItsIvim {
[] ivimPort.receive(
mw_ivimInd(
mw_ivimPdu(
mw_ivimStructure
))) {
log("*** " & testcasename() & ": INFO: IVIM message received in default ***");
vc_ivimReceived := true;
repeat;
}
[] ivimPort.receive {
log("*** " & testcasename() & ": ERROR: Received an unexpected message ***");
f_selfOrClientSyncAndVerdict("error", e_error);
}
[] tc_wait.timeout {
log("*** " & testcasename() & ": INCONC: Timeout while awaiting reaction of the IUT prior to Upper Tester action ***");
f_selfOrClientSyncAndVerdict("error", e_timeout);
}
[] tc_ac.timeout {
log("*** " & testcasename() & ": INCONC: Timeout while awaiting the reception of a message ***");
f_selfOrClientSyncAndVerdict("error", e_timeout);
}
[] a_shutdown() {
f_poDefault();
f_cfDown();
log("*** " & testcasename() & ": INFO: TEST COMPONENT NOW STOPPING ITSELF! ***");
stop;
}
}
/**
* @desc The default for handling upper tester messages.
*/
altstep a_utDefault() runs on ItsIvim {
var UtIvimEventInd v_event;
[] utPort.receive(UtIvimEventInd:?) -> value v_event {
//store every upper tester indication received
vc_utEvents[lengthof(vc_utEvents)] := v_event;
repeat;
}
[] utPort.receive {
log("*** " & testcasename() & ": INFO: Received unhandled/unknown UT message from IUT ***");
repeat;
}
}
} // End of group altsteps
group preambles {
/**
* @desc The default preamble.
*/
function f_prDefault() runs on ItsIvim {
vc_default := activate(a_default());
activate(a_utDefault());
}
/**
* @desc Brings the IUT into an initial state.
* @return FncRetCode
*/
function f_prInitialState(Scenario p_scenario := e_staticPosition) runs on ItsIvim return FncRetCode {
var FncRetCode v_ret := e_success;
f_utInitializeIut(m_ivimStructureInitialize);
f_acLoadScenario(valueof(p_scenario));
f_acStartScenario();
f_prDefault();
return v_ret;
}
} // End of group preambles
group postambles {
/**
* @desc The default postamble.
*/
function f_poDefault() runs on ItsIvim {
var FncRetCode v_ret := e_success;
f_acStopScenario();
}
/**
* @desc Postamble including cancellation of an event.
* @param p_trigger Indicates if the cancellation have to be raised by the test system(e_ets)
* or at the application layer of the IUT(e_iut).
* @param p_actionId The action ID of the event to be cancelled
*/
function f_poCancelEvent(
in template (value) Trigger p_trigger,
in template (value) IviIdentificationNumber p_iviIdentificationNumber
) runs on ItsIvim {
var FncRetCode v_ret := e_success;
if (valueof(p_trigger) == e_ets) {
f_sendIviMessage(m_ivimStructureCancellation(p_iviIdentificationNumber));
f_sleep(PX_TNOAC);
}
else {
f_utTerminateEvent(m_utEventCancellation(p_iviIdentificationNumber));
}
f_poDefault();
}
} // End of group postambles
group sendFunctions {
/**
* @desc Sends a IVI message
* @param p_sendMsg The IVI message to send.
* @param p_overrideSeqNo Overrides the sequence number with the stored one.
*/
function f_sendIviMessage(
in template (value) IviStructure p_ivim
) runs on ItsIvim {
ivimPort.send(
m_ivimStructureReq(
m_ivimStructurePdu(
p_ivim
)
)
);
}
} // end sendFunctions
group receiveFunctions {
/**
* @desc Awaits a IVI message and returns it
* @param p_rcvMsg The expected message to be received.
* @param p_rcvdMsg The received message - OUT.
*/
function f_awaitIviMessage(in template (present) IvimInd p_rcvMsg, out IvimInd p_rcvdMsg) runs on ItsIvim {
tc_ac.start;
alt {
[] ivimPort.receive(p_rcvMsg) -> value p_rcvdMsg {
tc_ac.stop;
}
[] tc_ac.timeout {
log("*** " & testcasename() & ": INFO: Timeout while awaiting the reception of a message ***");
f_selfOrClientSyncAndVerdict("error", e_timeout);
}
}
}
} // end receiveFunctions
group miscellaneousFunctions {
/**
* @desc Increases the IviIdentification number and handles the special case where the
* IviIdentification number reaches the limit of 32768 and will be reset to 0.
* @param p_iviIdentificationNumber The IviIdentification number to increase.
* @return The increased IviIdentification number.
*/
function f_increaseIviIdentificationNumber(in IviIdentificationNumber p_iviIdentificationNumber) return IviIdentificationNumber {
// if maximum number of 32768 reached, reset it to 0
return ((p_iviIdentificationNumber + 1) mod 32768);
}
} // End of group miscellaneousFunctions
} // End of module LibItsIvim_Functions
\ No newline at end of file
/**
* @author ETSI / STF517
* @version $URL$
* $Id$
* @desc IVIM PICS
*
*/
module LibItsIvim_Pics {
group ivimPics {
/**
* @desc Does the IUT act as Road Side Unit?
* @see ETSI TS 103 191-1 Table 3
*/
modulepar boolean PICS_RSU_ROLE := true;
/**
* @desc Support for IVIM generation
* @see ETSI TS 103 191-1 Table 3
*/
modulepar boolean PICS_IVIM_GENERATION := true;