Newer
Older
log("*** " & testcasename() & ": PICS_GN_GBC_FWD required for executing the TC ***");
setverdict(inconc);
stop;
}
if (f_getGeoBroadcastForwardingAlgorithm() != e_advanced) {
log("*** " & testcasename() & ": PICS_GN_GEOBROADCAST_FORWARDING_ALGORITHM == e_advanced required for executing the TC ***");
setverdict(inconc);
stop;
}
// if (f_getGeoBroadcastCbfMinTime() < 300) {
// log("*** " & testcasename() & ": PICS_GN_GEOBROADCAST_CBF_MIN_TIME >= 300 required for executing the TC ***");
// setverdict(inconc);
// stop;
// }
15016
15017
15018
15019
15020
15021
15022
15023
15024
15025
15026
15027
15028
15029
15030
15031
15032
15033
15034
15035
15036
15037
15038
15039
15040
15041
15042
15043
15044
15045
15046
15047
15048
15049
15050
15051
15052
15053
15054
15055
15056
15057
15058
15059
15060
15061
15062
15063
15064
15065
15066
15067
15068
15069
15070
15071
15072
15073
15074
15075
15076
15077
15078
15079
15080
15081
15082
15083
15084
15085
15086
15087
15088
15089
15090
15091
15092
15093
15094
15095
15096
15097
15098
15099
15100
15101
15102
15103
15104
15105
15106
15107
15108
15109
15110
15111
15112
15113
15114
15115
15116
15117
15118
15119
15120
15121
15122
15123
15124
15125
15126
15127
15128
15129
15130
15131
15132
15133
15134
15135
15136
15137
15138
15139
15140
15141
15142
15143
15144
15145
15146
15147
15148
15149
15150
15151
15152
15153
15154
15155
15156
15157
15158
15159
15160
15161
15162
15163
15164
15165
15166
15167
15168
15169
15170
15171
15172
15173
15174
15175
15176
15177
// Test component configuration
f_cf04Up();
// Preamble
// Start components
v_nodeB := f_getComponent(c_compNodeB);
v_nodeC := f_getComponent(c_compNodeC);
v_nodeD := f_getComponent(c_compNodeD);
v_nodeB.start(f_GEONW_PON_BAA_BV_10_nodeB());
v_nodeC.start(f_GEONW_PON_BAA_BV_10_nodeC());
v_nodeD.start(f_GEONW_PON_BAA_BV_10_nodeD());
// Synchronization
f_serverSync3ClientsAndStop({c_prDone, c_tbDone});
// Cleanup
f_cf04Down();
} // end f_GEONW_PON_BAA_BV_10
/**
* @desc Behavior function for NodeB (TC_GEONW_PON_BAA_BV_10)
*/
function f_GEONW_PON_BAA_BV_10_nodeB() runs on ItsGeoNetworking {
// Local variables
var LongPosVector v_longPosVectorNodeC := f_getPosition(c_compNodeC);
// Preamble
f_prNeighbour();
f_selfOrClientSyncAndVerdict(c_prDone, e_success);
// Test Body
tc_ac.start;
alt {
[] geoNetworkingPort.receive(mw_geoNwInd(mw_geoNwPdu(mw_geoNwBroadcastPacketWithArea(
mw_longPosVectorPosition(v_longPosVectorNodeC),
?,
f_getGeoBroadcastArea(c_area2)
)))) {
tc_ac.stop;
log("*** " & testcasename() & ": PASS: packet correctly forwarded ***");
f_selfOrClientSyncAndVerdict(c_tbDone, e_success);
}
[] tc_ac.timeout {
log("*** " & testcasename() & ": FAIL: Expected message not received ***");
f_selfOrClientSyncAndVerdict(c_tbDone, e_error);
}
}
// Postamble
f_poNeighbour();
} // end f_GEONW_PON_BAA_BV_10_nodeB
/**
* @desc Behavior function for NodeC (TC_GEONW_PON_BAA_BV_10)
*/
function f_GEONW_PON_BAA_BV_10_nodeC() runs on ItsGeoNetworking {
// Local variables
var LongPosVector v_longPosVectorNodeC := f_getPosition(c_compNodeC);
// Preamble
f_prNonNeighbour();
f_selfOrClientSyncAndVerdict(c_prDone, e_success);
// Test Body
f_sendGeoNetMessage(
m_geoNwReq_linkLayerBroadcast(
m_geoNwPdu(m_geoNwBroadcastPacket(
v_longPosVectorNodeC,
0,
f_getGeoBroadcastArea(c_area2)
)
)
)
);
tc_ac.start;
alt {
[] geoNetworkingPort.receive(mw_geoNwInd(mw_geoNwPdu(mw_geoNwBroadcastPacketWithArea(
mw_longPosVectorPosition(v_longPosVectorNodeC),
?,
f_getGeoBroadcastArea(c_area2)
)))) {
tc_ac.stop;
log("*** " & testcasename() & ": PASS: packet correctly forwarded ***");
f_selfOrClientSyncAndVerdict(c_tbDone, e_success);
}
[] tc_ac.timeout {
log("*** " & testcasename() & ": FAIL: Expected message not received ***");
f_selfOrClientSyncAndVerdict(c_tbDone, e_error);
}
}
// Postamble
f_poNeighbour();
} // end f_GEONW_PON_BAA_BV_10_nodeC
/**
* @desc Behavior function for NodeD (TC_GEONW_PON_BAA_BV_10)
*/
function f_GEONW_PON_BAA_BV_10_nodeD() runs on ItsGeoNetworking {
// Local variables
var LongPosVector v_longPosVectorNodeC := f_getPosition(c_compNodeC);
// Preamble
f_prNeighbour();
f_selfOrClientSyncAndVerdict(c_prDone, e_success);
// Test Body
tc_ac.start;
alt {
[] geoNetworkingPort.receive(mw_geoNwInd(mw_geoNwPdu(mw_geoNwBroadcastPacketWithArea(
mw_longPosVectorPosition(v_longPosVectorNodeC),
?,
f_getGeoBroadcastArea(c_area2)
)))) {
tc_ac.stop;
log("*** " & testcasename() & ": PASS: packet correctly forwarded ***");
f_selfOrClientSyncAndVerdict(c_tbDone, e_success);
}
[] tc_ac.timeout {
log("*** " & testcasename() & ": FAIL: Expected message not received ***");
f_selfOrClientSyncAndVerdict(c_tbDone, e_error);
}
}
// Postamble
f_poNeighbour();
} // end f_GEONW_PON_BAA_BV_10_nodeD
} // end GEONW_PON_BAA_BV_10
group GEONW_PON_BAA_BV_11 {
/**
* @desc TP Function for TC_GEONW_PON_BAA_BV_11
*/
function f_GEONW_PON_BAA_BV_11() runs on ItsMtc {
// Local variables
var ItsGeoNetworking v_nodeB;
var ItsGeoNetworking v_nodeD;
// Test control
if (not PICS_GN_GBC_FWD) {
log("*** " & testcasename() & ": PICS_GN_GBC_FWD required for executing the TC ***");
setverdict(inconc);
stop;
}
if (f_getGeoBroadcastForwardingAlgorithm() != e_advanced) {
log("*** " & testcasename() & ": PICS_GN_GEOBROADCAST_FORWARDING_ALGORITHM == e_advanced required for executing the TC ***");
setverdict(inconc);
stop;
}
// if (f_getGeoBroadcastCbfMinTime() < 300) {
// log("*** " & testcasename() & ": PICS_GN_GEOBROADCAST_CBF_MIN_TIME >= 300 required for executing the TC ***");
// setverdict(inconc);
// stop;
// }
15183
15184
15185
15186
15187
15188
15189
15190
15191
15192
15193
15194
15195
15196
15197
15198
15199
15200
15201
15202
15203
15204
15205
15206
15207
15208
15209
15210
15211
15212
15213
15214
15215
15216
15217
15218
15219
15220
15221
15222
15223
15224
15225
15226
15227
15228
15229
15230
15231
15232
15233
15234
15235
15236
15237
15238
15239
15240
15241
15242
15243
15244
15245
15246
15247
15248
15249
15250
15251
15252
15253
15254
15255
15256
15257
15258
15259
15260
15261
15262
15263
15264
15265
15266
15267
15268
15269
15270
15271
15272
15273
15274
15275
15276
15277
15278
15279
15280
15281
15282
15283
15284
15285
15286
15287
15288
15289
15290
15291
15292
15293
15294
15295
15296
15297
15298
15299
15300
15301
15302
15303
15304
15305
15306
15307
15308
15309
15310
15311
15312
15313
15314
15315
15316
15317
15318
15319
15320
15321
15322
15323
15324
15325
15326
15327
15328
15329
15330
15331
15332
15333
15334
15335
15336
15337
15338
15339
15340
15341
15342
15343
15344
15345
15346
15347
15348
15349
15350
15351
15352
15353
15354
15355
15356
15357
15358
15359
15360
15361
15362
15363
15364
15365
15366
15367
15368
15369
15370
15371
15372
15373
15374
15375
15376
15377
15378
15379
15380
15381
15382
15383
15384
15385
15386
15387
15388
15389
15390
15391
15392
15393
15394
15395
15396
15397
15398
15399
15400
15401
15402
15403
15404
15405
15406
15407
15408
15409
15410
15411
15412
15413
15414
15415
15416
15417
15418
15419
15420
15421
15422
15423
15424
15425
15426
15427
15428
15429
15430
15431
15432
15433
15434
15435
15436
15437
15438
15439
15440
15441
15442
15443
15444
15445
15446
15447
15448
15449
15450
15451
15452
15453
15454
15455
15456
15457
15458
15459
15460
15461
15462
15463
15464
15465
15466
15467
15468
15469
15470
15471
15472
15473
15474
15475
15476
15477
15478
15479
15480
15481
15482
15483
15484
15485
15486
15487
15488
15489
15490
15491
15492
15493
15494
15495
15496
15497
15498
15499
15500
15501
15502
15503
15504
15505
15506
15507
15508
15509
15510
15511
15512
15513
15514
15515
15516
15517
15518
15519
15520
15521
15522
15523
15524
15525
15526
15527
15528
15529
15530
15531
15532
15533
15534
15535
15536
15537
15538
15539
15540
15541
15542
15543
15544
15545
15546
15547
15548
15549
15550
15551
15552
15553
15554
15555
15556
15557
15558
15559
15560
15561
15562
15563
15564
15565
15566
15567
15568
15569
15570
15571
15572
15573
15574
15575
15576
15577
15578
15579
15580
15581
15582
15583
15584
15585
15586
15587
15588
15589
15590
15591
15592
15593
15594
15595
15596
15597
15598
15599
15600
15601
15602
15603
15604
15605
15606
15607
15608
15609
15610
15611
15612
15613
15614
15615
15616
15617
15618
15619
15620
15621
15622
15623
15624
15625
15626
15627
15628
15629
15630
15631
15632
15633
15634
15635
15636
15637
15638
15639
15640
15641
15642
15643
15644
// Test component configuration
f_cf07Up();
// Preamble
// Start components
v_nodeB := f_getComponent(c_compNodeB);
v_nodeD := f_getComponent(c_compNodeD);
v_nodeB.start(f_GEONW_PON_BAA_BV_11_nodeB());
v_nodeD.start(f_GEONW_PON_BAA_BV_11_nodeD());
// Synchronization
f_serverSync2ClientsAndStop({c_prDone, c_tbDone});
// Cleanup
f_cf06Down();
} // end f_GEONW_PON_BAA_BV_11
/**
* @desc Behavior function for NodeB (TC_GEONW_PON_BAA_BV_11)
*/
function f_GEONW_PON_BAA_BV_11_nodeB() runs on ItsGeoNetworking {
// Local variables
var LongPosVector v_longPosVectorNodeB := f_getPosition(c_compNodeB);
// Preamble
f_prNeighbour();
f_sendGeoNetMessage(m_geoNwReq_linkLayerBroadcast(
m_geoNwPdu(m_geoNwBroadcastPacket(
v_longPosVectorNodeB,
0,
f_getGeoBroadcastArea(c_area1)
)
)
));
f_selfOrClientSyncAndVerdict(c_prDone, e_success);
// Test Body
tc_ac.start;
alt {
[] geoNetworkingPort.receive(mw_geoNwInd(mw_geoNwPdu(mw_geoNwBroadcastPacketWithArea(
mw_longPosVectorPosition(v_longPosVectorNodeB),
?,
f_getGeoBroadcastArea(c_area1)
)))) {
tc_ac.stop;
log("*** " & testcasename() & ": PASS: GBC message received ***");
f_selfOrClientSyncAndVerdict(c_tbDone, e_success);
}
[] tc_ac.timeout {
log("*** " & testcasename() & ": FAIL: GBC message not received ***");
f_selfOrClientSyncAndVerdict(c_tbDone, e_error);
}
}
// Postamble
f_poNeighbour();
} // end f_GEONW_PON_BAA_BV_11_nodeB
/**
* @desc Behavior function for NodeD (TC_GEONW_PON_BAA_BV_11)
*/
function f_GEONW_PON_BAA_BV_11_nodeD() runs on ItsGeoNetworking {
// Local variables
var LongPosVector v_longPosVectorNodeB := f_getPosition(c_compNodeB);
var LongPosVector v_longPosVectorIut := f_getPosition(c_compIut);
timer t_toCbf := (int2float(f_getGeoBroadcastCbfMaxTime())
+ (
int2float(f_getGeoBroadcastCbfMinTime() - f_getGeoBroadcastCbfMaxTime())
/ int2float(f_getCbfMaxCommunicationRange())
) * f_distance(v_longPosVectorNodeB, v_longPosVectorIut)) * 0.95 / 1000.0;
// Preamble
f_prNeighbour();
f_selfOrClientSyncAndVerdict(c_prDone, e_success);
// Test Body
f_sendGeoNetMessage(m_geoNwReq_linkLayerBroadcast(
m_geoNwPdu(m_geoNwBroadcastPacket(
v_longPosVectorNodeB,
0,
f_getGeoBroadcastArea(c_area1)
)
)
));
t_toCbf.start;
tc_ac.start;
alt {
[] geoNetworkingPort.receive(mw_geoNwInd(mw_geoNwPdu(mw_geoNwBroadcastPacketWithArea(
mw_longPosVectorPosition(v_longPosVectorNodeB),
?,
f_getGeoBroadcastArea(c_area1)
)))) {
tc_ac.stop;
if(t_toCbf.running) {
t_toCbf.stop;
log("*** " & testcasename() & ": FAIL: GBC retransmitted before CBF timer expiration ***");
f_selfOrClientSyncAndVerdict(c_tbDone, e_error);
}
else {
log("*** " & testcasename() & ": PASS: GBC message received ***");
f_selfOrClientSyncAndVerdict(c_tbDone, e_success);
}
}
[] t_toCbf.timeout {
log("*** " & testcasename() & ": INFO: CBF timer elapsed ***");
repeat;
}
[] tc_ac.timeout {
log("*** " & testcasename() & ": FAIL: GBC message not received ***");
f_selfOrClientSyncAndVerdict(c_tbDone, e_error);
}
}
// Postamble
f_poNeighbour();
} // end f_GEONW_PON_BAA_BV_11_nodeD
} // end GEONW_PON_BAA_BV_11
} // end geoGeoBroadcastCbfAlgorithm
} // end geoProtocolOperation
// 6.2.3 Capacities
group geoCapacities {
// 6.2.3.1
group geoCapLocationService {
/**
* @desc TP Function for TC_GEONW_CAP_LOS_BV_01
*/
function f_GEONW_CAP_LOS_BV_01() runs on ItsGeoNetworking {
// Local variables
var LongPosVector v_longPosVectorNodeA;
var LongPosVector v_longPosVectorNodeB;
var LongPosVector v_longPosVectorIut;
var GeoNetworkingInd v_msg;
var integer v_packetSize := 0;
var integer v_index := 0;
var integer v_nbrOfPackets := 0;
// Test control
if (not PICS_GN_LS_REQ_SRC) {
log("*** " & testcasename() & ": PICS_GN_LS_REQ_SRC required for executing the TC ***");
setverdict(inconc);
stop;
}
// Test component configuration
f_cf01Up();
// Test adapter configuration
// Preamble
v_longPosVectorNodeA := f_getPosition(c_compNodeA);
v_longPosVectorNodeB := f_getPosition(c_compNodeB);
v_longPosVectorIut := f_getPosition(c_compIut);
f_prNeighbour();
// Trigger message to NodeB in order to get an estimation of packet size
if ( not f_utTriggerEvent(m_generateGeoUnicastMessageWithPayload(v_longPosVectorNodeB.gnAddr, char2oct("PAYLOAD_" & oct2str(int2oct(0, 2))))) ) {
log("*** " & testcasename() & ": INCONC: Trigger failed ***");
f_selfOrClientSyncAndVerdict(c_prDone, e_timeout);
}
tc_ac.start;
alt {
[] geoNetworkingPort.receive(
mw_geoNwInd(
mw_geoNwPdu(
mw_geoNwUnicastPacket(
mw_shortPosVectorPosition(f_longPosVector2ShortPosVector(v_longPosVectorNodeB)),
?
)
)
)
) -> value v_msg {
var GeoNetworkingReq v_req;
tc_ac.stop;
//if we use directly v_msg(GeoNetworkingInd) for encvalue the encoder must also be able to provide
//encoding of "incoming messages"...
v_req.msgOut := v_msg.msgIn;
v_packetSize := lengthof(bit2oct(encvalue(v_req.msgOut)));
}
}
// implicitely trigger LS_REQUEST
if ( not f_utTriggerEvent(m_generateGeoUnicastMessage(v_longPosVectorNodeA.gnAddr)) ) {
log("*** " & testcasename() & ": INCONC: Trigger failed ***");
f_selfOrClientSyncAndVerdict(c_prDone, e_timeout);
}
tc_ac.start;
alt {
[] a_receiveLsRequest(
?,
v_longPosVectorNodeA.gnAddr.mid,
v_longPosVectorIut
) {
}
}
f_selfOrClientSyncAndVerdict(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_selfOrClientSyncAndVerdict(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_selfOrClientSyncAndVerdict(c_tbDone, e_success);
}
[] tc_ac.timeout {
log("*** " & testcasename() & ": Expected amount of messages were not received ***");
f_selfOrClientSyncAndVerdict(c_tbDone, e_error);
}
}
// Postamble
f_poNeighbour();
f_cf01Down();
} // end f_GEONW_CAP_LOS_BV_01
} // end geoCapLocationService
// 6.2.3.2
group geoCapForwardingPacketBuffer {
group GEONW_CAP_FPB_BV_01 {
/**
* @desc TP Function for TC_GEONW_CAP_LOS_BV_01
*/
function f_GEONW_CAP_FPB_BV_01() runs on ItsMtc {
// 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
if (not PICS_GN_GUC_FWD) {
log("*** " & testcasename() & ": PICS_GN_GUC_FWD required for executing the TC ***");
setverdict(inconc);
stop;
}
// Test component configuration
f_cf03Up();
// Preamble
// Prepare GUC 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 f_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
*/
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_selfOrClientSyncAndVerdict(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_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_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_selfOrClientSyncAndVerdict(c_prDone, e_success);
// Test Body
f_selfOrClientSyncAndVerdict(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 TP Function for TC_GEONW_CAP_FPB_BV_02
*/
function f_GEONW_CAP_FPB_BV_02() runs on ItsMtc {
// 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();
const octetstring c_defaultPayload := char2oct("DEFAULT_PAYLOAD");
const integer c_itsGnMaxSduSize := 1398;
var octetstring v_payload := c_defaultPayload;
// Test control
if (not PICS_GN_GBC_FWD) {
log("*** " & testcasename() & ": PICS_GN_GBC_FWD required for executing the TC ***");
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);
15673
15674
15675
15676
15677
15678
15679
15680
15681
15682
15683
15684
15685
15686
15687
15688
15689
15690
15691
15692
15693
15694
15695
15696
15697
15698
15699
15700
15701
15702
15703
15704
15705
15706
15707
15708
15709
15710
15711
15712
15713
15714
15715
15716
15717
15718
15719
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(
15729
15730
15731
15732
15733
15734
15735
15736
15737
15738
15739
15740
15741
15742
15743
15744
15745
15746
15747
15748
15749
15750
15751
15752
15753
15754
15755
15756
15757
15758
15759
15760
15761
15762
15763
15764
15765
15766
?
) {
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
15780
15781
15782
15783
15784
15785
15786
15787
15788
15789
15790
15791
15792
15793
15794
15795
15796
15797
15798
15799
15800
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