Newer
Older
16001
16002
16003
16004
16005
16006
16007
16008
16009
16010
16011
16012
16013
16014
16015
16016
16017
16018
16019
16020
16021
16022
16023
16024
16025
16026
16027
16028
16029
16030
16031
16032
16033
16034
16035
16036
16037
16038
16039
16040
16041
)
)
)
);
t_toCbf.start;
tc_ac.start;
alt {
[] geoNetworkingPort.receive(mw_geoNwInd(mw_geoNwPdu(mw_geoNwAnycastPacketWithArea(
mw_longPosVectorPosition(v_longPosVectorNodeC),
?,
f_getGeoAnycastArea(c_area2)
)))) {
tc_ac.stop;
if(t_toCbf.running) {
t_toCbf.stop;
log("*** " & testcasename() & ": FAIL: GAC retransmitted before CBF timer expiration ***");
f_selfOrClientSyncAndVerdict(c_tbDone, e_error);
}
else {
log("*** " & testcasename() & ": PASS: GAC message received ***");
f_selfOrClientSyncAndVerdict(c_tbDone, e_success);
}
}
[] t_toCbf.timeout {
log("*** " & testcasename() & ": INFO: CBF timer elapsed ***");
repeat;
}
[] tc_ac.timeout {
log("*** " & testcasename() & ": FAIL: GAC message not received ***");
f_selfOrClientSyncAndVerdict(c_tbDone, e_error);
}
}
// Postamble
f_poDefault();
} // end f_GEONW_PON_GAC_NONAREA_CBF_BV_21_nodeD
} // end GEONW_PON_GAC_NONAREA_CBF_BV_21
16043
16044
16045
16046
16047
16048
16049
16050
16051
16052
16053
16054
16055
16056
16057
16058
16059
16060
16061
16062
16063
16064
16065
16066
16067
16068
16069
16070
16071
16072
16073
16074
16075
16076
16077
16078
16079
16080
16081
16082
16083
16084
16085
16086
16087
16088
16089
16090
16091
16092
16093
16094
16095
16096
16097
16098
16099
16100
16101
16102
16103
16104
16105
16106
16107
16108
16109
16110
16111
16112
16113
16114
16115
16116
16117
16118
16119
16120
16121
16122
16123
16124
16125
16126
16127
16128
16129
16130
16131
16132
16133
16134
16135
16136
16137
16138
16139
16140
16141
16142
16143
16144
16145
16146
16147
16148
16149
16150
16151
16152
16153
16154
16155
16156
16157
16158
16159
16160
16161
16162
16163
16164
16165
16166
16167
16168
16169
16170
16171
16172
16173
16174
16175
16176
16177
16178
16179
16180
16181
16182
16183
16184
16185
16186
16187
16188
16189
16190
16191
16192
16193
16194
16195
16196
16197
16198
16199
16200
16201
16202
16203
16204
16205
16206
16207
16208
16209
16210
16211
16212
16213
16214
16215
16216
16217
16218
16219
16220
16221
16222
16223
16224
16225
16226
16227
16228
group GEONW_PON_GAC_NONAREA_CBF_BV_22 {
/**
* @desc TP Function for TC_GEONW_PON_GAC_NONAREA_CBF_BV_22
*/
function f_GEONW_PON_GAC_NONAREA_CBF_BV_22() runs on ItsMtc {
// Local variables
var ItsGeoNetworking v_nodeB;
var ItsGeoNetworking v_nodeC;
var ItsGeoNetworking v_nodeD;
// Test control
if (not PICS_GN_GAC_FWD) {
log("*** " & testcasename() & ": PICS_GN_GAC_FWD required for executing the TC ***");
setverdict(inconc);
stop;
}
if (f_getNonAreaForwardingAlgorithm() != e_cbf) {
log("*** " & testcasename() & ": PICS_GN_NON_AREA_FORWARDING_ALGORITHM == e_cbf required for executing the TC ***");
setverdict(inconc);
stop;
}
// if (f_getCbfMinTime() < 300) {
// log("*** " & testcasename() & ": PICS_GN_GEOBROADCAST_CBF_MIN_TIME >= 300 required for executing the TC ***");
// setverdict(inconc);
// stop;
// }
// 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_GAC_NONAREA_CBF_BV_22_nodeB());
v_nodeC.start(f_GEONW_PON_GAC_NONAREA_CBF_BV_22_nodeC());
v_nodeD.start(f_GEONW_PON_GAC_NONAREA_CBF_BV_22_nodeD());
// Synchronization
f_serverSync3ClientsAndStop({c_prDone, c_tbDone});
// Cleanup
f_cf04Down();
} // end f_GEONW_PON_GAC_NONAREA_CBF_BV_22
/**
* @desc Behavior function for NodeB (TC_GEONW_PON_GAC_NONAREA_CBF_BV_22)
*/
function f_GEONW_PON_GAC_NONAREA_CBF_BV_22_nodeB() runs on ItsGeoNetworking {
// Local variables
var LongPosVector v_longPosVectorNodeA := f_getPosition(c_compNodeA);
// Preamble
f_prNeighbour();
f_selfOrClientSyncAndVerdict(c_prDone, e_success);
// Test Body
tc_ac.start;
alt {
[] geoNetworkingPort.receive(mw_geoNwInd(mw_geoNwPdu(mw_geoNwAnycastPacketWithArea(
mw_longPosVectorPosition(v_longPosVectorNodeA),
?,
f_getGeoAnycastArea(c_area2)
)))) {
tc_ac.stop;
log("*** " & testcasename() & ": PASS: GAC broadcasted ***");
f_selfOrClientSyncAndVerdict(c_tbDone, e_success);
}
[] tc_ac.timeout {
log("*** " & testcasename() & ": FAIL: GAC not broadcasted ***");
f_selfOrClientSyncAndVerdict(c_tbDone, e_error);
}
}
// Postamble
f_poNeighbour();
} // end f_GEONW_PON_GAC_NONAREA_CBF_BV_22_nodeB
/**
* @desc Behavior function for NodeC (TC_GEONW_PON_GAC_NONAREA_CBF_BV_22)
*/
function f_GEONW_PON_GAC_NONAREA_CBF_BV_22_nodeC() runs on ItsGeoNetworking {
// Local variables
var LongPosVector v_longPosVectorNodeC := f_getPosition(c_compNodeC);
var LongPosVector v_longPosVectorNodeA := f_getPosition(c_compNodeA);
timer t_toCbf := int2float(f_getCbfMaxTime()) * 0.95 / 1000.0;
// Preamble
v_longPosVectorNodeC.pai := int2bit(0,1);
f_changePositon(c_compNodeC, v_longPosVectorNodeC);
f_prNeighbour();
f_selfOrClientSyncAndVerdict(c_prDone, e_success);
// Test Body
f_sendGeoNetMessage(
m_geoNwReq_linkLayerBroadcast(
m_geoNwPdu(
m_geoNwAnycastPacket(
v_longPosVectorNodeA,
vc_localSeqNumber,
f_getGeoAnycastArea(c_area2)
)
)
)
);
t_toCbf.start;
tc_ac.start;
alt {
[] geoNetworkingPort.receive(mw_geoNwInd(mw_geoNwPdu(mw_geoNwAnycastPacketWithArea(
mw_longPosVectorPosition(v_longPosVectorNodeA),
?,
f_getGeoAnycastArea(c_area2)
)))) {
tc_ac.stop;
if(t_toCbf.running) {
t_toCbf.stop;
log("*** " & testcasename() & ": FAIL: GAC retransmitted before CBF timer expiration ***");
f_selfOrClientSyncAndVerdict(c_tbDone, e_error);
}
else {
log("*** " & testcasename() & ": PASS: GAC message received ***");
f_selfOrClientSyncAndVerdict(c_tbDone, e_success);
}
}
[] t_toCbf.timeout {
log("*** " & testcasename() & ": INFO: CBF timer elapsed ***");
repeat;
}
[] tc_ac.timeout {
log("*** " & testcasename() & ": FAIL: GAC message not received ***");
f_selfOrClientSyncAndVerdict(c_tbDone, e_error);
}
}
// Postamble
f_poNeighbour();
} // end f_GEONW_PON_GAC_NONAREA_CBF_BV_22_nodeC
/**
* @desc Behavior function for NodeD (TC_GEONW_PON_GAC_NONAREA_CBF_BV_22)
*/
function f_GEONW_PON_GAC_NONAREA_CBF_BV_22_nodeD() runs on ItsGeoNetworking {
// Local variables
var LongPosVector v_longPosVectorNodeA := f_getPosition(c_compNodeA);
// Preamble
f_prNeighbour();
f_selfOrClientSyncAndVerdict(c_prDone, e_success);
// Test Body
tc_ac.start;
alt {
[] geoNetworkingPort.receive(mw_geoNwInd(mw_geoNwPdu(mw_geoNwAnycastPacketWithArea(
mw_longPosVectorPosition(v_longPosVectorNodeA),
?,
f_getGeoAnycastArea(c_area2)
)))) {
tc_ac.stop;
log("*** " & testcasename() & ": PASS: GAC broadcasted ***");
f_selfOrClientSyncAndVerdict(c_tbDone, e_success);
}
[] tc_ac.timeout {
log("*** " & testcasename() & ": FAIL: GAC not broadcasted ***");
f_selfOrClientSyncAndVerdict(c_tbDone, e_error);
}
}
// Postamble
f_poNeighbour();
} // end f_GEONW_PON_GAC_NONAREA_CBF_BV_22_nodeD
} // end GEONW_PON_GAC_NONAREA_CBF_BV_22
} // end gacNonAreaContentionBasedForwarding
} // end gacNonAreaForwarding
group gacAreaForwarding {
group GEONW_PON_GAC_AREA_ALL_BV_01 {
16238
16239
16240
16241
16242
16243
16244
16245
16246
16247
16248
16249
16250
16251
16252
16253
16254
16255
16256
16257
16258
16259
16260
16261
16262
16263
16264
16265
16266
16267
16268
16269
16270
16271
16272
16273
16274
16275
16276
16277
16278
16279
16280
16281
16282
16283
16284
16285
16286
16287
16288
/**
* @desc TP Function for TC_GEONW_PON_GAC_AREA_ALL_BV_01
*/
function f_GEONW_PON_GAC_AREA_ALL_BV_01() runs on ItsMtc {
// Local variables
var ItsGeoNetworking v_nodeB;
var ItsGeoNetworking v_nodeD;
// Test control
if (not PICS_GN_GAC_SRC) {
log("*** " & testcasename() & ": PICS_GN_GAC_SRC required for executing the TC ***");
setverdict(inconc);
stop;
}
// Test component configuration
f_cf02Up();
// Preamble
// Start components
v_nodeB := f_getComponent(c_compNodeB);
v_nodeD := f_getComponent(c_compNodeD);
v_nodeB.start(f_GEONW_PON_GAC_AREA_ALL_BV_01_nodeB());
v_nodeD.start(f_GEONW_PON_GAC_AREA_ALL_BV_01_nodeD());
// Synchronization
f_serverSync2ClientsAndStop({c_prDone, c_tbDone});
// Cleanup
f_cf02Down();
} // end f_GEONW_PON_GAC_AREA_ALL_BV_01
/**
* @desc Behavior function for NodeB (TC_GEONW_PON_GAC_AREA_ALL_BV_01)
*/
function f_GEONW_PON_GAC_AREA_ALL_BV_01_nodeB() runs on ItsGeoNetworking {
// Local variables
var LongPosVector v_longPosVectorIut := f_getPosition(c_compIut);
// Preamble
f_prNeighbour();
f_selfOrClientSyncAndVerdict(c_prDone, e_success);
// Test Body
if ( not f_utTriggerEvent(m_generateGeoAnycastMessage(f_getArea(c_area1))) ) {
log("*** " & testcasename() & ": INCONC: Trigger failed ***");
f_selfOrClientSyncAndVerdict(c_tbDone, e_timeout);
tc_ac.start;
alt {
[] a_receiveGeoAnycastWithArea(
mw_longPosVectorPosition(v_longPosVectorIut),
?,
f_getGeoAnycastArea(c_area1)) {
tc_ac.stop;
log("*** " & testcasename() & ": PASS: GAC message received correctly ***");
f_selfOrClientSyncAndVerdict(c_tbDone, e_success);
}
[] tc_ac.timeout {
log("*** " & testcasename() & ": FAIL: GAC message not received ***");
f_selfOrClientSyncAndVerdict(c_tbDone, e_error);
}
// Postamble
f_poNeighbour();
} // end f_GEONW_PON_GAC_AREA_ALL_BV_01_nodeB
16312
16313
16314
16315
16316
16317
16318
16319
16320
16321
16322
16323
16324
16325
16326
16327
16328
16329
16330
16331
16332
16333
16334
16335
16336
16337
16338
16339
16340
16341
16342
16343
16344
/**
* @desc Behavior function for NodeD (TC_GEONW_PON_GAC_AREA_ALL_BV_01)
*/
function f_GEONW_PON_GAC_AREA_ALL_BV_01_nodeD() runs on ItsGeoNetworking {
// Local variables
var LongPosVector v_longPosVectorIut := f_getPosition(c_compIut);
// Preamble
f_prNeighbour();
f_selfOrClientSyncAndVerdict(c_prDone, e_success);
// Test Body
tc_ac.start;
alt {
[] a_receiveGeoAnycastWithArea(
mw_longPosVectorPosition(v_longPosVectorIut),
?,
f_getGeoAnycastArea(c_area1)) {
tc_ac.stop;
log("*** " & testcasename() & ": PASS: GAC message received correctly ***");
f_selfOrClientSyncAndVerdict(c_tbDone, e_success);
}
[] tc_ac.timeout {
log("*** " & testcasename() & ": FAIL: GAC message not received ***");
f_selfOrClientSyncAndVerdict(c_tbDone, e_error);
}
}
// Postamble
f_poNeighbour();
} // end f_GEONW_PON_GAC_AREA_ALL_BV_01_nodeD
16350
16351
16352
16353
16354
16355
16356
16357
16358
16359
16360
16361
16362
16363
16364
16365
16366
16367
16368
16369
16370
16371
16372
16373
16374
16375
16376
16377
16378
16379
16380
16381
16382
16383
/**
* @desc TP Function for TC_GEONW_PON_GAC_AREA_ALL_BV_02
*/
function f_GEONW_PON_GAC_AREA_ALL_BV_02() runs on ItsMtc {
// Local variables
var ItsGeoNetworking v_nodeB;
var ItsGeoNetworking v_nodeD;
// Test control
if (not PICS_GN_GAC_FWD) {
log("*** " & testcasename() & ": PICS_GN_GAC_FWD required for executing the TC ***");
setverdict(inconc);
stop;
}
// Test component configuration
f_cf02Up();
// Preamble
// Start components
v_nodeB := f_getComponent(c_compNodeB);
v_nodeD := f_getComponent(c_compNodeD);
v_nodeB.start(f_GEONW_PON_GAC_AREA_ALL_BV_02_nodeB());
v_nodeD.start(f_GEONW_PON_GAC_AREA_ALL_BV_02_nodeD());
// Synchronization
f_serverSync2ClientsAndStop({c_prDone, c_tbDone});
// Cleanup
f_cf02Down();
} // end f_GEONW_PON_GAC_AREA_ALL_BV_02
16385
16386
16387
16388
16389
16390
16391
16392
16393
16394
16395
16396
16397
16398
16399
16400
16401
16402
16403
16404
16405
/**
* @desc Behavior function for NodeB (TC_GEONW_PON_GAC_AREA_ALL_BV_02)
*/
function f_GEONW_PON_GAC_AREA_ALL_BV_02_nodeB() runs on ItsGeoNetworking {
// Local variables
var LongPosVector v_longPosVectorNodeB := f_getPosition(c_compNodeB);
// Preamble
f_prNeighbour();
f_selfOrClientSyncAndVerdict(c_prDone, e_success);
// Test Body
f_sendGeoNetMessage(
m_geoNwReq_linkLayerBroadcast(
m_geoNwPdu(
m_geoNwAnycastPacket(
v_longPosVectorNodeB,
vc_localSeqNumber,
f_getGeoAnycastArea(c_area1)
)
);
tc_noac.start;
alt {
[] a_receiveGeoAnycastWithArea(
mw_longPosVectorPosition(v_longPosVectorNodeB),
?,
f_getGeoAnycastArea(c_area1)) {
tc_noac.stop;
log("*** " & testcasename() & ": FAIL: GAC message retransmitted ***");
f_selfOrClientSyncAndVerdict(c_tbDone, e_error);
}
[] tc_noac.timeout {
log("*** " & testcasename() & ": PASS: GAC message not retransmitted ***");
f_selfOrClientSyncAndVerdict(c_tbDone, e_success);
}
// Postamble
f_poNeighbour();
} // end f_GEONW_PON_GAC_AREA_ALL_BV_02_nodeB
16431
16432
16433
16434
16435
16436
16437
16438
16439
16440
16441
16442
16443
16444
16445
16446
16447
16448
16449
16450
16451
16452
16453
16454
16455
16456
16457
/**
* @desc Behavior function for NodeD (TC_GEONW_PON_GAC_AREA_ALL_BV_02)
*/
function f_GEONW_PON_GAC_AREA_ALL_BV_02_nodeD() runs on ItsGeoNetworking {
// Local variables
var LongPosVector v_longPosVectorNodeB := f_getPosition(c_compNodeB);
// Preamble
f_prNeighbour();
f_selfOrClientSyncAndVerdict(c_prDone, e_success);
// Test Body
tc_noac.start;
alt {
[] a_receiveGeoAnycastWithArea(
mw_longPosVectorPosition(v_longPosVectorNodeB),
?,
f_getGeoAnycastArea(c_area1)) {
tc_noac.stop;
log("*** " & testcasename() & ": FAIL: GAC message retransmitted ***");
f_selfOrClientSyncAndVerdict(c_tbDone, e_error);
}
[] tc_noac.timeout {
log("*** " & testcasename() & ": PASS: GAC message not retransmitted ***");
f_selfOrClientSyncAndVerdict(c_tbDone, e_success);
}
// Postamble
f_poNeighbour();
} // end f_GEONW_PON_GAC_AREA_ALL_BV_02_nodeD
* @desc TP Function for TC_GEONW_PON_GAC_AREA_ALL_BV_05
function f_GEONW_PON_GAC_AREA_ALL_BV_05() runs on ItsGeoNetworking {
// Local variables
var LongPosVector v_longPosVectorNodeB;
var template (value) GeoNetworkingPdu v_gnPacket;
var integer i;
var GnRawPayload v_sentRawPayload;
if (not PICS_GN_GAC_DST) {
log("*** " & testcasename() & ": PICS_GN_GAC_DST required for executing the TC ***");
setverdict(inconc);
stop;
}
// Test component configuration
f_cf01Up();
v_longPosVectorNodeB := f_getPosition(c_compNodeB);
// Preamble
f_prNeighbour();
f_selfOrClientSyncAndVerdict(c_prDone, e_success);
16495
16496
16497
16498
16499
16500
16501
16502
16503
16504
16505
16506
16507
16508
16509
16510
16511
16512
// Test Body
v_gnPacket := m_geoNwPdu(m_geoNwAnycastPacket(
v_longPosVectorNodeB,
vc_localSeqNumber,
f_getGeoAnycastArea(c_area1)
)
);
f_sendGeoNetMessage(m_geoNwReq_linkLayerBroadcast(v_gnPacket));
f_sleep(PX_TAC);
v_sentRawPayload := f_adaptPayloadForUtInd_m(v_gnPacket.gnPacket.packet.payload);
for(i:=0; i < lengthof(vc_utInds) and not match(vc_utInds[i].rawPayload, v_sentRawPayload); i:=i+1) {
// empty on purpose
}
if(i < lengthof(vc_utInds)) {
log("*** " & testcasename() & ": PASS: GN was transmitted to upper layer ***");
f_selfOrClientSyncAndVerdict(c_tbDone, e_success);
else {
log("*** " & testcasename() & ": FAIL: GN was not transmitted to upper layer ***");
f_selfOrClientSyncAndVerdict(c_tbDone, e_error);
}
log("*** " & testcasename() & ": GAC packet passed to Upper Layer ***");
f_selfOrClientSyncAndVerdict(c_tbDone, e_success);
// Postamble
f_poNeighbour();
16530
16531
16532
16533
16534
16535
16536
16537
16538
16539
16540
16541
16542
16543
16544
16545
16546
16547
16548
16549
16550
16551
16552
16553
16554
16555
16556
16557
16558
16559
16560
16561
16562
16563
16564
/**
* @desc TP Function for TC_GEONW_PON_GAC_AREA_ALL_BO_08
*/
function f_GEONW_PON_GAC_AREA_ALL_BO_08() runs on ItsMtc {
// Local variables
var ItsGeoNetworking v_nodeB;
var ItsGeoNetworking v_nodeD;
var template (value) GeoNetworkingPdu v_gnPacket;
// Test control
if (not PICS_GN_GAC_DST) {
log("*** " & testcasename() & ": PICS_GN_GAC_DST required for executing the TC ***");
setverdict(inconc);
stop;
}
// Test component configuration
f_cf02Up(c_compNodeB);
// Preamble
// Start components
v_nodeB := f_getComponent(c_compNodeB);
v_nodeD := f_getComponent(c_compNodeD);
v_nodeB.start(f_GEONW_PON_GAC_AREA_ALL_BO_08_nodeB());
v_nodeD.start(f_GEONW_PON_GAC_AREA_ALL_BO_08_nodeD());
// Synchronization
f_serverSync2ClientsAndStop({c_prDone, c_tbDone});
// Cleanup
f_cf02Down();
} // end f_GEONW_PON_GAC_AREA_ALL_BO_08
16566
16567
16568
16569
16570
16571
16572
16573
16574
16575
16576
16577
16578
16579
16580
16581
16582
16583
16584
16585
16586
16587
16588
16589
16590
16591
16592
16593
16594
16595
16596
16597
/**
* @desc Behavior function for NodeB (TC_GEONW_PON_GAC_AREA_ALL_BO_08)
*/
function f_GEONW_PON_GAC_AREA_ALL_BO_08_nodeB() runs on ItsGeoNetworking {
// Local variables
var LongPosVector v_longPosVectorNodeD := f_getPosition(c_compNodeD);
var template (value) GeoNetworkingPdu v_gnPacket;
var integer i;
var GnRawPayload v_sentRawPayload;
// Preamble
f_prNeighbour();
f_sleep(PX_TAC);
v_gnPacket := m_geoNwPdu(m_geoNwAnycastPacket(
v_longPosVectorNodeD,
vc_localSeqNumber,
f_getGeoAnycastArea(c_area1)
),
-,
c_defaultHopLimit
);
v_sentRawPayload := f_adaptPayloadForUtInd_m(v_gnPacket.gnPacket.packet.payload);
for(i:=0; i < lengthof(vc_utInds) and not match(vc_utInds[i].rawPayload, v_sentRawPayload); i:=i+1) {
// empty on purpose
}
if(i < lengthof(vc_utInds)) {
log("*** " & testcasename() & ": PASS: GN was transmitted to upper layer ***");
vc_utInds := {};
f_selfOrClientSyncAndVerdict(c_prDone, e_success);
else {
log("*** " & testcasename() & ": INCONC: GN was not transmitted to upper layer ***");
f_selfOrClientSyncAndVerdict(c_prDone, e_error);
// Test Body
v_gnPacket.basicHeader.routerHopLimit := valueof(v_gnPacket.basicHeader.routerHopLimit) / 2;
f_sendGeoNetMessage(m_geoNwReq_linkLayerBroadcast(v_gnPacket));
f_sleep(PX_TAC);
if(0 != lengthof(vc_utInds)) {
log("*** " & testcasename() & ": FAIL: GN was transmitted to upper layer ***");
f_selfOrClientSyncAndVerdict(c_tbDone, e_error);
}
else {
log("*** " & testcasename() & ": PASS: GN was NOT transmitted to upper layer ***");
f_selfOrClientSyncAndVerdict(c_tbDone, e_success);
}
// Postamble
f_poNeighbour();
} // end f_GEONW_PON_GAC_AREA_ALL_BO_08_nodeB
16624
16625
16626
16627
16628
16629
16630
16631
16632
16633
16634
16635
16636
16637
16638
16639
16640
16641
16642
16643
16644
16645
16646
16647
16648
16649
16650
16651
16652
16653
16654
/**
* @desc Behavior function for NodeD (TC_GEONW_PON_GAC_AREA_ALL_BO_08)
*/
function f_GEONW_PON_GAC_AREA_ALL_BO_08_nodeD() runs on ItsGeoNetworking {
// Local variables
var LongPosVector v_longPosVectorNodeD := f_getPosition(c_compNodeD);
var template (value) GeoNetworkingPdu v_gnPacket;
var integer i;
// Preamble
f_prNeighbour();
v_gnPacket := m_geoNwPdu(m_geoNwAnycastPacket(
v_longPosVectorNodeD,
vc_localSeqNumber,
f_getGeoAnycastArea(c_area1)
),
-,
c_defaultHopLimit
);
f_sendGeoNetMessage(m_geoNwReq_linkLayerBroadcast(v_gnPacket));
f_selfOrClientSyncAndVerdict(c_prDone, e_success);
// Test Body
f_selfOrClientSyncAndVerdict(c_tbDone, e_success);
// Postamble
f_poNeighbour();
} // end f_GEONW_PON_GAC_AREA_ALL_BO_08_nodeD
} // end gacAreaForwarding
} // end geoGeoAnycast
16661
16662
16663
16664
16665
16666
16667
16668
16669
16670
16671
16672
16673
16674
16675
16676
16677
16678
16679
16680
16681
16682
16683
16684
16685
16686
16687
16688
16689
16690
16691
16692
16693
16694
16695
16696
16697
16698
16699
16700
16701
16702
16703
16704
16705
16706
16707
16708
16709
16710
16711
16712
16713
16714
16715
16716
16717
16718
16719
16720
16721
16722
16723
16724
16725
16726
16727
16728
16729
16730
16731
16732
16733
16734
16735
16736
16737
16738
16739
16740
16741
16742
16743
16744
16745
16746
16747
16748
16749
16750
16751
16752
16753
16754
16755
16756
16757
16758
16759
16760
16761
16762
16763
16764
16765
16766
16767
16768
16769
16770
16771
16772
16773
16774
16775
16776
16777
16778
16779
16780
16781
16782
16783
16784
16785
16786
16787
16788
16789
16790
16791
16792
16793
16794
16795
16796
16797
16798
16799
16800
16801
16802
16803
16804
16805
16806
16807
16808
16809
16810
16811
16812
16813
16814
16815
16816
16817
16818
16819
16820
16821
16822
16823
16824
16825
16826
16827
16828
16829
16830
16831
16832
16833
16834
16835
16836
16837
16838
16839
16840
16841
16842
16843
16844
16845
16846
16847
16848
16849
16850
16851
16852
16853
16854
16855
16856
16857
16858
16859
16860
16861
16862
16863
16864
16865
16866
16867
16868
16869
16870
16871
16872
16873
16874
16875
16876
16877
16878
16879
16880
16881
16882
16883
16884
16885
16886
16887
16888
16889
16890
16891
16892
16893
16894
16895
16896
16897
16898
16899
16900
16901
16902
16903
16904
16905
16906
16907
16908
16909
16910
16911
16912
16913
16914
16915
16916
16917
16918
16919
16920
16921
16922
16923
16924
16925
16926
16927
16928
16929
16930
16931
16932
16933
16934
16935
16936
16937
16938
16939
16940
16941
16942
16943
16944
16945
16946
16947
16948
16949
16950
16951
16952
16953
16954
16955
16956
16957
16958
16959
16960
16961
16962
16963
16964
16965
16966
16967
16968
16969
16970
16971
16972
16973
16974
16975
16976
16977
16978
16979
16980
16981
16982
16983
16984
16985
16986
16987
16988
16989
16990
16991
16992
16993
} // 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;