Newer
Older
setverdict(inconc);
stop;
}
// Test component configuration
f_cf03Up();
// Preamble
// Prepare GBC message
v_geoNetworkingMsg := m_geoNwPdu(m_geoNwBroadcastPacket(
m_dummyLongPosVector,
0,
m_dummyGeoBroadcastArea));
while (lengthof(v_payload) < (c_itsGnMaxSduSize- lengthof(c_defaultPayload))) {
v_payload := v_payload & c_defaultPayload;
}
v_geoNetworkingMsg.gnPacket.packet.payload := f_adaptPayload_m(v_payload);
17022
17023
17024
17025
17026
17027
17028
17029
17030
17031
17032
17033
17034
17035
17036
17037
17038
17039
17040
17041
17042
17043
17044
17045
17046
17047
17048
17049
17050
17051
17052
17053
17054
17055
17056
17057
17058
17059
17060
17061
17062
17063
17064
17065
17066
17067
17068
v_packetSize := lengthof(bit2oct(encvalue(v_geoNetworkingMsg)));
// Fill the BC forwarding buffer + c_nbrOfDiscardedMessages more message to remove older messages
v_nbrOfPackets := f_getBcForwardingPacketBufferSize() / v_packetSize + c_nbrOfDiscardedMessages;
// Start components
v_nodeB := f_getComponent(c_compNodeB);
v_nodeC := f_getComponent(c_compNodeC);
v_nodeB.start(f_GEONW_CAP_FPB_BV_02_nodeB(v_sequenceNumberC, v_nbrOfPackets, c_nbrOfDiscardedMessages));
v_nodeC.start(f_GEONW_CAP_FPB_BV_02_nodeC(v_sequenceNumberC, v_nbrOfPackets, v_geoNetworkingMsg));
// Synchronization
f_serverSync2ClientsAndStop({c_prDone, c_tbDone});
// Cleanup
f_cf03Down();
} // end f_GEONW_CAP_FPB_BV_02
/**
* @desc Behavior function for NodeB (TC_GEONW_CAP_FPB_BV_02)
* @param p_sequenceNumberC Initial sequence number of NodeC
* @param p_nbrOfPackets Number of packets sent by other component
* @param p_nbrOfDiscardedMessages Number of packets that should be discarded
*/
function f_GEONW_CAP_FPB_BV_02_nodeB(
in UInt16 p_sequenceNumberC,
in integer p_nbrOfPackets,
in integer p_nbrOfDiscardedMessages
) runs on ItsGeoNetworking {
// Local variables
var LongPosVector v_longPosVectorIut := f_getPosition(c_compIut);
var LongPosVector v_longPosVectorNodeC := f_getPosition(c_compNodeC);
var UInt16 v_expectedSeqNumber := p_sequenceNumberC + p_nbrOfDiscardedMessages;
var integer v_nbReceivedMessages := 0;
// Preamble
f_prDefault(); // NodeB is not yet a neighbour
f_selfOrClientSyncAndVerdict(c_prDone, e_success);
// Test Body
f_startBeingNeighbour();
tc_ac.start;
alt {
[] a_receiveGeoBroadcast(
v_expectedSeqNumber
) {
v_nbReceivedMessages := v_nbReceivedMessages + 1;
v_expectedSeqNumber := v_expectedSeqNumber + 1;
repeat; // repeat in any case => IUT may send more messages !
}
[] a_receiveGeoBroadcast(
17078
17079
17080
17081
17082
17083
17084
17085
17086
17087
17088
17089
17090
17091
17092
17093
17094
17095
17096
17097
17098
17099
17100
17101
17102
17103
17104
17105
17106
17107
17108
17109
17110
17111
17112
17113
17114
17115
?
) {
tc_ac.stop;
log("*** " & testcasename() & ": FAIL: Unexpected message received (Bad sequence number) ***");
f_selfOrClientSyncAndVerdict(c_tbDone, e_error);
}
[] tc_ac.timeout {
if(v_nbReceivedMessages == (p_nbrOfPackets - p_nbrOfDiscardedMessages)) {
log("*** " & testcasename() & ": PASS: Older messages wer removed, new messages were inserted ***");
f_selfOrClientSyncAndVerdict(c_tbDone, e_success);
}
else {
log("*** " & testcasename() & ": FAIL: Expected amount of messages were not received ***");
f_selfOrClientSyncAndVerdict(c_tbDone, e_error);
}
}
}
// Postamble
f_poNeighbour();
} // end f_GEONW_CAP_FPB_BV_02_nodeB
/**
* @desc Behavior function for NodeC (TC_GEONW_CAP_FPB_BV_02)
* @param p_sequenceNumberC Initial sequence number of NodeC
* @param p_nbrOfPackets Number of packets to be send
* @param p_geoNetworkingMsg Pdu to be sent (template)
*/
function f_GEONW_CAP_FPB_BV_02_nodeC(
in UInt16 p_sequenceNumberC,
in integer p_nbrOfPackets,
in template (value) GeoNetworkingPdu p_geoNetworkingMsg
) runs on ItsGeoNetworking {
// Local variables
var LongPosVector v_longPosVectorNodeC := f_getPosition(c_compNodeC);
var integer i := 0;
var Payload v_payload := valueof(p_geoNetworkingMsg.gnPacket.packet.payload); //save the given payload
// Preamble
f_prNeighbour();
vc_localSeqNumber := p_sequenceNumberC;
p_geoNetworkingMsg.gnPacket.packet := m_geoNwBroadcastPacket(
v_longPosVectorNodeC,
0,
f_getGeoBroadcastArea(c_area2)
);
p_geoNetworkingMsg.gnPacket.packet.payload := v_payload; //set back the original given payload
17129
17130
17131
17132
17133
17134
17135
17136
17137
17138
17139
17140
17141
17142
17143
17144
17145
17146
17147
17148
17149
for (i:=0; i < p_nbrOfPackets; i:=i+1) {
p_geoNetworkingMsg.gnPacket.packet.extendedHeader.geoBroadcastHeader.seqNumber := vc_localSeqNumber;
f_sendGeoNetMessage(m_geoNwReq_linkLayerBroadcast(p_geoNetworkingMsg));
}
f_selfOrClientSyncAndVerdict(c_prDone, e_success);
// Test Body
f_selfOrClientSyncAndVerdict(c_tbDone, e_success);
// Postamble
f_poNeighbour();
} // end f_GEONW_CAP_FPB_BV_02_nodeC
} // end GEONW_CAP_FPB_BV_02
} // end geoCapForwardingPacketBuffer
} // end geoCapacities
} // end ItsGeoNetworking_TpFunctions