Newer
Older
18001
18002
18003
18004
18005
18006
18007
18008
18009
18010
18011
18012
18013
18014
18015
18016
18017
18018
18019
18020
18021
18022
18023
18024
18025
18026
18027
18028
18029
18030
18031
18032
18033
18034
18035
18036
18037
18038
18039
18040
18041
18042
18043
18044
18045
18046
18047
18048
18049
18050
18051
18052
18053
18054
18055
18056
18057
18058
18059
18060
18061
18062
18063
18064
18065
18066
18067
18068
18069
18070
18071
18072
18073
18074
18075
18076
18077
18078
18079
18080
18081
18082
18083
18084
18085
18086
18087
18088
18089
18090
18091
18092
18093
18094
18095
18096
18097
18098
18099
18100
18101
18102
18103
18104
18105
18106
18107
18108
18109
18110
18111
18112
18113
18114
18115
18116
18117
18118
18119
18120
18121
18122
18123
18124
18125
18126
18127
18128
18129
18130
18131
18132
18133
18134
18135
18136
18137
18138
18139
18140
18141
18142
18143
18144
18145
18146
18147
18148
18149
18150
18151
18152
18153
18154
18155
18156
18157
18158
18159
18160
18161
18162
18163
18164
18165
18166
}
tc_ac.start;
alt {
[] a_receiveLsRequest(
?,
v_longPosVectorNodeA.gnAddr.mid,
v_longPosVectorIut
) {
}
}
f_selfOrClientSyncAndVerdictPreamble(c_prDone, e_success);
// Test Body
// Fill the LS buffer + one more message to remove an older message
v_nbrOfPackets := f_getLsPacketBufferSize() / v_packetSize + 1;
log("*** " & testcasename() & ": " & int2str(v_nbrOfPackets) & " ***");
for (v_index:=1; v_index <= v_nbrOfPackets; v_index:=v_index+1) {
if ( not f_utTriggerEvent(m_generateGeoUnicastMessageWithPayload(v_longPosVectorNodeA.gnAddr, char2oct("PAYLOAD_" & oct2str(int2oct(v_index, 2))))) ) {
log("*** " & testcasename() & ": INCONC: Trigger failed ***");
f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_timeout);
}
}
f_sleepIgnoreDef(0.5);
f_sendGeoNetMessage(
m_geoNwReq_linkLayerBroadcast(
m_geoNwPdu(
m_geoNwLsReplyPacket(
v_longPosVectorNodeB,
f_longPosVector2ShortPosVector(v_longPosVectorIut),
vc_localSeqNumber
)
)
)
);
// packet 1 shall be dropped
v_index := 2;
tc_ac.start;
alt {
[] geoNetworkingPort.receive(
f_receiveGeoNetMessageWithPayload(
mw_geoNwInd(
mw_geoNwPdu(
mw_geoNwUnicastPacket(
mw_shortPosVectorPosition(f_longPosVector2ShortPosVector(v_longPosVectorNodeA)),
?
)
)
),
f_adaptPayload_mw(char2oct("PAYLOAD_" & oct2str(int2oct(v_index, 2))))
)
) {
if (v_index < v_nbrOfPackets) {
v_index := v_index + 1;
repeat;
}
tc_ac.stop;
log("*** " & testcasename() & ": Older message was removed, new message was inserted ***");
f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_success);
}
[] tc_ac.timeout {
log("*** " & testcasename() & ": Expected amount of messages were not received ***");
f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_error);
}
}
// Postamble
f_poNeighbour();
f_cf01Down();
} // end TC_GEONW_CAP_LOS_BV_01
} // end geoCapLocationService
// 6.2.3.2
group geoCapForwardingPacketBuffer {
group GEONW_CAP_FPB_BV_01 {
/**
* @desc Test of UC forwarding buffer capacity according to itsGnUcForwardingPacketBufferSize
* parameter and the overflow handling procedure
* <pre>
* Pics Selection: none
* Config Id: CF03
* Initial conditions:
* with {
* the IUT being in the "initial state" and
* the IUT having no Location Table Entry for ItsNodeB and
* the IUT having received multiple GeoUnicast packets addressed to ItsNodeA from ItsNodeC
* containing TrafficClass.SCF set to 1
* }
* Expected behaviour:
* ensure that {
* when {
* the IUT receives a GeoUnicast packet addressed to ItsNodeA from ItsNodeC
* containing TrafficClass.SCF set to 1
* containing Basic Header
* containing RHL field
* indicating HL1 higher than 1
* the UC forwarding packet buffer capacity exceeded (see note 1)
* }
* then {
* the IUT removes the older packet(s) in the UC forwarding packet buffer and,
* the IUT inserts the new received GeoUnicast packet at the end of the UC forwarding packet buffer (see note 2)
* }
* }
* NOTE 1: The amount of stored data exceeds UC forwarding packet capacity defined by the
* itsGnUcForwardingPacketBufferSize MIB parameter
* NOTE 2: Buffered packets will be delivered upon reception of Beacon message from ItsNodeB
*
* </pre>
*
* @see ETSI TS 102 871-2 v2.1.1 TP/GEONW/CAP/FPB/BV/01
* @reference EN 302 636-4-1 [1], clauses 7.5.3
*/
testcase TC_GEONW_CAP_FPB_BV_01() runs on ItsMtc system ItsGeoNetworkingSystem {
// Local variables
var ItsGeoNetworking v_nodeB;
var ItsGeoNetworking v_nodeC;
var template (value) GeoNetworkingPdu v_geoNetworkingMsg;
var integer v_packetSize := 0;
var integer v_nbrOfPackets := 0;
var integer v_payloadSize := f_min(1400, f_getUcForwardingPacketBufferSize() / 10 );
var octetstring v_payload;
const integer c_nbrOfDiscardedMessages := 1;
var UInt16 v_sequenceNumberC := f_getInitialSequenceNumber();
// Test control
// Test component configuration
f_cf03Up();
// Preamble
// Prepare GeoUnicast message
v_payload := int2oct(0, v_payloadSize);
v_geoNetworkingMsg := m_geoNwPdu(
m_geoNwUnicastPacket(
m_dummyLongPosVector,
f_longPosVector2ShortPosVector(valueof(m_dummyLongPosVector)),
0)
);
v_geoNetworkingMsg.gnPacket.packet.payload := f_adaptPayload_m(v_payload);
v_packetSize := lengthof(bit2oct(encvalue(v_geoNetworkingMsg)));
// Fill the UC forwarding buffer + c_nbrOfDiscardedMessages more message to remove older messages
v_nbrOfPackets := f_getUcForwardingPacketBufferSize() / v_packetSize + c_nbrOfDiscardedMessages + 1;
log("*** " & testcasename() & ": " & int2str(v_nbrOfPackets) & " ***");
// Start components
v_nodeB := f_getComponent(c_compNodeB);
v_nodeC := f_getComponent(c_compNodeC);
v_nodeB.start(f_GEONW_CAP_FPB_BV_01_nodeB(v_sequenceNumberC, v_nbrOfPackets, c_nbrOfDiscardedMessages));
v_nodeC.start(f_GEONW_CAP_FPB_BV_01_nodeC(v_sequenceNumberC, v_nbrOfPackets, v_geoNetworkingMsg));
// Synchronization
f_serverSync2ClientsAndStop({c_prDone, c_tbDone});
// Cleanup
f_cf03Down();
} // end TC_GEONW_CAP_FPB_BV_01
* @desc Behavior function for NodeB (TC_GEONW_CAP_FPB_BV_01)
* @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
18172
18173
18174
18175
18176
18177
18178
18179
18180
18181
18182
18183
18184
18185
18186
18187
18188
18189
18190
18191
18192
18193
18194
18195
18196
18197
18198
18199
18200
18201
18202
18203
18204
18205
18206
18207
18208
18209
18210
18211
18212
18213
18214
18215
18216
18217
18218
18219
18220
18221
18222
18223
18224
18225
18226
18227
18228
18229
18230
18231
18232
18233
18234
18235
18236
18237
18238
18239
18240
18241
18242
18243
18244
18245
18246
18247
18248
18249
18250
18251
18252
18253
18254
18255
18256
18257
18258
18259
18260
18261
18262
18263
18264
18265
18266
18267
18268
18269
18270
18271
18272
18273
18274
18275
18276
18277
18278
18279
18280
18281
18282
18283
18284
18285
18286
18287
18288
18289
18290
18291
18292
18293
18294
18295
18296
18297
18298
18299
18300
18301
18302
18303
18304
18305
18306
18307
18308
18309
18310
18311
18312
18313
18314
18315
18316
18317
18318
18319
18320
18321
18322
18323
18324
18325
18326
18327
18328
18329
18330
18331
18332
18333
18334
18335
18336
18337
18338
18339
18340
18341
18342
18343
18344
18345
18346
18347
18348
18349
18350
18351
18352
18353
18354
18355
18356
18357
18358
18359
18360
18361
18362
18363
18364
18365
18366
18367
18368
18369
18370
18371
18372
18373
18374
18375
18376
18377
18378
18379
18380
18381
18382
18383
18384
18385
18386
18387
18388
18389
18390
18391
18392
18393
18394
18395
18396
18397
18398
18399
18400
18401
18402
18403
18404
18405
18406
18407
18408
18409
18410
18411
18412
18413
18414
18415
18416
18417
18418
18419
18420
18421
18422
18423
18424
18425
18426
18427
18428
18429
18430
18431
18432
18433
18434
18435
18436
18437
18438
18439
18440
18441
18442
18443
18444
18445
18446
18447
18448
18449
18450
18451
18452
18453
18454
18455
18456
18457
18458
18459
18460
18461
18462
18463
18464
18465
18466
*/
function f_GEONW_CAP_FPB_BV_01_nodeB(
in UInt16 p_sequenceNumberC,
in integer p_nbrOfPackets,
in integer p_nbrOfDiscardedMessages
) runs on ItsGeoNetworking {
// Local variables
var LongPosVector v_longPosVectorNodeA := f_getPosition(c_compNodeA);
var UInt16 v_expectedSeqNumber := p_sequenceNumberC + p_nbrOfDiscardedMessages + 1;
var integer v_nbReceivedMessages := 0;
// Preamble
f_prDefault(); // NodeB is not yet a neighbour
f_selfOrClientSyncAndVerdictPreamble(c_prDone, e_success);
// Test Body
f_startBeingNeighbour();
tc_ac.start;
alt {
[] geoNetworkingPort.receive(
mw_geoNwInd(
mw_geoNwPdu(
mw_geoNwUnicastPacket(
mw_shortPosVectorPosition(f_longPosVector2ShortPosVector(v_longPosVectorNodeA)),
v_expectedSeqNumber
)
)
)
) {
v_nbReceivedMessages := v_nbReceivedMessages + 1;
v_expectedSeqNumber := v_expectedSeqNumber + 1;
repeat; // repeat in any case => IUT may send more messages !
}
[] geoNetworkingPort.receive(
mw_geoNwInd(
mw_geoNwPdu(
mw_geoNwUnicastPacket(
mw_shortPosVectorPosition(f_longPosVector2ShortPosVector(v_longPosVectorNodeA)),
?
)
)
)
) {
tc_ac.stop;
log("*** " & testcasename() & ": FAIL: Unexpected message received (Bad sequence number) ***");
f_selfOrClientSyncAndVerdictTestBody(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_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_success);
}
else {
log("*** " & testcasename() & ": FAIL: Expected amount of messages were not received ***");
f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_error);
}
}
}
// Postamble
f_poNeighbour();
} // end f_GEONW_CAP_FPB_BV_01_nodeB
/**
* @desc Behavior function for NodeC (TC_GEONW_CAP_FPB_BV_01)
* @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_01_nodeC(
in UInt16 p_sequenceNumberC,
in integer p_nbrOfPackets,
in template (value) GeoNetworkingPdu p_geoNetworkingMsg
) runs on ItsGeoNetworking {
// Local variables
var LongPosVector v_longPosVectorNodeA := f_getPosition(c_compNodeA);
var LongPosVector v_longPosVectorNodeC := f_getPosition(c_compNodeC);
var integer i := 0;
// Preamble
f_prNeighbour();
vc_localSeqNumber := p_sequenceNumberC;
p_geoNetworkingMsg.gnPacket.packet.extendedHeader.geoUnicastHeader.srcPosVector := v_longPosVectorNodeC;
p_geoNetworkingMsg.gnPacket.packet.extendedHeader.geoUnicastHeader.dstPosVector := f_longPosVector2ShortPosVector(v_longPosVectorNodeA);
for (i:=0; i < p_nbrOfPackets; i:=i+1) {
p_geoNetworkingMsg.gnPacket.packet.extendedHeader.geoUnicastHeader.seqNumber := vc_localSeqNumber;
f_sendGeoNetMessage(m_geoNwReq_linkLayerBroadcast(p_geoNetworkingMsg));
}
f_selfOrClientSyncAndVerdictPreamble(c_prDone, e_success);
// Test Body
f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_success);
// Postamble
f_poNeighbour();
} // end f_GEONW_CAP_FPB_BV_01_nodeC
} // end GEONW_CAP_FPB_BV_01
group GEONW_CAP_FPB_BV_02 {
/**
* @desc Test of BC forwarding buffer capacity according to itsGnBcForwardingPacketBufferSize
* parameter and the overflow handling procedure
* <pre>
* Pics Selection: none
* Config Id: CF03
* Initial conditions:
* with {
* the IUT being in the "initial state" and
* the IUT having no Location Table Entry for ItsNodeB
* the IUT having received multiple GeoBroadcast packets
* containing TrafficClass.SCF set to 1
* containing GBC Extended Header
* containing GeoBroadcast Destination Area
* indicating AREA2
* }
* Expected behaviour:
* ensure that {
* when {
* the IUT receives a GeoBroadcast packet
* containing TrafficClass.SCF set to 1
* containing GBC Extended Header
* containing GeoBroadcast Destination Area
* indicating AREA2 and
* the BC forwarding packet buffer capacity exceeded (see note 1)
* }
* then {
* the IUT removes the older packet(s) in the BC forwarding packet buffer and,
* the IUT inserts the new received GeoBroadcast packet at the end of the BC forwarding packet buffer (see note 2)
* }
* }
* NOTE 1: The amount of stored data exceeds BC forwarding buffer capacity defined by the
* itsGnBcForwardingPacketBufferSize MIB parameter
* NOTE 2: Buffered packets will be delivered upon reception of Beacon message from ItsNodeB
*
* </pre>
*
* @see ETSI TS 102 871-2 v2.1.1 TP/GEONW/CAP/FPB/BV/02
* @reference EN 302 636-4-1 [1], clauses 7.5.3
*/
testcase TC_GEONW_CAP_FPB_BV_02() runs on ItsMtc system ItsGeoNetworkingSystem {
// Local variables
var ItsGeoNetworking v_nodeB;
var ItsGeoNetworking v_nodeC;
var template (value) GeoNetworkingPdu v_geoNetworkingMsg;
var integer v_packetSize := 0;
var integer v_nbrOfPackets := 0;
const integer c_nbrOfDiscardedMessages := 1;
var UInt16 v_sequenceNumberC := f_getInitialSequenceNumber();
// Test control
// Test component configuration
f_cf03Up();
// Preamble
// Prepare GeoUnicast message
v_geoNetworkingMsg := m_geoNwPdu(m_geoNwBroadcastPacket(
m_dummyLongPosVector,
0,
m_dummyGeoBroadcastArea));
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 TC_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_selfOrClientSyncAndVerdictPreamble(c_prDone, e_success);
// Test Body
f_startBeingNeighbour();
tc_ac.start;
alt {
[] a_receiveGeoBroadcast(
mw_longPosVectorPosition_withDelta(v_longPosVectorIut),
v_expectedSeqNumber
) {
v_nbReceivedMessages := v_nbReceivedMessages + 1;
v_expectedSeqNumber := v_expectedSeqNumber + 1;
repeat; // repeat in any case => IUT may send more messages !
}
[] a_receiveGeoBroadcast(
mw_longPosVectorPosition_withDelta(v_longPosVectorIut),
?
) {
tc_ac.stop;
log("*** " & testcasename() & ": FAIL: Unexpected message received (Bad sequence number) ***");
f_selfOrClientSyncAndVerdictTestBody(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_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_success);
}
else {
log("*** " & testcasename() & ": FAIL: Expected amount of messages were not received ***");
f_selfOrClientSyncAndVerdictTestBody(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;
// Preamble
f_prNeighbour();
vc_localSeqNumber := p_sequenceNumberC;
p_geoNetworkingMsg.gnPacket.packet := m_geoNwBroadcastPacket(
v_longPosVectorNodeC,
0,
f_getGeoBroadcastArea(c_area2)
);
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_selfOrClientSyncAndVerdictPreamble(c_prDone, e_success);
// Test Body
f_selfOrClientSyncAndVerdictTestBody(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_TestCases