Newer
Older
* @author ETSI / STF405
* @version $URL$
* $Id$
* @desc Module containing functions for GeoNetworking
// Libcommon
import from LibCommon_BasicTypesAndValues all;
import from LibCommon_VerdictControl {type FncRetCode;}
import from LibCommon_Sync {altstep all};
// LibIts
import from LibIts_TestSystem all;
import from LibIts_Interface all;
* @desc Create Facility component and connects GeoNetworking port
* @remark Only used when ItsFa is a PTC
* @param p_ptcDenm returned Facility component variable
function f_ptcGeoNetworkingUp(out ItsNt p_ptcGeoNetworking) {
p_ptcGeoNetworking := ItsNt.create("GeoNetworking Tester");
// map ports
map(p_ptcGeoNetworking:geoNetworkingPort, system:geoNetworkingPort);
* @desc Wait for component to finish and unmap GeoNetworking ports
* @remark Only used when ItsFa is a PTC
* @param p_camPtc Facility component variable
function f_ptcGeoNetworkingDown(in ItsNt p_ptcGeoNetworking) runs on ItsMtc {
log("*** f_ptcGeoNetworkingDown: ERROR: Timeout while waiting for component ***");
setverdict(inconc);
}
}
unmap(p_ptcGeoNetworking:geoNetworkingPort);
group geoConfigurationFunctions {
/**
* @desc This configuration features:
* - one ITS node (IUT)
* - two ITS nodes (nodeA, nodeB)
* - Area1 which only includes NodeB and IUT
* - Area2 which only includes NodeB
* NodeB being close to the area center
*/
function f_cf01Up() runs on ItsNt {
// Variables
var PositionTable v_positionTable := {};
// Map
map(self:geoNetworkingPort, system:geoNetworkingPort);
// Position table
f_addPosition(v_positionTable, c_compIut, f_getIutLongPosVector());
f_addPosition(v_positionTable, c_compNodeA, f_computePosition());
f_addPosition(v_positionTable, c_compNodeB, f_computePosition());
f_initialiseComponent(v_positionTable, c_compNodeB);
} // end f_cf01Up
*/
function f_cf01Down() runs on ItsNt {
// Map
unmap(self:geoNetworkingPort, system:geoNetworkingPort);
} // end f_cf01Down
/**
* @desc This configuration features:
* - one ITS node (IUT)
* - one ITS node (NodeB)
* - one ITS node (NodeD)
* - Area1 which only includes NodeB, NodeD and IUT
* - Area2 which only includes NodeB and NodeD
* NodeB being close to the area center
function f_cf02Up(out ItsNt p_nodeB, out ItsNt p_nodeD) runs on ItsMtc {
// Variables
var PositionTable v_positionTable := {};
// Create
p_nodeB := ItsNt.create(c_compNodeB) alive;
// Map
map(p_nodeB:geoNetworkingPort, system:geoNetworkingPort);
map(p_nodeD:geoNetworkingPort, system:geoNetworkingPort);
// Connect
connect(p_nodeB:syncPort, self:syncPort);
// Position table
f_addPosition(v_positionTable, c_compIut, f_getIutLongPosVector());
f_addPosition(v_positionTable, c_compNodeB, f_computePosition());
f_addPosition(v_positionTable, c_compNodeD, f_computePosition());
p_nodeB.start(f_initialiseComponent(v_positionTable, c_compNodeB));
p_nodeD.start(f_initialiseComponent(v_positionTable, c_compNodeD));
p_nodeD.done;
p_nodeD.done;
function f_cf02Down(in ItsNt p_nodeB, in ItsNt p_nodeD) runs on ItsMtc {
// Map
unmap(p_nodeB:geoNetworkingPort, system:geoNetworkingPort);
unmap(p_nodeD:geoNetworkingPort, system:geoNetworkingPort);
// Connect
disconnect(p_nodeB:syncPort, self:syncPort);
} // end f_cf02Down
/**
* @desc This configuration features:
* - one ITS node (IUT)
* - one ITS node (NodeA)
* - one ITS node in direction of NodeA (NodeB)
* - one ITS node not in direction of NodeA (NodeC)
* - Area1 which only includes NodeB and IUT
* - Area2 which only includes NodeB
* NodeB being close to the area center
function f_cf03Up(out ItsNt p_nodeB, out ItsNt p_nodeC) runs on ItsMtc {
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
// Variables
var PositionTable v_positionTable := {};
// Create
p_nodeB := ItsNt.create(c_compNodeB) alive;
p_nodeC := ItsNt.create(c_compNodeC) alive;
// Map
map(p_nodeB:geoNetworkingPort, system:geoNetworkingPort);
map(p_nodeC:geoNetworkingPort, system:geoNetworkingPort);
// Connect
connect(p_nodeB:syncPort, self:syncPort);
connect(p_nodeC:syncPort, self:syncPort);
// Position table
f_addPosition(v_positionTable, c_compIut, f_getIutLongPosVector());
f_addPosition(v_positionTable, c_compNodeA, f_computePosition());
f_addPosition(v_positionTable, c_compNodeB, f_computePosition());
f_addPosition(v_positionTable, c_compNodeC, f_computePosition());
p_nodeB.start(f_initialiseComponent(v_positionTable, c_compNodeB));
p_nodeC.start(f_initialiseComponent(v_positionTable, c_compNodeC));
p_nodeB.done;
p_nodeC.done;
} // end f_cf03Up
/**
* @desc Deletes configuration cf03
* @param p_nodeA
* @param p_nodeB
* @param p_nodeC
*/
function f_cf03Down(in ItsNt p_nodeB, in ItsNt p_nodeC) runs on ItsMtc {
// Map
unmap(p_nodeB:geoNetworkingPort, system:geoNetworkingPort);
unmap(p_nodeC:geoNetworkingPort, system:geoNetworkingPort);
// Connect
disconnect(p_nodeB:syncPort, self:syncPort);
disconnect(p_nodeC:syncPort, self:syncPort);
} // end f_cf03Down
/**
* @desc This configuration features:
* - one ITS node (IUT)
* - one ITS node (NodeA)
* - one ITS node in direction of NodeA and having
* shortest distance to NodeA (NodeB)
* - one ITS node in direction of NodeA (NodeD)
* - one ITS node not in direction of NodeA (NodeC)
* - Area1 which only includes NodeB, NodeD and IUT
* - Area2 which only includes NodeA, NodeB and NodeD
* NodeB being close to the area center
function f_cf04Up(out ItsNt p_nodeB, out ItsNt p_nodeC, out ItsNt p_nodeD) runs on ItsMtc {
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
// Variables
var PositionTable v_positionTable := {};
// Create
p_nodeB := ItsNt.create(c_compNodeB) alive;
p_nodeC := ItsNt.create(c_compNodeC) alive;
p_nodeD := ItsNt.create(c_compNodeD) alive;
// Map
map(p_nodeB:geoNetworkingPort, system:geoNetworkingPort);
map(p_nodeC:geoNetworkingPort, system:geoNetworkingPort);
map(p_nodeD:geoNetworkingPort, system:geoNetworkingPort);
// Connect
connect(p_nodeB:syncPort, self:syncPort);
connect(p_nodeC:syncPort, self:syncPort);
connect(p_nodeD:syncPort, self:syncPort);
// Position table
f_addPosition(v_positionTable, c_compIut, f_getIutLongPosVector());
f_addPosition(v_positionTable, c_compNodeA, f_computePosition());
f_addPosition(v_positionTable, c_compNodeB, f_computePosition());
f_addPosition(v_positionTable, c_compNodeC, f_computePosition());
f_addPosition(v_positionTable, c_compNodeD, f_computePosition());
p_nodeB.start(f_initialiseComponent(v_positionTable, c_compNodeB));
p_nodeC.start(f_initialiseComponent(v_positionTable, c_compNodeC));
p_nodeD.start(f_initialiseComponent(v_positionTable, c_compNodeD));
p_nodeB.done;
p_nodeC.done;
p_nodeD.done;
} // end f_cf04Up
/**
* @desc Deletes configuration cf04
* @param p_nodeB
* @param p_nodeC
* @param p_nodeD
*/
function f_cf04Down(in ItsNt p_nodeB, in ItsNt p_nodeC, in ItsNt p_nodeD) runs on ItsMtc {
// Map
unmap(p_nodeB:geoNetworkingPort, system:geoNetworkingPort);
unmap(p_nodeC:geoNetworkingPort, system:geoNetworkingPort);
unmap(p_nodeD:geoNetworkingPort, system:geoNetworkingPort);
// Connect
disconnect(p_nodeB:syncPort, self:syncPort);
disconnect(p_nodeC:syncPort, self:syncPort);
disconnect(p_nodeD:syncPort, self:syncPort);
} // end f_cf04Down
function f_initialiseComponent(
in PositionTable p_positionTable,
in charstring p_componentName)
runs on ItsNt {
vc_positionTable := p_positionTable;
vc_componentName := p_componentName;
} // end f_initialiseComponent
function f_startBeingNeighbour() runs on ItsNt {
activate(a_neighbourDefault());
tepelmann
committed
f_acTriggerEvent(m_startBeaconing(m_beaconHeader(f_getPosition(vc_componentName)).beaconHeader));
} // end f_startBeingNeighbour
function f_stopBeingNeighbour() runs on ItsNt {
tepelmann
committed
f_acTriggerEvent(m_stopBeaconing(vc_componentName));
deactivate; // FIXME: probably too brutal
activate(a_default());
} // end f_stopBeingNeighbour
} // end geoConfigurationFunctions
group geoPositionFunctions {
function f_addPosition(
in LongPosVector p_positionValue
) {
key := p_positionKey,
position := p_positionValue
};
in charstring p_positionKey
) runs on ItsNt
return LongPosVector {
var LongPosVector v_return;
var integer i := 0;
for (i:=0; i<lengthof(vc_positionTable); i:=i+1) {
if (vc_positionTable[i].key == p_positionKey) {
v_return := vc_positionTable[i].position;
}
}
return v_return;
}
/**
* @desc Gives the IUT position within the minimum update frequency of local position vector (LPV) in ms
* @see PICS_GN_MINIMUM_UPDATE_FREQUENCY_LPV
*/
function f_getPositionWithinMinUpdateFreq(
in PositionTable p_positionTable,
in charstring p_positionKey)
return LongPosVector {
var LongPosVector v_return := valueof(m_dummyLongPosVector);
// TODO
return v_return;
}
function f_computePosition() return LongPosVector {
var LongPosVector v_return := valueof(m_dummyLongPosVector);
// TODO
return v_return;
}
function f_getArea(in GeoAreaTable p_areaTable, in charstring p_areaName) return GeoArea {
var GeoArea v_return;
var integer i := 0;
for (i:=0; i<lengthof(p_areaTable); i:=i+1) {
if (p_areaTable[i].key == p_areaName) {
v_return := p_areaTable[i].geoArea;
}
}
function f_getGeoBroadcastArea(in charstring p_areaName) runs on ItsNt
return GeoBroadcastArea {
return f_geoArea2geoBroadcastArea(f_getArea(vc_areaTable, p_areaName));
}
function f_getGeoAnycastArea(in charstring p_areaName) runs on ItsNt
return GeoAnycastArea {
return f_geoArea2geoAnycastArea(f_getArea(vc_areaTable, p_areaName));
}
function f_geoArea2geoBroadcastArea(GeoArea p_area)
return GeoBroadcastArea {
var GeoBroadcastArea v_broadcastArea;
if (p_area.shape == e_geoCircle) {
v_broadcastArea.geoBroadcastSubType := e_geoBroadcastCircle;
}
else if (p_area.shape == e_geoRect) {
v_broadcastArea.geoBroadcastSubType := e_geoBroadcastRect;
}
else if (p_area.shape == e_geoElip) {
v_broadcastArea.geoBroadcastSubType := e_geoBroadcastElip;
}
else {
v_broadcastArea.geoBroadcastSubType := e_reserved;
}
v_broadcastArea.geoBroadcastArea := p_area.area;
return v_broadcastArea;
function f_geoArea2geoAnycastArea(GeoArea p_area)
return GeoAnycastArea {
var GeoAnycastArea v_anycastArea;
if (p_area.shape == e_geoCircle) {
v_anycastArea.geoAnycastSubType := e_geoAnycastCircle;
}
else if (p_area.shape == e_geoRect) {
v_anycastArea.geoAnycastSubType := e_geoAnycastRect;
}
else if (p_area.shape == e_geoElip) {
v_anycastArea.geoAnycastSubType := e_geoAnycastElip;
}
else {
v_anycastArea.geoAnycastSubType := e_reserved;
}
v_anycastArea.geoAnycastArea := p_area.area;
return v_anycastArea;
}
* @desc The base default.
*/
altstep a_default() runs on ItsNt {
var LongPosVector v_iutLongPosVector;
[] a_receiveLsRequest(
?, ?, ?, v_iutLongPosVector
) {
repeat;
}
[] geoNetworkingPort.receive {
setverdict (inconc, "*** INCONC: Received an unexpected message ***");
//TODO shall stop be called here?
stop;
}
[] tc_wait.timeout {
setverdict (inconc, "*** INCONC: Timeout while awaiting reaction of the IUT prior to Upper Tester action ***");
//TODO shall stop be called here?
stop;
}
[] tc_ac.timeout {
setverdict (inconc, "*** INCONC: Timeout while awaiting the reception of a message ***");
//TODO shall stop be called here?
stop;
}
f_poDefault();
log("*** a_default: INFO: TEST COMPONENT NOW STOPPING ITSELF! ***");
stop;
}
altstep a_neighbourDefault() runs on ItsNt {
[] a_receiveLsRequestAndReply(
?, ?, f_getPosition(vc_componentName).gnAddr,
f_getPosition(vc_componentName),
f_getPosition(vc_componentName),
e_vehicleStation
) {
repeat;
}
f_poNeighbour();
log("*** a_neighbourDefault: INFO: TEST COMPONENT NOW STOPPING ITSELF! ***");
stop;
}
[] a_default() {
}
}
group geoGeoUnicastAltsteps {
/**
* @desc Receive GeoUnicast packet
*/
altstep a_receiveGeoUnicast(
in template (present) LongPosVector p_senderLongPosVec,
in template (present) ShortPosVector p_destinationShortPosVec,
in template (present) StationTypeIdentifier p_stationType,
in template (present) UInt16 p_seqNumber
) runs on ItsNt {
[] geoNetworkingPort.receive(mw_geoNwInd(mw_geoNwPdu(mw_geoUnicastHeader(
p_senderLongPosVec,
p_destinationShortPosVec,
p_stationType,
p_seqNumber)))) {
}
}
/**
* @desc Receive GeoUnicast packet for specific destination
*/
altstep a_receiveGeoUnicastWithDestination(in template (present) ShortPosVector p_destinationShortPosVec) runs on ItsNt {
[] a_receiveGeoUnicast(?, p_destinationShortPosVec, ?, ?) {}
}
/**
* @desc Receive any GeoUnicast packet
*/
altstep a_receiveAnyGeoUnicast() runs on ItsNt {
[] a_receiveGeoUnicast(?, ?, ?, ?) {}
}
group geoGeoBroadcastAltsteps {
/**
* @desc Receive GeoBroadcast packet
*/
altstep a_receiveGeoBroadcast(
in template (present) LongPosVector p_srcLongPosVec,
in template (present) LongPosVector p_senderLongPosVec,
in template (present) StationTypeIdentifier p_stationType,
in template (present) UInt16 p_seqNumber
) runs on ItsNt {
[] geoNetworkingPort.receive(mw_geoNwInd(mw_geoNwPdu(mw_geoBroadcastHeader(
p_srcLongPosVec,
p_stationType,
p_seqNumber
)))) {
}
}
/**
* @desc Receive GeoBroadcast packet with specific Area and HopLimit
*/
altstep a_receiveGeoBroadcastWithAreaWithHopLimit(
in template (present) LongPosVector p_srcLongPosVec,
in template (present) LongPosVector p_senderLongPosVec,
in template (present) StationTypeIdentifier p_stationType,
in template (present) UInt16 p_seqNumber,
in template (present) GeoBroadcastArea p_broadcastArea,
in template (present) UInt8 p_hopLimit
) runs on ItsNt {
[] geoNetworkingPort.receive(mw_geoNwInd(mw_geoNwPdu(mw_geoBroadcastHeaderWithAreaWithHopLimit(
p_srcLongPosVec,
p_senderLongPosVec,
p_stationType,
p_seqNumber,
p_broadcastArea,
p_hopLimit
)))) {
}
}
/**
* @desc Receive GeoBroadcast packet for specific Geobroadcast Area
*/
altstep a_receiveGeoBroadcastWithArea(
in template (present) LongPosVector p_srcLongPosVec,
in template (present) LongPosVector p_senderLongPosVec,
in template (present) StationTypeIdentifier p_stationType,
in template (present) UInt16 p_seqNumber,
in template (present) GeoBroadcastArea p_broadcastArea
) runs on ItsNt {
[] geoNetworkingPort.receive(mw_geoNwInd(mw_geoNwPdu(mw_geoBroadcastHeaderWithArea(
p_srcLongPosVec,
p_stationType,
p_seqNumber,
p_broadcastArea
)))) {
}
}
} // end geoGeoBroadcastAltsteps
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
group geoGeoAnycastAltsteps {
/**
* @desc Receive GeoAnycast packet
*/
altstep a_receiveGeoAnycast(
in template (present) LongPosVector p_srcLongPosVec,
in template (present) LongPosVector p_senderLongPosVec,
in template (present) StationTypeIdentifier p_stationType,
in template (present) UInt16 p_seqNumber
) runs on ItsNt {
[] geoNetworkingPort.receive(mw_geoNwInd(mw_geoNwPdu(mw_geoAnycastHeader(
p_srcLongPosVec,
p_senderLongPosVec,
p_stationType,
p_seqNumber
)))) {
}
}
/**
* @desc Receive GeoAnycast packet with specific Area and HopLimit
*/
altstep a_receiveGeoAnycastWithAreaWithHopLimit(
in template (present) LongPosVector p_srcLongPosVec,
in template (present) LongPosVector p_senderLongPosVec,
in template (present) StationTypeIdentifier p_stationType,
in template (present) UInt16 p_seqNumber,
in template (present) GeoAnycastArea p_anycastArea,
in template (present) UInt8 p_hopLimit
) runs on ItsNt {
[] geoNetworkingPort.receive(mw_geoNwInd(mw_geoNwPdu(mw_geoAnycastHeaderWithAreaWithHopLimit(
p_srcLongPosVec,
p_senderLongPosVec,
p_stationType,
p_seqNumber,
p_anycastArea,
p_hopLimit
)))) {
}
}
/**
* @desc Receive GeoAnycast packet for specific GeoAnycast Area
*/
altstep a_receiveGeoAnycastWithArea(
in template (present) LongPosVector p_srcLongPosVec,
in template (present) LongPosVector p_senderLongPosVec,
in template (present) StationTypeIdentifier p_stationType,
in template (present) UInt16 p_seqNumber,
in template (present) GeoAnycastArea p_anycastArea
) runs on ItsNt {
[] geoNetworkingPort.receive(mw_geoNwInd(mw_geoNwPdu(mw_geoAnycastHeaderWithArea(
p_srcLongPosVec,
p_senderLongPosVec,
p_stationType,
p_seqNumber,
p_anycastArea
)))) {
}
}
} // end geoGeoAnycastAltsteps
group geoLocationServiceAltsteps {
/**
* @desc Receive Location Service Request
*/
altstep a_receiveLsRequest(
in template (present) StationTypeIdentifier p_stationType,
in template (present) UInt16 p_seqNumber,
in template (present) GN_Address p_gnAddress,
var GeoNetworkingInd v_msg;
[] geoNetworkingPort.receive(
mw_geoNwInd(
mw_geoNwPdu(
mw_lsRequestHeader(
p_stationType,
p_seqNumber,
p_gnAddress
)
)
)
) -> value v_msg {
p_reqSrcPosVector := valueof(v_msg.msgIn.header.lsRequestHeader.srcPosVector);
}
/**
* @desc Receive any Location Service Request
*/
altstep a_receiveAnyLsRequest() runs on ItsNt {
var LongPosVector v_reqSrcPosVector;
[] a_receiveLsRequest(?, ?, ?, v_reqSrcPosVector) {}
}
/**
* @desc Receive Location Service Request and send Location Service Reply
*/
altstep a_receiveLsRequestAndReply(
in template (present) StationTypeIdentifier p_reqStationType,
in template (present) UInt16 p_reqSeqNumber,
in template (value) GN_Address p_gnAddress,
in template (value) LongPosVector p_repSrcPosVector,
in template (value) LongPosVector p_repSenderPosVector,
in template (value) StationTypeIdentifier p_repStationType
var LongPosVector v_repDstPosVector;
[] a_receiveLsRequest(p_reqStationType, p_reqSeqNumber, p_gnAddress, v_repDstPosVector) {
f_sendGeoNetMessage(m_geoNwReq(m_geoNwPdu(
v_repDstPosVector,
p_repSenderPosVector,
p_repStationType,
vc_localSeqNumber
}
}
} // end geoLocationServiceAltsteps
} // end geoAltsteps
group preambles {
/**
* @desc The default preamble.
*/
function f_prDefault() runs on ItsNt {
activate(a_default());
}
function f_prNonNeighbour() runs on ItsNt {
f_prDefault();
}
function f_prNeighbour() runs on ItsNt {
/**
* @desc Brings the IUT into an initial state.
* @return
*/
// TODO: any specific action ?
setverdict(pass);
}
function f_handleLocationService(
in template (present) StationTypeIdentifier p_reqStationType,
in template (present) UInt16 p_reqSeqNumber,
in template (value) GN_Address p_gnAddress,
in template (value) LongPosVector p_repSrcPosVector,
in template (value) LongPosVector p_repSenderPosVector,
in template (value) StationTypeIdentifier p_repStationType
) runs on ItsNt {
tc_ac.start;
alt {
[] a_receiveLsRequestAndReply(p_reqStationType, p_reqSeqNumber, p_gnAddress,
p_repSrcPosVector, p_repSenderPosVector, p_repStationType) {
tc_ac.stop;
}
}
}
function f_processLocationService(
in template (value) LongPosVector p_reqSrcPosVector,
in template (value) StationTypeIdentifier p_reqStationType,
in template (value) UInt16 p_reqSeqNumber,
in template (value) GN_Address p_gnAddress,
) runs on ItsNt return FncRetCode {
var FncRetCode v_ret := e_error;
var GeoNetworkingInd v_msg;
f_sendGeoNetMessage(
m_geoNwReq(
m_geoNwPdu(
m_lsRequestHeader(
p_reqSrcPosVector,
p_reqSrcPosVector,
p_reqStationType,
p_reqSeqNumber,
p_gnAddress
)
)
)
);
tc_ac.start;
alt {
[] geoNetworkingPort.receive(
mw_geoNwInd(
mw_geoNwPdu(
mw_lsReplyHeader(
p_reqSeqNumber,
?,
p_reqSrcPosVector
)
)
)
) -> value v_msg {
tc_ac.stop;
p_repSrcPosVector := valueof(v_msg.msgIn.header.lsRequestHeader.srcPosVector);
v_ret := e_success;
}
}
return v_ret;
}
} // end preambles
group postambles {
/**
* @desc The default postamble.
*/
function f_poDefault() runs on ItsNt {
setverdict(pass);
}
function f_poNeighbour() runs on ItsNt {
function f_utGenerateGeoUnicastMessage(in GN_Address p_destinationGnAddr) runs on ItsNt {
//TODO
}
// p_lifetime in seconds
function f_utGenerateGeoUnicastMessageWithLifetime(in GN_Address p_destinationGnAddr, UInt6 p_lifetime) runs on ItsNt {
//TODO
}
function f_utGenerateGeoUnicastMessageWithPayload(in GN_Address p_destinationGnAddr, in octetstring p_payload) runs on ItsNt {
function f_utGenerateGeoBroadcastMessage(in charstring p_area) runs on ItsNt {
function f_utGenerateGeoBroadcastMessageWithPayload(in charstring p_area) runs on ItsNt {
//TODO
}
function f_utGenerateGeoAnycastMessage(in charstring p_area) runs on ItsNt {
//TODO
}
function f_utGenerateGeoAnycastMessageWithPayload(in charstring p_area) runs on ItsNt {
//TODO
}
function f_utGenerateSHBMessage() runs on ItsNt {
//TODO
}
function f_utGenerateSHBMessageWithPayload() runs on ItsNt {
//TODO
}
function f_utGenerateTSBMessage() runs on ItsNt {
//TODO
}
function f_utCheckEvent(/*FIXME*/) runs on ItsNt return FncRetCode {
var FncRetCode v_ret := e_error;
//TODO
return v_ret;
}
} // end upperTester
/**
* @desc Triggers event in the test system adaptation.
* @param p_event The event to trigger
* @return
*/
tepelmann
committed
function f_acTriggerEvent(template (value) AcGNEvent p_event) runs on ItsFa return FncRetCode {
var FncRetCode v_ret := e_success;
}
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
group commonFunctions {
/**
* @desc Gets the value of the lifetime in seconds.
* @return
*/
function f_getLifetimeValue(in Lifetime p_lifetime) runs on ItsNt return float {
var float v_lifetime := 0.0;
select (p_lifetime.ltBase) {
case (e_50ms) {
v_lifetime := int2float(p_lifetime.multiplier) * 0.5;
}
case (e_1s) {
v_lifetime := int2float(p_lifetime.multiplier) * 1.0;
}
case (e_10s) {
v_lifetime := int2float(p_lifetime.multiplier) * 10.0;
}
case (e_100s) {
v_lifetime := int2float(p_lifetime.multiplier) * 100.0;
}
}
return v_lifetime;
}
} // end commonFunctions
* @desc Sends a GeoNetworking message and in case of an included sequence number in the message the
* local sequence number will be increased by one.
* @param p_geoNetReq The message to sent.
*/
function f_sendGeoNetMessage(in template (value) GeoNetworkingReq p_geoNetReq) runs on ItsNt {
geoNetworkingPort.send(p_geoNetReq);
if (not (ischosen(p_geoNetReq.msgOut.header.shbHeader) or ischosen(p_geoNetReq.msgOut.header.beaconHeader))) {
f_setLocalSequenceNumber();
}
/**
* @desc Sets the value of the sequence number for the next event.
* @return
*/
function f_setLocalSequenceNumber() runs on ItsNt {
vc_localSeqNumber := (vc_localSeqNumber + 1) mod c_uInt16Max; //TODO check if c_uInt16Max should be replaced by module parameter
}
} // end testerFunctions
group iutFunctions {
function f_getIutGnLocalAddress() return GN_Address {
// TODO
return valueof(m_dummyGnAddr);
}
* @desc Gets the LS retransmission timer.. Valid for NetRepInterval = default (cong. ctrl).
* @return
*/
function f_getLSRetransmitTimer() return float {
var float v_itsGnLocationServiceRetransmitTimer := 1.0;
//TODO get the value from PIXIT or MIB
return v_itsGnLocationServiceRetransmitTimer;
}
* @desc Gets the LS retransmission timer for NetRepInterval = medium (cong. ctrl).
* @return
*/
function f_getLSRetransmitTimerMedium() return float {
var float v_itsGnLocationServiceRetransmitTimer := 2.0;
//TODO get the value from PIXIT or MIB
return v_itsGnLocationServiceRetransmitTimer;
}
/**
* @desc Gets the LS retransmission timer for NetRepInterval = maximum (cong. ctrl).