diff --git a/ItsGeoNetworking_TestCases.ttcn b/ItsGeoNetworking_TestCases.ttcn
new file mode 100644
index 0000000000000000000000000000000000000000..af43f884a666f464d60292b0eee36a49c8e0606c
--- /dev/null
+++ b/ItsGeoNetworking_TestCases.ttcn
@@ -0,0 +1,6267 @@
+/**
+ * @author ETSI / STF405 / STF449 / STF484
+ * @version $Url: https://oldforge.etsi.org/svn/ITS/tags/20170222_STF527_Final/ttcn/AtsGeoNetworking/ItsGeoNetworking_TestCases.ttcn $
+ * $Id: ItsGeoNetworking_TestCases.ttcn 2700 2017-05-29 13:17:49Z berge $
+ * @desc GeoNetworking Testcases
+ * @copyright ETSI Copyright Notification
+ * No part may be reproduced except as authorized by written permission.
+ * The copyright and the foregoing restriction extend to reproduction in all media.
+ * All rights reserved.
+ *
+ */
+module ItsGeoNetworking_TestCases {
+
+ // LibIts
+ import from LibItsGeoNetworking_TestSystem all;
+
+ // Its
+ import from ItsGeoNetworking_TpFunctions all;
+
+ // 6.2.1
+ group geoFormatingAndDataValidity {
+
+ // 6.2.1.1
+ group geoFdvBasicHeader {
+
+ /**
+ * @desc Check defined values of default Gn parameters in the basic header
+ *
+ * Pics Selection: PICS_GN_BASIC_HEADER
+ * Config Id: CF01
+ * Initial conditions:
+ * with {
+ * the IUT being in the "initial state"
+ * }
+ * Expected behaviour:
+ * ensure that {
+ * when {
+ * the IUT is requested to send a GBC packet
+ * }
+ * then {
+ * the IUT sends a GBC packet
+ * containing a correctly formatted Basic Header
+ * containing version field
+ * set to itsGnProtocolVersion MIB parameter
+ * containing RHL field
+ * set to itsGnDefaultHopLimit MIB parameter
+ * }
+ * }
+ *
+ *
+ * @see ETSI TS 102 871-2 v1.4.1 TP/GEONW/FDV/BAH/BV-01
+ * @reference EN 302 636-4-1 [1], clauses 9.3.2 , 8.6.2 and Annex G
+ */
+ testcase TC_GEONW_FDV_BAH_BV_01() runs on ItsGeoNetworking system ItsGeoNetworkingSystem {
+
+ f_GEONW_FDV_BAH_BV_01();
+
+ } // End of testcase TC_GEONW_FDV_BAH_BV_01
+
+ /**
+ * @desc Check discard of packet having incorrect version
+ *
+ * Pics Selection: PICS_GN_BASIC_HEADER
+ * Config Id: CF01
+ * Initial conditions:
+ * with {
+ * the IUT being in the "initial state"
+ * the IUT having received a SHB packet from ItsNodeB
+ * containing a correctly formatted Basic Header
+ * containing version field
+ * set to value equal to itsGnProtocolVersion MIB parameter
+ * and the IUT having passed the received SHB packet to Upper Layer
+ * }
+ * Expected behaviour:
+ * ensure that {
+ * when {
+ * the IUT receives a SHB packet from ItsNodeB
+ * containing a correctly formatted Basic Header
+ * containing version field
+ * set to value not equal to itsGnProtocolVersion MIB parameter
+ * }
+ * then {
+ * the IUT discards the received SHB packet
+ * }
+ * }
+ *
+ *
+ * @see ETSI TS 102 871-2 v1.4.1 TP/GEONW/FDV/BAH/BI-02
+ * @reference EN 302 636-4-1 [1], clauses 9.3.3
+ */
+ testcase TC_GEONW_FDV_BAH_BI_02() runs on ItsGeoNetworking system ItsGeoNetworkingSystem {
+
+ f_GEONW_FDV_BAH_BI_02();
+
+ } // End of testcase TC_GEONW_FDV_BAH_BI_02
+
+ } // End of group geoFdvBasicHeader
+
+ // 6.2.1.2
+ group geoFdvCommonHeader {
+
+ /**
+ * @desc Common GeoNetworking header validity test (PL field)
+ *
+ * Pics Selection: PICS_GN_COMMON_HEADER
+ * Config Id: CF01
+ * Initial conditions:
+ * with {
+ * the IUT being in the "initial state"
+ * }
+ * Expected behaviour:
+ * ensure that {
+ * when {
+ * the IUT generates a Beacon message
+ * }
+ * then {
+ * the IUT sends a GeoNetworking message
+ * containing a correctly formatted Common Header
+ * containing HT field
+ * set to '1' (BEACON)
+ * containing HST field
+ * set to '0' (UNSPECIFIED)
+ * containing PL field
+ * set to '0'
+ * }
+ * }
+ *
+ *
+ * @see ETSI TS 102 871-2 v1.4.1 TP/GEONW/FDV/COH/BV-01
+ * @reference EN 302 636-4-1 [1], clauses 8.7.2, 8.7.4, 8.8.6 and 9.3.6
+ */
+ testcase TC_GEONW_FDV_COH_BV_01() runs on ItsGeoNetworking system ItsGeoNetworkingSystem {
+
+ f_GEONW_FDV_COH_BV_01();
+
+ } // End of testcase TC_GEONW_FDV_COH_BV_01
+
+ /**
+ * @desc Common GeoNetworking header validity test (PL field)
+ *
+ * Pics Selection: PICS_GN_COMMON_HEADER
+ * Config Id: CF01
+ * Initial conditions:
+ * with {
+ * the IUT being in the "initial state"
+ * }
+ * Expected behaviour:
+ * ensure that {
+ * when {
+ * the IUT is requested to send a SHB packet
+ * }
+ * then {
+ * the IUT sends a GeoNetworking packet
+ * containing a correctly formatted Common Header
+ * containing HT field
+ * set to '5' (TSB)
+ * containing HST field
+ * set to '0' (SINGLE_HOP)
+ * containing MHL field
+ * set to '1'
+ * containing PL field
+ * set to the length of the included payload
+ * containing a payload
+ * }
+ * }
+ *
+ *
+ * @see ETSI TS 102 871-2 v1.4.1 TP/GEONW/FDV/COH/BV-02
+ * @reference EN 302 636-4-1 [1], clauses 8.7.2, 8.7.4, 8.8.4, 9.3.4 and 9.3.10
+ */
+ testcase TC_GEONW_FDV_COH_BV_02() runs on ItsGeoNetworking system ItsGeoNetworkingSystem {
+
+ f_GEONW_FDV_COH_BV_02();
+
+ } // End of testcase TC_GEONW_FDV_COH_BV_02
+
+ /**
+ * @desc Check defined values of default Gn parameters in the common header
+ *
+ * Pics Selection: PICS_GN_COMMON_HEADER
+ * Config Id: CF01
+ * Initial conditions:
+ * with {
+ * the IUT being in the "initial state"
+ * }
+ * Expected behaviour:
+ * ensure that {
+ * when {
+ * the IUT is requested to send a GBC packet
+ * }
+ * then {
+ * the IUT sends a GBC packet
+ * containing a correctly formatted Common Header
+ * containing Flags field
+ * indicating value equalling the itsGnIsMobile MIB parameter
+ * containing MHL field
+ * set to itsGnDefaultHopLimit MIB parameter
+ * }
+ * }
+ *
+ *
+ * @version 0.0.11
+ * @see ETSI TS 102 871-2 v1.4.1 TP/GEONW/FDV/COH/BV-03
+ * @reference EN 302 636-4-1 [1], clauses 8.7.2, 8.8.2, 9.3.4 and Annex G
+ */
+ testcase TC_GEONW_FDV_COH_BV_03() runs on ItsGeoNetworking system ItsGeoNetworkingSystem {
+
+ f_GEONW_FDV_COH_BV_03();
+
+ } // End of testcase TC_GEONW_FDV_COH_BV_03
+
+ /**
+ * @desc Check that a received TSB packet is discarded if received with RHL > MHL
+ *
+ * Pics Selection: PICS_GN_COMMON_HEADER
+ * Config Id: CF02
+ * Initial conditions:
+ * with {
+ * the IUT being in the "initial state" and
+ * the IUT having received Beacon information from ItsNodeD and
+ * the IUT having received Beacon information from ItsNodeB
+ * }
+ * Expected behaviour:
+ * ensure that {
+ * when {
+ * the IUT receives a TSB packet
+ * containing Basic Header
+ * containing RHL field
+ * indicating HL1 higher than MHL1
+ * containing Common Header
+ * containing MHL field
+ * indicating MHL1
+ * }
+ * then {
+ * the IUT discards the TSB packet
+ * }
+ * }
+ *
+ *
+ * @version 0.0.11
+ * @see ETSI TS 102 871-2 v1.4.1 TP/GEONW/FDV/COH/BO-04
+ * @reference EN 302 636-4-1 [1], clauses 9.3.5
+ */
+ testcase TC_GEONW_FDV_COH_BO_04() runs on ItsMtc system ItsGeoNetworkingSystem {
+
+ f_GEONW_FDV_COH_BO_04();
+
+ } // End of testcase TC_GEONW_FDV_COH_BV_04
+
+ } // End of group geoFdvCommonHeader
+
+ // 6.2.1.3
+ group geoFdvBeacon {
+
+ /**
+ * @desc Beacon header validity test
+ *
+ * Pics Selection: PICS_GN_BEACON_SRC
+ * Config Id: CF01
+ * Initial conditions:
+ * with {
+ * the IUT being in the "initial state"
+ * }
+ * Expected behaviour:
+ * ensure that {
+ * when {
+ * the IUT generates a Beacon packet
+ * }
+ * then {
+ * the IUT sends a GeoNetworking packet
+ * containing a correctly formatted Common Header
+ * containing HT field
+ * set to '1' (BEACON)
+ * containing HST field
+ * set to '0' (UNSPECIFIED)
+ * containing NH field
+ * set to '0' (UNSPECIFIED)
+ * containing Extended Header
+ * containing SOPV
+ * indicating LPV of the IUT
+ * }
+ * }
+ *
+ *
+ * @see ETSI TS 102 871-2 v1.4.1 TP/GEONW/FDV/BEA/BV-01
+ * @reference EN 302 636-4-1 [1], clauses 8.7.2, 8.8.6 and 9.3.6
+ */
+ testcase TC_GEONW_FDV_BEA_BV_01() runs on ItsGeoNetworking system ItsGeoNetworkingSystem {
+
+ f_GEONW_FDV_BEA_BV_01();
+
+ } // End of testcase TC_GEONW_FDV_BEA_BV_01
+
+ /**
+ * @desc GeoNetworking address validity test
+ *
+ * Pics Selection: PICS_GN_BEACON_SRC
+ * Config Id: CF01
+ * Initial conditions:
+ * with {
+ * the IUT being in the "initial state"
+ * }
+ * Expected behaviour:
+ * ensure that {
+ * when {
+ * the IUT generates a Beacon packet
+ * }
+ * then {
+ * the IUT sends a GeoNetworking packet
+ * containing SOPV field
+ * containing GN_ADDR field
+ * containing ST field
+ * indicating the ITS Station type
+ * containing SCC field
+ * indicating the ITS Station country code
+ * }
+ * }
+ * NOTE: Correct Source GeoNetworking address value: itsGnLocalGnAddr MIB parameter value.
+ *
+ *
+ *
+ * @see ETSI TS 102 871-2 v1.4.1 TP/GEONW/FDV/BEA/BV-02
+ * @reference EN 302 636-4-1 [1], clauses 6.3 and 8.8.6.2
+ */
+ testcase TC_GEONW_FDV_BEA_BV_02() runs on ItsGeoNetworking system ItsGeoNetworkingSystem {
+
+ f_GEONW_FDV_BEA_BV_02();
+
+ } // End of testcase TC_GEONW_FDV_BEA_BV_02
+
+ /**
+ * @desc Local Position Vector validity test, involving comparison against sensor input data
+ *
+ * Pics Selection: PICS_GN_BEACON_SRC
+ * Config Id: CF01
+ * Initial conditions:
+ * with {
+ * the IUT being in the "initial state"
+ * }
+ * Expected behaviour:
+ * ensure that {
+ * when {
+ * the IUT generates a Beacon packet
+ * }
+ * then {
+ * the IUT sends a GeoNetworking packet
+ * containing a correct SOPV field
+ * indicating the latest position of the IUT
+ * }
+ * }
+ *
+ *
+ * @see ETSI TS 102 871-2 v1.4.1 TP/GEONW/FDV/BEA/BV-03
+ * @reference EN 302 636-4-1 [1], clauses 8.5.2.2 and 8.8.6.2
+ */
+ testcase TC_GEONW_FDV_BEA_BV_03() runs on ItsGeoNetworking system ItsGeoNetworkingSystem {
+
+ f_GEONW_FDV_BEA_BV_03();
+
+ } // End of testcase TC_GEONW_FDV_BEA_BV_03
+
+ /**
+ * @desc Local Position Vector validity test, involving timestamp comparison against sensor input data
+ *
+ * Pics Selection: PICS_GN_BEACON_SRC
+ * Config Id: CF01
+ * Initial conditions:
+ * with {
+ * the IUT being in the "initial state"
+ * }
+ * Expected behaviour:
+ * ensure that {
+ * when {
+ * the IUT generates a Beacon packet
+ * }
+ * then {
+ * the IUT sends a GeoNetworking packet
+ * containing a correct SOPV field
+ * indicating the timestamp value corresponding to the sensor acquisition time of position data
+ * }
+ * }
+ *
+ *
+ * @see ETSI TS 102 871-2 v1.4.1 TP/GEONW/FDV/BEA/BV-04
+ * @reference EN 302 636-4-1 [1], clauses 8.5.2.2 and 8.8.6.2
+ */
+ testcase TC_GEONW_FDV_BEA_BV_04() runs on ItsGeoNetworking system ItsGeoNetworkingSystem {
+
+ f_GEONW_FDV_BEA_BV_04();
+
+ } // End of testcase TC_GEONW_FDV_BEA_BV_04
+
+ } // End of group geoFdvBeacon
+
+ // 6.2.1.4
+ group geoFdvGeoUnicast {
+
+ /**
+ * @desc GUC header validity
+ *
+ * Pics Selection: PICS_GN_GUC_SRC
+ * Config Id: CF01
+ * Initial conditions:
+ * with {
+ * the IUT being in the "initial state" and
+ * the IUT having received Beacon information from ItsNodeB
+ * }
+ * Expected behaviour:
+ * ensure that {
+ * when {
+ * the IUT is requested to send a GUC packet to ItsNodeB
+ * }
+ * then {
+ * the IUT sends a GeoNetworking packet
+ * containing a correctly formatted Common Header
+ * containing HT field
+ * set to '2' (GEOUNICAST)
+ * containing HST field
+ * set to '0' (UNSPECIFIED)
+ * containing GUC Extended Header
+ * containing DEPV field
+ * indicating position of the ItsNodeB
+ * containing SOPV field
+ * indicating position of the IUT
+ * }
+ * }
+ *
+ *
+ * @see ETSI TS 102 871-2 v1.4.1 TP/GEONW/FDV/GUC/BV-01
+ * @reference EN 302 636-4-1 [1], clauses 8.7.2, 8.8.2.2 and 9.3.8
+ */
+ testcase TC_GEONW_FDV_GUC_BV_01() runs on ItsGeoNetworking system ItsGeoNetworkingSystem {
+
+ f_GEONW_FDV_GUC_BV_01();
+
+ } // End of testcase TC_GEONW_FDV_GUC_BV_01
+
+ } // End of group geoFdvGeoUnicast
+
+ // 6.2.1.5
+ group geoFdvGeoBroadcast {
+
+ /**
+ * @desc GBC header validity
+ *
+ * Pics Selection: PICS_GN_GBC_SRC
+ * Config Id: CF01
+ * Initial conditions:
+ * with {
+ * the IUT being in the "initial state" and
+ * the IUT having received Beacon information from the ItsNodeB
+ * }
+ * Expected behaviour:
+ * ensure that {
+ * when {
+ * the IUT is requested to send a GBC packet
+ * }
+ * then {
+ * the IUT sends a GeoNetworking packet
+ * containing a correctly formatted Common Header
+ * containing HT field
+ * set to '4' (GEOBROADCAST)
+ * containing GBC Extended Header
+ * containing SOPV field
+ * indicating position of the IUT
+ * }
+ * }
+ *
+ *
+ * @see ETSI TS 102 871-2 v1.4.1 TP/GEONW/FDV/GBC/BV-01
+ * @reference EN 302 636-4-1 [1], clauses 8.7.2, 8.7.4, 8.8.5.2 and 9.3.11
+ */
+ testcase TC_GEONW_FDV_GBC_BV_01() runs on ItsGeoNetworking system ItsGeoNetworkingSystem {
+
+ f_GEONW_FDV_GBC_BV_01();
+
+ } // End of testcase TC_GEONW_FDV_GBC_BV_01
+
+ } // End of group geoFdvGeoBroadcast
+
+ // 6.2.1.6
+ group geoFdvGeoAnycast {
+
+ /**
+ * @desc GAC header validity
+ *
+ * Pics Selection: PICS_GN_GAC_SRC
+ * Config Id: CF01
+ * Initial conditions:
+ * with {
+ * the IUT being in the "initial state" and
+ * the IUT having received Beacon information from the ItsNodeB
+ * }
+ * Expected behaviour:
+ * ensure that {
+ * when {
+ * the IUT is requested to send a GAC packet
+ * }
+ * then {
+ * the IUT sends a GeoNetworking packet
+ * containing a correctly formatted Common Header
+ * containing HT field
+ * set to '3' (GEOANYCAST)
+ * containing GAC Extended Header
+ * containing SOPV field
+ * indicating position of IUT
+ * }
+ * }
+ *
+ *
+ * @see ETSI TS 102 871-2 v1.4.1 TP/GEONW/FDV/GAC/BV-01
+ * @reference EN 302 636-4-1 [1], clauses 8.7.2, 8.7.4, 8.8.5.2 and 9.3.12
+ */
+ testcase TC_GEONW_FDV_GAC_BV_01() runs on ItsGeoNetworking system ItsGeoNetworkingSystem {
+
+ f_GEONW_FDV_GAC_BV_01();
+
+ } // End of testcase TC_GEONW_FDV_GAC_BV_01
+
+ } // End of group geoFdvGeoAnycast
+
+ // 6.2.1.7
+ group geoFdvSingleHopBroadcast {
+
+ /**
+ * @desc SHB header validity
+ *
+ * Pics Selection: PICS_GN_SHB_SRC
+ * Config Id: CF01
+ * Initial conditions:
+ * with {
+ * the IUT being in the "initial state" and
+ * the IUT having received Beacon information from the ItsNodeB
+ * }
+ * Expected behaviour:
+ * ensure that {
+ * when {
+ * the IUT is requested to send a SHB packet
+ * }
+ * then {
+ * the IUT sends a GeoNetworking packet
+ * containing a correctly formatted Common Header
+ * containing HT field
+ * set to '5' (TSB)
+ * containing HST field
+ * set to '0' (SINGLE_HOP)
+ * containing MHL field
+ * set to '1'
+ * containing Extended Header
+ * containing SOPV
+ * indicating LPV of the IUT
+ * }
+ * }
+ *
+ *
+ * @see ETSI TS 102 871-2 v1.4.1 TP/GEONW/FDV/SHB/BV-01
+ * @reference EN 302 636-4-1 [1], clauses 8.7.2, 8.7.4, 9.3.4, 8.8.4.2 and 9.3.10
+ */
+ testcase TC_GEONW_FDV_SHB_BV_01() runs on ItsGeoNetworking system ItsGeoNetworkingSystem {
+
+ f_GEONW_FDV_SHB_BV_01();
+
+ } // End of testcase TC_GEONW_FDV_SHB_BV_01
+
+ } // End of group geoFdvSingleHopBroadcast
+
+ // 6.2.1.8
+ group geoFdvTopologicallyScopedBroadcast {
+
+ /**
+ * @desc TSB header validity
+ *
+ * Pics Selection: PICS_GN_TSB_SRC
+ * Config Id: CF01
+ * Initial conditions:
+ * with {
+ * the IUT being in the "initial state" and
+ * the IUT having received Beacon information from the ItsNodeB
+ * }
+ * Expected behaviour:
+ * ensure that {
+ * when {
+ * the IUT is requested to send a TSB packet
+ * }
+ * then {
+ * the IUT sends a GeoNetworking packet
+ * containing a correctly formatted Common Header
+ * containing HT field
+ * set to '5' (TSB)
+ * containing HST field
+ * set to '1' (MULTI_HOP)
+ * containing TSB Extended Header
+ * containing SOPV field
+ * indicating position of the IUT
+ * }
+ * }
+ *
+ *
+ * @see ETSI TS 102 871-2 v1.4.1 TP/GEONW/FDV/TSB/BV-01
+ * @reference EN 302 636-4-1 [1], clauses 8.7.2, 8.7.4, 8.8.3.2 and 9.3.9
+ */
+ testcase TC_GEONW_FDV_TSB_BV_01() runs on ItsGeoNetworking system ItsGeoNetworkingSystem {
+
+ f_GEONW_FDV_TSB_BV_01();
+
+ } // End of testcase TC_GEONW_FDV_TSB_BV_01
+
+ } // End of group geoFdvTopologicallyScopedBroadcast
+
+ } // End of group geoFormatingAndDataValidity
+
+ // 6.2.2
+ group geoProtocolOperation {
+
+ // 6.2.2.1
+ group geoLocationTable {
+
+ /**
+ * @desc Check insertion of new entries into location table from Beacon header
+ *
+ * Pics Selection: PICS_GN_GUC_SRC AND PICS_GN_BEACON_DST
+ * Config Id: CF01
+ * Initial conditions:
+ * with {
+ * the IUT being in the "initial state" and
+ * the IUT having received Beacon information from the ItsNodeB and
+ * the lifetime of the ItsNodeB Location Table entry not being expired
+ * }
+ * Expected behaviour:
+ * ensure that {
+ * when {
+ * the IUT is requested to send a GUC packet to ItsNodeB
+ * }
+ * then {
+ * the IUT does not send a GeoNetworking packet
+ * containing a LS_REQUEST
+ * containing Request field
+ * containing GN_ADDR
+ * containing M_ID
+ * indicating ItsNodeB
+ * the IUT sends a GeoNetworking packet
+ * containing a correctly formatted Common Header
+ * containing HT field
+ * set to '2' (GEOUNICAST)
+ * containing GUC Extended Header
+ * containing DEPV field
+ * indicating same position as the SOPV value of the Beacon information received from ItsNodeB
+ * }
+ * }
+ *
+ *
+ * @see ETSI TS 102 871-2 v1.4.1 TP/GEONW/PON/LOT/BV-01
+ * @reference EN 302 636-4-1 [1], clauses 9.3.10.3, 9.3.6.2 and 9.3.8.2
+ */
+ testcase TC_GEONW_PON_LOT_BV_01() runs on ItsGeoNetworking system ItsGeoNetworkingSystem {
+
+ f_GEONW_PON_LOT_BV_01();
+
+ } // End of testcase TC_GEONW_PON_LOT_BV_01
+
+ /**
+ * @desc Check insertion of new entries into location table from LS Reply data
+ *
+ * Pics Selection: PICS_GN_LS_REQ_SRC AND PICS_GN_LS_REP_DST
+ * Config Id: CF01
+ * Initial conditions:
+ * with {
+ * the IUT being in the "initial state" and
+ * the IUT having been requested to send a first GUC packet to ItsNodeA and
+ * the IUT having sent a LS_REQUEST packet
+ * containing Request field
+ * containing GN_ADDR
+ * containing M_ID
+ * indicating ItsNodeA
+ * the IUT having received a LS_REPLY packet from ItsNodeA
+ * containing SOPV field and
+ * the IUT having sent the GUC packet to ItsNodeA and
+ * the lifetime of the ItsNodeA Location Table entry not being expired
+ * }
+ * Expected behaviour:
+ * ensure that {
+ * when {
+ * the IUT is requested to send a second GUC packet to ItsNodeA
+ * }
+ * then {
+ * the IUT does not send a GeoNetworking packet
+ * containing a LS_REQUEST
+ * containing Request field
+ * containing GN_ADDR
+ * containing M_ID
+ * indicating ItsNodeA
+ * the IUT sends a GeoNetworking packet
+ * containing a correctly formatted Common Header
+ * containing HT field
+ * set to '2' (GEOUNICAST)
+ * containing GUC Extended Header
+ * containing DEPV field
+ * indicating same position as the SOPV value of the LS_REPLY packet received from ItsNodeA
+ * }
+ * }
+ *
+ *
+ * @see ETSI TS 102 871-2 v1.4.1 TP/GEONW/PON/LOT/BV-02
+ * @reference EN 302 636-4-1 [1], clauses 9.3.7.1.4, 9.3.7.1.2 and 9.3.8.2
+ */
+ testcase TC_GEONW_PON_LOT_BV_02() runs on ItsGeoNetworking system ItsGeoNetworkingSystem {
+
+ f_GEONW_PON_LOT_BV_02();
+
+ } // End of testcase TC_GEONW_PON_LOT_BV_02
+
+ /**
+ * @desc Check insertion of new entries into location table from extended header processing (e.g. GUC header)
+ *
+ * Pics Selection: PICS_GN_BEACON_DST
+ * Config Id: CF01
+ * Initial conditions:
+ * with {
+ * the IUT being in the "initial state" and
+ * the IUT not having received any beacon from NODE
+ * the IUT having received a MESSAGE from originated by NODE
+ * }
+ * MESSAGE: Beacon packet
+ *
+ * Expected behaviour:
+ * ensure that {
+ * when {
+ * the IUT is requested to send a GUC packet to NODE
+ * }
+ * then {
+ * the IUT does not send a GeoNetworking packet
+ * containing a LS_REQUEST Extended Header
+ * containing Request field
+ * containing GN_ADDR
+ * containing M_ID
+ * indicating NODE
+ * the IUT sends a GeoNetworking packet
+ * containing a correctly formatted Common Header
+ * containing HT field
+ * set to '2' (GEOUNICAST)
+ * containing GUC Extended Header
+ * containing DEPV field
+ * indicating same position as the SOPV of the MESSAGE received from NODE
+ * }
+ * }
+ *
+ *
+ * @see ETSI TS 102 871-2 v1.4.1 TP/GEONW/PON/LOT/BV-03
+ * @reference EN 302 636-4-1 [1], clauses 9.3.8.4, 9.3.12.3, 9.3.9.3, 9.3.10.3, 9.3.7.3 and 9.3.8.2
+ */
+ testcase TC_GEONW_PON_LOT_BV_03_01() runs on ItsGeoNetworking system ItsGeoNetworkingSystem {
+
+ f_GEONW_PON_LOT_BV_03_01();
+
+ } // End of testcase TC_GEONW_PON_LOT_BV_03_01
+
+ /**
+ * @desc Check insertion of new entries into location table from extended header processing (e.g. GUC header)
+ *
+ * Pics Selection: PICS_GN_GUC_DST
+ * Config Id: CF01
+ * Initial conditions:
+ * with {
+ * the IUT being in the "initial state" and
+ * the IUT not having received any beacon from NODE
+ * the IUT having received a MESSAGE from originated by NODE
+ * }
+ * MESSAGE: GUC packet
+ *
+ * Expected behaviour:
+ * ensure that {
+ * when {
+ * the IUT is requested to send a GUC packet to NODE
+ * }
+ * then {
+ * the IUT does not send a GeoNetworking packet
+ * containing a LS_REQUEST Extended Header
+ * containing Request field
+ * containing GN_ADDR
+ * containing M_ID
+ * indicating NODE
+ * the IUT sends a GeoNetworking packet
+ * containing a correctly formatted Common Header
+ * containing HT field
+ * set to '2' (GEOUNICAST)
+ * containing GUC Extended Header
+ * containing DEPV field
+ * indicating same position as the SOPV of the MESSAGE received from NODE
+ * }
+ * }
+ *
+ *
+ * @see ETSI TS 102 871-2 v1.4.1 TP/GEONW/PON/LOT/BV-03
+ * @reference EN 302 636-4-1 [1], clauses 9.3.8.4, 9.3.12.3, 9.3.9.3, 9.3.10.3, 9.3.7.3 and 9.3.8.2
+ */
+ testcase TC_GEONW_PON_LOT_BV_03_02() runs on ItsGeoNetworking system ItsGeoNetworkingSystem {
+
+ f_GEONW_PON_LOT_BV_03_02();
+
+ } // End of testcase TC_GEONW_PON_LOT_BV_03_02
+
+ /**
+ * @desc Check insertion of new entries into location table from extended header processing (e.g. GUC header)
+ *
+ * Pics Selection: PICS_GN_GAC_DST
+ * Config Id: CF01
+ * Initial conditions:
+ * with {
+ * the IUT being in the "initial state" and
+ * the IUT not having received any beacon from NODE
+ * the IUT having received a MESSAGE from originated by NODE
+ * }
+ * MESSAGE: GAC packet
+ *
+ * Expected behaviour:
+ * ensure that {
+ * when {
+ * the IUT is requested to send a GUC packet to NODE
+ * }
+ * then {
+ * the IUT does not send a GeoNetworking packet
+ * containing a LS_REQUEST Extended Header
+ * containing Request field
+ * containing GN_ADDR
+ * containing M_ID
+ * indicating NODE
+ * the IUT sends a GeoNetworking packet
+ * containing a correctly formatted Common Header
+ * containing HT field
+ * set to '2' (GEOUNICAST)
+ * containing GUC Extended Header
+ * containing DEPV field
+ * indicating same position as the SOPV of the MESSAGE received from NODE
+ * }
+ * }
+ *
+ *
+ * @see ETSI TS 102 871-2 v1.4.1 TP/GEONW/PON/LOT/BV-03
+ * @reference EN 302 636-4-1 [1], clauses 9.3.8.4, 9.3.12.3, 9.3.9.3, 9.3.10.3, 9.3.7.3 and 9.3.8.2
+ */
+ testcase TC_GEONW_PON_LOT_BV_03_03() runs on ItsGeoNetworking system ItsGeoNetworkingSystem {
+
+ f_GEONW_PON_LOT_BV_03_03();
+
+ } // End of testcase TC_GEONW_PON_LOT_BV_03_03
+
+ /**
+ * @desc Check insertion of new entries into location table from extended header processing (e.g. GUC header)
+ *
+ * Pics Selection: PICS_GN_GBC_DST
+ * Config Id: CF01
+ * Initial conditions:
+ * with {
+ * the IUT being in the "initial state" and
+ * the IUT not having received any beacon from NODE
+ * the IUT having received a MESSAGE from originated by NODE
+ * }
+ * MESSAGE: GBC packet
+ *
+ * Expected behaviour:
+ * ensure that {
+ * when {
+ * the IUT is requested to send a GUC packet to NODE
+ * }
+ * then {
+ * the IUT does not send a GeoNetworking packet
+ * containing a LS_REQUEST Extended Header
+ * containing Request field
+ * containing GN_ADDR
+ * containing M_ID
+ * indicating NODE
+ * the IUT sends a GeoNetworking packet
+ * containing a correctly formatted Common Header
+ * containing HT field
+ * set to '2' (GEOUNICAST)
+ * containing GUC Extended Header
+ * containing DEPV field
+ * indicating same position as the SOPV of the MESSAGE received from NODE
+ * }
+ * }
+ *
+ *
+ * @see ETSI TS 102 871-2 v1.4.1 TP/GEONW/PON/LOT/BV-03
+ * @reference EN 302 636-4-1 [1], clauses 9.3.8.4, 9.3.12.3, 9.3.9.3, 9.3.10.3, 9.3.7.3 and 9.3.8.2
+ */
+ testcase TC_GEONW_PON_LOT_BV_03_04() runs on ItsGeoNetworking system ItsGeoNetworkingSystem {
+
+ f_GEONW_PON_LOT_BV_03_04();
+
+ } // End of testcase TC_GEONW_PON_LOT_BV_03_04
+
+ /**
+ * @desc Check insertion of new entries into location table from extended header processing (e.g. GUC header)
+ *
+ * Pics Selection: PICS_GN_TSB_DST
+ * Config Id: CF01
+ * Initial conditions:
+ * with {
+ * the IUT being in the "initial state" and
+ * the IUT not having received any beacon from NODE
+ * the IUT having received a MESSAGE from originated by NODE
+ * }
+ * MESSAGE: TSB packet
+ *
+ * Expected behaviour:
+ * ensure that {
+ * when {
+ * the IUT is requested to send a GUC packet to NODE
+ * }
+ * then {
+ * the IUT does not send a GeoNetworking packet
+ * containing a LS_REQUEST Extended Header
+ * containing Request field
+ * containing GN_ADDR
+ * containing M_ID
+ * indicating NODE
+ * the IUT sends a GeoNetworking packet
+ * containing a correctly formatted Common Header
+ * containing HT field
+ * set to '2' (GEOUNICAST)
+ * containing GUC Extended Header
+ * containing DEPV field
+ * indicating same position as the SOPV of the MESSAGE received from NODE
+ * }
+ * }
+ *
+ *
+ * @see ETSI TS 102 871-2 v1.4.1 TP/GEONW/PON/LOT/BV-03
+ * @reference EN 302 636-4-1 [1], clauses 9.3.8.4, 9.3.12.3, 9.3.9.3, 9.3.10.3, 9.3.7.3 and 9.3.8.2
+ */
+ testcase TC_GEONW_PON_LOT_BV_03_05() runs on ItsGeoNetworking system ItsGeoNetworkingSystem {
+
+ f_GEONW_PON_LOT_BV_03_05();
+
+ } // End of testcase TC_GEONW_PON_LOT_BV_03_05
+
+ /**
+ * @desc Check insertion of new entries into location table from extended header processing (e.g. GUC header)
+ *
+ * Pics Selection: PICS_GN_SHB_DST
+ * Config Id: CF01
+ * Initial conditions:
+ * with {
+ * the IUT being in the "initial state" and
+ * the IUT not having received any beacon from NODE
+ * the IUT having received a MESSAGE from originated by NODE
+ * }
+ * MESSAGE: SHB packet
+ *
+ * Expected behaviour:
+ * ensure that {
+ * when {
+ * the IUT is requested to send a GUC packet to NODE
+ * }
+ * then {
+ * the IUT does not send a GeoNetworking packet
+ * containing a LS_REQUEST Extended Header
+ * containing Request field
+ * containing GN_ADDR
+ * containing M_ID
+ * indicating NODE
+ * the IUT sends a GeoNetworking packet
+ * containing a correctly formatted Common Header
+ * containing HT field
+ * set to '2' (GEOUNICAST)
+ * containing GUC Extended Header
+ * containing DEPV field
+ * indicating same position as the SOPV of the MESSAGE received from NODE
+ * }
+ * }
+ *
+ *
+ * @see ETSI TS 102 871-2 v1.4.1 TP/GEONW/PON/LOT/BV-03
+ * @reference EN 302 636-4-1 [1], clauses 9.3.8.4, 9.3.12.3, 9.3.9.3, 9.3.10.3, 9.3.7.3 and 9.3.8.2
+ */
+ testcase TC_GEONW_PON_LOT_BV_03_06() runs on ItsGeoNetworking system ItsGeoNetworkingSystem {
+
+ f_GEONW_PON_LOT_BV_03_06();
+
+ } // End of testcase TC_GEONW_PON_LOT_BV_03_06
+
+ /**
+ * @desc Check insertion of new entries into location table from extended header processing (e.g. GUC header)
+ *
+ * Pics Selection: PICS_GN_LS_REQ_DST
+ * Config Id: CF01
+ * Initial conditions:
+ * with {
+ * the IUT being in the "initial state" and
+ * the IUT not having received any beacon from NODE
+ * the IUT having received a MESSAGE from originated by NODE
+ * }
+ * MESSAGE: LS Request packet
+ *
+ * Expected behaviour:
+ * ensure that {
+ * when {
+ * the IUT is requested to send a GUC packet to NODE
+ * }
+ * then {
+ * the IUT does not send a GeoNetworking packet
+ * containing a LS_REQUEST Extended Header
+ * containing Request field
+ * containing GN_ADDR
+ * containing M_ID
+ * indicating NODE
+ * the IUT sends a GeoNetworking packet
+ * containing a correctly formatted Common Header
+ * containing HT field
+ * set to '2' (GEOUNICAST)
+ * containing GUC Extended Header
+ * containing DEPV field
+ * indicating same position as the SOPV of the MESSAGE received from NODE
+ * }
+ * }
+ *
+ *
+ * @see ETSI TS 102 871-2 v1.4.1 TP/GEONW/PON/LOT/BV-03
+ * @reference EN 302 636-4-1 [1], clauses 9.3.8.4, 9.3.12.3, 9.3.9.3, 9.3.10.3, 9.3.7.3 and 9.3.8.2
+ */
+ testcase TC_GEONW_PON_LOT_BV_03_07() runs on ItsGeoNetworking system ItsGeoNetworkingSystem {
+
+ f_GEONW_PON_LOT_BV_03_07();
+
+ } // End of testcase TC_GEONW_PON_LOT_BV_03_07
+
+ /**
+ * @desc Check insertion of new entries into location table from extended header processing (e.g. GUC header)
+ *
+ * Pics Selection: PICS_GN_LS_REP_DST
+ * Config Id: CF01
+ * Initial conditions:
+ * with {
+ * the IUT being in the "initial state" and
+ * the IUT not having received any beacon from NODE
+ * the IUT having received a MESSAGE from originated by NODE
+ * }
+ * MESSAGE: LS Reply packet
+ *
+ * Expected behaviour:
+ * ensure that {
+ * when {
+ * the IUT is requested to send a GUC packet to NODE
+ * }
+ * then {
+ * the IUT does not send a GeoNetworking packet
+ * containing a LS_REQUEST Extended Header
+ * containing Request field
+ * containing GN_ADDR
+ * containing M_ID
+ * indicating NODE
+ * the IUT sends a GeoNetworking packet
+ * containing a correctly formatted Common Header
+ * containing HT field
+ * set to '2' (GEOUNICAST)
+ * containing GUC Extended Header
+ * containing DEPV field
+ * indicating same position as the SOPV of the MESSAGE received from NODE
+ * }
+ * }
+ *
+ *
+ * @see ETSI TS 102 871-2 v1.4.1 TP/GEONW/PON/LOT/BV-03
+ * @reference EN 302 636-4-1 [1], clauses 9.3.8.4, 9.3.12.3, 9.3.9.3, 9.3.10.3, 9.3.7.3 and 9.3.8.2
+ */
+ testcase TC_GEONW_PON_LOT_BV_03_08() runs on ItsGeoNetworking system ItsGeoNetworkingSystem {
+
+ f_GEONW_PON_LOT_BV_03_08();
+
+ } // End of testcase TC_GEONW_PON_LOT_BV_03_08
+
+ /**
+ * @desc Check location table entry expiration
+ *
+ * Pics Selection: PICS_GN_LS_REQ_SRC
+ * Config Id: CF01
+ * Initial conditions:
+ * with {
+ * the IUT being in the "initial state" and
+ * the IUT having received Beacons information from ItsNodeB and
+ * the IUT not having received beacons from ItsNodeB for the duration of itsGnLifetimeLocTE parameter (20 sec)
+ * }
+ * Expected behaviour:
+ * ensure that {
+ * when {
+ * the IUT is requested to send a GUC packet to ItsNodeB
+ * }
+ * then {
+ * the IUT sends a GeoNetworking packet
+ * containing a LS_REQUEST
+ * containing Request field
+ * indicating GN_ADDR of ItsNodeB
+ * }
+ * }
+ *
+ *
+ * @see ETSI TS 102 871-2 v1.4.1 TP/GEONW/PON/LOT/BV-04
+ * @reference EN 302 636-4-1 [1], clauses 7.1.3, 9.3.8.2, 9.3.7.1.2 and Annex G
+ */
+ testcase TC_GEONW_PON_LOT_BV_04() runs on ItsGeoNetworking system ItsGeoNetworkingSystem {
+
+ f_GEONW_PON_LOT_BV_04();
+
+ } // End of testcase TC_GEONW_PON_LOT_BV_04
+
+ /**
+ * @desc Check update of entries in location table with most up-to-date position data extracted
+ * from common header processing (including timestamp comparison before updating)
+ *
+ * Pics Selection: PICS_GN_GUC_DST
+ * Config Id: CF01
+ * Initial conditions:
+ * with {
+ * the IUT being in the "initial state" and
+ * the IUT having received Beacon information from ItsNodeB and
+ * the IUT having received a MESSAGE from ItsNodeB,
+ * containing Extended Header
+ * containing SOPV field
+ * indicating an older timestamp than the last Beacon packet and
+ * indicating a different position than the position of the last Beacon packet
+ * }
+ * MESSAGE: GUC packet
+ *
+ * Expected behaviour:
+ * ensure that {
+ * when {
+ * the IUT is requested to send a GUC packet to ItsNodeB
+ * }
+ * then {
+ * the IUT does not send a GeoNetworking packet
+ * containing a LS_REQUEST
+ * containing Request field
+ * indicating GN_ADDR of ItsNodeB
+ * the IUT sends a GeoNetworking packet
+ * containing a correctly formatted Common Header
+ * containing HT field
+ * set to '2' (GEOUNICAST)
+ * containing GUC Extended Header
+ * containing DEPV field
+ * indicating same position as the SOPV value of the Beacon information received
+ * }
+ * }
+ *
+ *
+ * @see ETSI TS 102 871-2 v1.4.1 TP/GEONW/PON/LOT/BV-05
+ * @reference EN 302 636-4-1 [1], clauses 9.3.8.4, 9.3.12.3, 9.3.11.3, 9.3.9.3, 9.3.7.3, 9.3.8.2 and Annex C2
+ */
+ testcase TC_GEONW_PON_LOT_BV_05_01() runs on ItsGeoNetworking system ItsGeoNetworkingSystem {
+
+ f_GEONW_PON_LOT_BV_05_01();
+
+ } // End of testcase TC_GEONW_PON_LOT_BV_05_01
+
+ /**
+ * @desc Check update of entries in location table with most up-to-date position data extracted
+ * from common header processing (including timestamp comparison before updating)
+ *
+ * Pics Selection: PICS_GN_GAC_DST
+ * Config Id: CF01
+ * Initial conditions:
+ * with {
+ * the IUT being in the "initial state" and
+ * the IUT having received Beacon information from ItsNodeB and
+ * the IUT having received a MESSAGE from ItsNodeB,
+ * containing Extended Header
+ * containing SOPV field
+ * indicating an older timestamp than the last Beacon packet and
+ * indicating a different position than the position of the last Beacon packet
+ * }
+ * MESSAGE: GAC packet
+ *
+ * Expected behaviour:
+ * ensure that {
+ * when {
+ * the IUT is requested to send a GUC packet to ItsNodeB
+ * }
+ * then {
+ * the IUT does not send a GeoNetworking packet
+ * containing a LS_REQUEST
+ * containing Request field
+ * indicating GN_ADDR of ItsNodeB
+ * the IUT sends a GeoNetworking packet
+ * containing a correctly formatted Common Header
+ * containing HT field
+ * set to '2' (GEOUNICAST)
+ * containing GUC Extended Header
+ * containing DEPV field
+ * indicating same position as the SOPV value of the Beacon information received
+ * }
+ * }
+ *
+ *
+ * @see ETSI TS 102 871-2 v1.4.1 TP/GEONW/PON/LOT/BV-05
+ * @reference EN 302 636-4-1 [1], clauses 9.3.8.4, 9.3.12.3, 9.3.11.3, 9.3.9.3, 9.3.7.3, 9.3.8.2 and Annex C2
+ */
+ testcase TC_GEONW_PON_LOT_BV_05_02() runs on ItsGeoNetworking system ItsGeoNetworkingSystem {
+
+ f_GEONW_PON_LOT_BV_05_02();
+
+ } // End of testcase TC_GEONW_PON_LOT_BV_05_02
+
+ /**
+ * @desc Check update of entries in location table with most up-to-date position data extracted
+ * from common header processing (including timestamp comparison before updating)
+ *
+ * Pics Selection: PICS_GN_GBC_DST
+ * Config Id: CF01
+ * Initial conditions:
+ * with {
+ * the IUT being in the "initial state" and
+ * the IUT having received Beacon information from ItsNodeB and
+ * the IUT having received a MESSAGE from ItsNodeB,
+ * containing Extended Header
+ * containing SOPV field
+ * indicating an older timestamp than the last Beacon packet and
+ * indicating a different position than the position of the last Beacon packet
+ * }
+ * MESSAGE: GBC packet
+ *
+ * Expected behaviour:
+ * ensure that {
+ * when {
+ * the IUT is requested to send a GUC packet to ItsNodeB
+ * }
+ * then {
+ * the IUT does not send a GeoNetworking packet
+ * containing a LS_REQUEST
+ * containing Request field
+ * indicating GN_ADDR of ItsNodeB
+ * the IUT sends a GeoNetworking packet
+ * containing a correctly formatted Common Header
+ * containing HT field
+ * set to '2' (GEOUNICAST)
+ * containing GUC Extended Header
+ * containing DEPV field
+ * indicating same position as the SOPV value of the Beacon information received
+ * }
+ * }
+ *
+ *
+ * @see ETSI TS 102 871-2 v1.4.1 TP/GEONW/PON/LOT/BV-05
+ * @reference EN 302 636-4-1 [1], clauses 9.3.8.4, 9.3.12.3, 9.3.11.3, 9.3.9.3, 9.3.7.3, 9.3.8.2 and Annex C2
+ */
+ testcase TC_GEONW_PON_LOT_BV_05_03() runs on ItsGeoNetworking system ItsGeoNetworkingSystem {
+
+ f_GEONW_PON_LOT_BV_05_03();
+
+ } // End of testcase TC_GEONW_PON_LOT_BV_05_03
+
+ /**
+ * @desc Check update of entries in location table with most up-to-date position data extracted
+ * from common header processing (including timestamp comparison before updating)
+ *
+ * Pics Selection: PICS_GN_TSB_DST
+ * Config Id: CF01
+ * Initial conditions:
+ * with {
+ * the IUT being in the "initial state" and
+ * the IUT having received Beacon information from ItsNodeB and
+ * the IUT having received a MESSAGE from ItsNodeB,
+ * containing Extended Header
+ * containing SOPV field
+ * indicating an older timestamp than the last Beacon packet and
+ * indicating a different position than the position of the last Beacon packet
+ * }
+ * MESSAGE: TSB packet
+ *
+ * Expected behaviour:
+ * ensure that {
+ * when {
+ * the IUT is requested to send a GUC packet to ItsNodeB
+ * }
+ * then {
+ * the IUT does not send a GeoNetworking packet
+ * containing a LS_REQUEST
+ * containing Request field
+ * indicating GN_ADDR of ItsNodeB
+ * the IUT sends a GeoNetworking packet
+ * containing a correctly formatted Common Header
+ * containing HT field
+ * set to '2' (GEOUNICAST)
+ * containing GUC Extended Header
+ * containing DEPV field
+ * indicating same position as the SOPV value of the Beacon information received
+ * }
+ * }
+ *
+ *
+ * @see ETSI TS 102 871-2 v1.4.1 TP/GEONW/PON/LOT/BV-05
+ * @reference EN 302 636-4-1 [1], clauses 9.3.8.4, 9.3.12.3, 9.3.11.3, 9.3.9.3, 9.3.7.3, 9.3.8.2 and Annex C2
+ */
+ testcase TC_GEONW_PON_LOT_BV_05_04() runs on ItsGeoNetworking system ItsGeoNetworkingSystem {
+
+ f_GEONW_PON_LOT_BV_05_04();
+
+ } // End of testcase TC_GEONW_PON_LOT_BV_05_04
+
+ /**
+ * @desc Check update of entries in location table with most up-to-date position data extracted
+ * from common header processing (including timestamp comparison before updating)
+ *
+ * Pics Selection: PICS_GN_SHB_DST
+ * Config Id: CF01
+ * Initial conditions:
+ * with {
+ * the IUT being in the "initial state" and
+ * the IUT having received Beacon information from ItsNodeB and
+ * the IUT having received a MESSAGE from ItsNodeB,
+ * containing Extended Header
+ * containing SOPV field
+ * indicating an older timestamp than the last Beacon packet and
+ * indicating a different position than the position of the last Beacon packet
+ * }
+ * MESSAGE: SHB packet
+ *
+ * Expected behaviour:
+ * ensure that {
+ * when {
+ * the IUT is requested to send a GUC packet to ItsNodeB
+ * }
+ * then {
+ * the IUT does not send a GeoNetworking packet
+ * containing a LS_REQUEST
+ * containing Request field
+ * indicating GN_ADDR of ItsNodeB
+ * the IUT sends a GeoNetworking packet
+ * containing a correctly formatted Common Header
+ * containing HT field
+ * set to '2' (GEOUNICAST)
+ * containing GUC Extended Header
+ * containing DEPV field
+ * indicating same position as the SOPV value of the Beacon information received
+ * }
+ * }
+ *
+ *
+ * @see ETSI TS 102 871-2 v1.4.1 TP/GEONW/PON/LOT/BV-05
+ * @reference EN 302 636-4-1 [1], clauses 9.3.8.4, 9.3.12.3, 9.3.11.3, 9.3.9.3, 9.3.7.3, 9.3.8.2 and Annex C2
+ */
+ testcase TC_GEONW_PON_LOT_BV_05_05() runs on ItsGeoNetworking system ItsGeoNetworkingSystem {
+
+ f_GEONW_PON_LOT_BV_05_05();
+
+ } // End of testcase TC_GEONW_PON_LOT_BV_05_05
+
+ /**
+ * @desc Check update of entries in location table with most up-to-date position data extracted
+ * from common header processing (including timestamp comparison before updating)
+ *
+ * Pics Selection: PICS_GN_LS_REQ_DST
+ * Config Id: CF01
+ * Initial conditions:
+ * with {
+ * the IUT being in the "initial state" and
+ * the IUT having received Beacon information from ItsNodeB and
+ * the IUT having received a MESSAGE from ItsNodeB,
+ * containing Extended Header
+ * containing SOPV field
+ * indicating an older timestamp than the last Beacon packet and
+ * indicating a different position than the position of the last Beacon packet
+ * }
+ * MESSAGE: LS Request packet
+ *
+ * Expected behaviour:
+ * ensure that {
+ * when {
+ * the IUT is requested to send a GUC packet to ItsNodeB
+ * }
+ * then {
+ * the IUT does not send a GeoNetworking packet
+ * containing a LS_REQUEST
+ * containing Request field
+ * indicating GN_ADDR of ItsNodeB
+ * the IUT sends a GeoNetworking packet
+ * containing a correctly formatted Common Header
+ * containing HT field
+ * set to '2' (GEOUNICAST)
+ * containing GUC Extended Header
+ * containing DEPV field
+ * indicating same position as the SOPV value of the Beacon information received
+ * }
+ * }
+ *
+ *
+ * @see ETSI TS 102 871-2 v1.4.1 TP/GEONW/PON/LOT/BV-05
+ * @reference EN 302 636-4-1 [1], clauses 9.3.8.4, 9.3.12.3, 9.3.11.3, 9.3.9.3, 9.3.7.3, 9.3.8.2 and Annex C2
+ */
+ testcase TC_GEONW_PON_LOT_BV_05_06() runs on ItsGeoNetworking system ItsGeoNetworkingSystem {
+
+ f_GEONW_PON_LOT_BV_05_06();
+
+ } // End of testcase TC_GEONW_PON_LOT_BV_05_06
+
+ /**
+ * @desc Check update of entries in location table with most up-to-date position data extracted
+ * from common header processing (including timestamp comparison before updating)
+ *
+ * Pics Selection: PICS_GN_LS_REP_DST
+ * Config Id: CF01
+ * Initial conditions:
+ * with {
+ * the IUT being in the "initial state" and
+ * the IUT having received Beacon information from ItsNodeB and
+ * the IUT having received a MESSAGE from ItsNodeB,
+ * containing Extended Header
+ * containing SOPV field
+ * indicating an older timestamp than the last Beacon packet and
+ * indicating a different position than the position of the last Beacon packet
+ * }
+ * MESSAGE: LS Reply packet
+ *
+ * Expected behaviour:
+ * ensure that {
+ * when {
+ * the IUT is requested to send a GUC packet to ItsNodeB
+ * }
+ * then {
+ * the IUT does not send a GeoNetworking packet
+ * containing a LS_REQUEST
+ * containing Request field
+ * indicating GN_ADDR of ItsNodeB
+ * the IUT sends a GeoNetworking packet
+ * containing a correctly formatted Common Header
+ * containing HT field
+ * set to '2' (GEOUNICAST)
+ * containing GUC Extended Header
+ * containing DEPV field
+ * indicating same position as the SOPV value of the Beacon information received
+ * }
+ * }
+ *
+ *
+ * @see ETSI TS 102 871-2 v1.4.1 TP/GEONW/PON/LOT/BV-05
+ * @reference EN 302 636-4-1 [1], clauses 9.3.8.4, 9.3.12.3, 9.3.11.3, 9.3.9.3, 9.3.7.3, 9.3.8.2 and Annex C2
+ */
+ testcase TC_GEONW_PON_LOT_BV_05_07() runs on ItsGeoNetworking system ItsGeoNetworkingSystem {
+
+ f_GEONW_PON_LOT_BV_05_07();
+
+ } // End of testcase TC_GEONW_PON_LOT_BV_05_07
+
+ } // End of group geoLocationTable
+
+ // 6.2.2.2
+ group geoLocalPositionVector {
+
+ /**
+ * @desc Check update of the Local position vector
+ *
+ * Pics Selection: PICS_GN_BEACON_SRC
+ * Config Id: CF01
+ * Initial conditions:
+ * with {
+ * the IUT being in the "initial state" and
+ * the IUT having changed its position
+ * }
+ * Expected behaviour:
+ * ensure that {
+ * when {
+ * the IUT generates eventually a Beacon packet
+ * }
+ * then {
+ * the IUT sends a GeoNetworking packet
+ * containing a correctly formatted Common Header
+ * containing HT field
+ * set to '1' (BEACON)
+ * containing HST field
+ * set to '0' (UNSPECIFIED)
+ * containing Extended Header
+ * containing SOPV field
+ * indicating the new position
+ * }
+ * }
+ *
+ *
+ * @see ETSI TS 102 871-2 v1.4.1 TP/GEONW/PON/LPV/BV-01
+ * @reference EN 302 636-4-1 [1], clauses 7.2.3, 9.2.2.2, 9.3.6.1 and Annex G
+ */
+ testcase TC_GEONW_PON_LPV_BV_01() runs on ItsGeoNetworking system ItsGeoNetworkingSystem {
+
+ f_GEONW_PON_LPV_BV_01();
+
+ } // End of testcase TC_GEONW_PON_LPV_BV_01
+
+ } // End of group geoLocalPositionVector
+
+ // 6.2.2.3
+ group geoSequenceNumber {
+
+ /**
+ * @desc Check initial sequence number assignment
+ *
+ * Pics Selection: PICS_GN_GBC_SRC
+ * Config Id: CF01
+ * Initial conditions:
+ * with {
+ * the IUT being in the "initial state" and
+ * the IUT not having sent any GBC packet and
+ * the IUT having received Beacon information from ItsNodeB
+ * }
+ * Expected behaviour:
+ * ensure that {
+ * when {
+ * the IUT is requested to send a GBC packet to AREA1
+ * }
+ * then {
+ * the IUT sends a GeoNetworking packet
+ * containing a correctly formatted Common Header
+ * containing HT field
+ * set to '4' (GEOBROADCAST)
+ * containing GBC Extended Header
+ * containing SN field
+ * indicating value '0'
+ * }
+ * }
+ *
+ *
+ * @see ETSI TS 102 871-2 v1.4.1 TP/GEONW/PON/SQN/BV-01
+ * @reference EN 302 636-4-1 [1], clauses 7.3.2, 9.3.8.2
+ */
+ testcase TC_GEONW_PON_SQN_BV_01() runs on ItsGeoNetworking system ItsGeoNetworkingSystem {
+
+ f_GEONW_PON_SQN_BV_01();
+
+ } // End of testcase TC_GEONW_PON_SQN_BV_01
+
+ /**
+ * @desc Check the local sequence number incrementation
+ *
+ * Pics Selection: PICS_GN_GBC_SRC
+ * Config Id: CF01
+ * Initial conditions:
+ * with {
+ * the IUT being in the "initial state" and
+ * the IUT having received Beacon information from ItsNodeB and
+ * the IUT having sent a GBC packet to AREA1
+ * containing the Sequence Number field
+ * indicating value SN1
+ * }
+ * Expected behaviour:
+ * ensure that {
+ * when {
+ * the IUT is requested to send a GBC packet to AREA1
+ * }
+ * then {
+ * the IUT sends a GeoNetworking packet
+ * containing a correctly formatted Common Header
+ * containing HT field
+ * set to '4' (GEOBROADCAST)
+ * containing GBC Extended Header
+ * containing SN field
+ * indicating value SN1 + 1
+ * }
+ * }
+ *
+ *
+ * @see ETSI TS 102 871-2 v1.4.1 TP/GEONW/PON/SQN/BV-02
+ * @reference EN 302 636-4-1 [1], clauses 7.2.3, 9.3.8.2
+ */
+ testcase TC_GEONW_PON_SQN_BV_02() runs on ItsGeoNetworking system ItsGeoNetworkingSystem {
+
+ f_GEONW_PON_SQN_BV_02();
+
+ } // End of testcase TC_GEONW_PON_SQN_BV_02
+
+ } // End of group geoSequenceNumber
+
+ // 6.2.2.4
+ group geoLocationService {
+
+ /**
+ * @desc Check first LS invocation for unknown Destination nodes
+ *
+ * Pics Selection: PICS_GN_LS_REQ_SRC
+ * Config Id: CF01
+ * Initial conditions:
+ * with {
+ * the IUT being in the "initial state" and
+ * the IUT having no Location Table Entry for ItsNodeA
+ * }
+ * Expected behaviour:
+ * ensure that {
+ * when {
+ * the IUT is requested to send a GUC packet to ItsNodeA
+ * }
+ * then {
+ * the IUT sends a GeoNetworking packet
+ * containing a correctly formatted Common Header
+ * containing HT field
+ * set to '6' (LS)
+ * containing HST field
+ * set to '0' (LS_REQUEST)
+ * containing NH field
+ * set to '0' (UNSPECIFIED)
+ * containing LS_REQUEST Extended Header
+ * containing Request field
+ * indicating GN_ADDR of ItsNodeA
+ * }
+ * }
+ *
+ *
+ * @see ETSI TS 102 871-2 v1.4.1 TP/GEONW/PON/LOS/BV-01
+ * @reference EN 302 636-4-1 [1], clauses 9.3.8.2, 9.2.4, 6.3 and 9.3.7.1.2
+ */
+ testcase TC_GEONW_PON_LOS_BV_01() runs on ItsGeoNetworking system ItsGeoNetworkingSystem {
+
+ f_GEONW_PON_LOS_BV_01();
+
+ } // End of testcase TC_GEONW_PON_LOS_BV_01
+
+ /**
+ * @desc Check absence of LS invocation for unknown Destination nodes when LS procedure is already active
+ *
+ * Pics Selection: PICS_GN_LS_REQ_SRC
+ * Config Id: CF01
+ * Initial conditions:
+ * with {
+ * the IUT being in the "initial state" and
+ * the IUT having no Location Table Entry for ItsNodeA and
+ * the IUT having been requested to send a first GUC packet to ItsNodeA and
+ * the IUT having sent a GeoNetworking packet
+ * containing a LS_REQUEST
+ * containing Request field
+ * containing GN_ADDR
+ * containing M_ID
+ * indicating ItsNodeA
+ * }
+ * Expected behaviour:
+ * ensure that {
+ * when {
+ * the IUT is requested to send a new GUC packet to ItsNodeA
+ * }
+ * then {
+ * IUT does not send a second LS_REQUEST packet (see note)
+ * }
+ * }
+ * NOTE: at least not before the LS_REQUEST retransmission timer expires
+ *
+ *
+ *
+ * @see ETSI TS 102 871-2 v1.4.1 TP/GEONW/PON/LOS/BV-02
+ * @reference EN 302 636-4-1 [1], clauses 9.3.8.2, 9.2.4 and 9.3.7.1.2
+ */
+ testcase TC_GEONW_PON_LOS_BV_02() runs on ItsGeoNetworking system ItsGeoNetworkingSystem {
+
+ f_GEONW_PON_LOS_BV_02();
+
+ } // End of testcase TC_GEONW_PON_LOS_BV_02
+
+ /**
+ * @desc Check packet buffering into LS buffer during Location service procedure,
+ * including handling of LT fields in the LT packet buffer
+ *
+ * Pics Selection: PICS_GN_LS_REQ_SRC AND PICS_GN_LS_REP_DST
+ * Config Id: CF01
+ * Initial conditions:
+ * with {
+ * the IUT being in the "initial state" and
+ * the IUT having no Location Table Entry for ItsNodeA and
+ * the IUT having been requested to send a GUC packet to ItsNodeA
+ * containing TrafficClass.SCF set to 1 and
+ * the IUT having sent a LS_REQUEST packet
+ * }
+ * Expected behaviour:
+ * ensure that {
+ * when {
+ * the IUT receives the LS_REPLY packet from ItsNodeA
+ * }
+ * then {
+ * the IUT sends the GUC packet addressed to ItsNodeA
+ * containing GUC Extended Header
+ * containing LT field
+ * indicating value (default LT value – WaitingTime (see note))
+ * }
+ * }
+ * NOTE: Waiting Time == time difference between LS_REQUEST sending and LS_REPLY reception.
+ *
+ *
+ *
+ * @see ETSI TS 102 871-2 v1.4.1 TP/GEONW/PON/LOS/BV-03
+ * @reference EN 302 636-4-1 [1], clauses 7.4.3, 9.3.7.1.4, 9.3.8.2, 9.2.4 and 9.3.7.1.2
+ */
+ testcase TC_GEONW_PON_LOS_BV_03() runs on ItsGeoNetworking system ItsGeoNetworkingSystem {
+
+ f_GEONW_PON_LOS_BV_03();
+
+ } // End of testcase TC_GEONW_PON_LOS_BV_03
+
+ /**
+ * @desc Check LS buffer characteristics: FIFO type
+ *
+ * Pics Selection: PICS_GN_LS_REQ_SRC AND PICS_GN_LS_REP_DST
+ * Config Id: CF01
+ * Initial conditions:
+ * with {
+ * the IUT being in the "initial state" and
+ * the IUT having no Location Table Entry for ItsNodeA and
+ * the IUT having been requested to send a GUC packet to ItsNodeA
+ * containing TrafficClass.SCF set to 1
+ * containing LT field
+ * indicating value LT1
+ * containing payload field
+ * indicating value PL1 and
+ * the IUT having sent a LS_REQUEST packet and
+ * the IUT having been requested to send a second GUC packet to ItsNodeA
+ * containing TrafficClass.SCF set to 1
+ * containing LT field
+ * indicating LT2
+ * containing payload field
+ * indicating value PL2
+ * }
+ * Expected behaviour:
+ * ensure that {
+ * when {
+ * the IUT receives the LS_REPLY packet from ItsNodeA and
+ * before expiry of LT1 and LT2
+ * }
+ * then {
+ * the IUT sends GUC packet addressed to ItsNodeA
+ * containing payload field
+ * indicating value PL1 and
+ * the IUT sends GUC packet addressed to ItsNodeA
+ * containing payload field
+ * indicating value PL2
+ * }
+ * }
+ *
+ *
+ * @see ETSI TS 102 871-2 v1.4.1 TP/GEONW/PON/LOS/BV-04
+ * @reference EN 302 636-4-1 [1], clauses 7.4.3, 9.3.8.2, 9.2.4 and 9.3.7.1.2
+ */
+ testcase TC_GEONW_PON_LOS_BV_04() runs on ItsGeoNetworking system ItsGeoNetworkingSystem {
+
+ f_GEONW_PON_LOS_BV_04();
+
+ } // End of testcase TC_GEONW_PON_LOS_BV_04
+
+ /**
+ * @desc Check LS buffer characteristics: discarding upon LT expiration
+ *
+ * Pics Selection: PICS_GN_LS_REQ_SRC
+ * Config Id: CF01
+ * Initial conditions:
+ * with {
+ * the IUT being in the "initial state" and
+ * the IUT having no Location Table Entry for ItsNodeA and
+ * the IUT having been requested to send multiple GUC packets to ItsNodeA
+ * containing TrafficClass.SCF set to 1
+ * containing LT field
+ * indicating values LTx and
+ * the IUT having sent a LS_REQUEST packet
+ * }
+ * Expected behaviour:
+ * ensure that {
+ * when {
+ * the IUT receives the LS_REPLY packet from ItsNodeA after expiry of LTs
+ * }
+ * then {
+ * the IUT does not send any packet to ItsNodeA
+ * }
+ * }
+ *
+ *
+ * @see ETSI TS 102 871-2 v1.4.1 TP/GEONW/PON/LOS/BV-05
+ * @reference EN 302 636-4-1 [1], clauses 7.4.3, 9.3.8.2, 9.2.4 and 9.3.7.1.2
+ */
+ testcase TC_GEONW_PON_LOS_BV_05() runs on ItsGeoNetworking system ItsGeoNetworkingSystem {
+
+ f_GEONW_PON_LOS_BV_05();
+
+ } // End of testcase TC_GEONW_PON_LOS_BV_05
+
+ /**
+ * @desc Check LS Request retransmission if no answer is received
+ *
+ * Pics Selection: PICS_GN_LS_REQ_RETRANSMISSION
+ * Config Id: CF01
+ * Initial conditions:
+ * with {
+ * the IUT being in the "initial state" and
+ * the IUT having no Location Table Entry for ItsNodeA and
+ * the IUT having been requested to send a GUC packet to ItsNodeA
+ * containing TrafficClass.SCF set to 1
+ * containing LT field
+ * indicating value LT1 higher than itsGnLocationServiceTimer and
+ * the IUT having sent a LS_REQUEST packet
+ * }
+ * Expected behaviour:
+ * ensure that {
+ * when {
+ * the IUT does not receive LS_REPLY packet from ItsNodeA and
+ * before expiration of LT1
+ * }
+ * then {
+ * the IUT retransmits the LS_REQUEST packet
+ * upon expiry of itsGnLocationServiceTimer
+ * }
+ * }
+ *
+ *
+ * @see ETSI TS 102 871-2 v1.4.1 TP/GEONW/PON/LOS/BV-06
+ * @reference EN 302 636-4-1 [1], clauses 9.3.7.1.3, 9.3.7.1.2 and 9.3.8.2
+ */
+ testcase TC_GEONW_PON_LOS_TI_06() runs on ItsGeoNetworking system ItsGeoNetworkingSystem {
+
+ f_GEONW_PON_LOS_TI_06();
+
+ } // End of testcase TC_GEONW_PON_LOS_TI_06
+
+ /**
+ * @desc Check LS Request retransmission if no answer is received
+ *
+ * Pics Selection: PICS_GN_LS_REQ_RETRANSMISSION
+ * Config Id: CF01
+ * Initial conditions:
+ * with {
+ * the IUT being in the "initial state" and
+ * the IUT having no Location Table Entry for ItsNodeA and
+ * the IUT having been requested to send a GUC packet to ItsNodeA
+ * containing TrafficClass.SCF set to 1
+ * containing LT field
+ * indicating value LT1 higher than (itsGnLocationServiceTimer * itsGnLocationServiceMaxRetrans) and
+ * the IUT having sent a LS_REQUEST packet
+ * }
+ * Expected behaviour:
+ * ensure that {
+ * when {
+ * the IUT does not receive LS_REPLY packet from ItsNodeA and
+ * before expiration of LT1
+ * }
+ * then {
+ * the IUT retransmits the LS_REQUEST packet itsGnLocationServiceMaxRetrans times
+ * }
+ * }
+ *
+ *
+ * @see ETSI TS 102 871-2 v1.4.1 TP/GEONW/PON/LOS/BV-07
+ * @reference EN 302 636-4-1 [1], clauses 9.3.7.1.2, 9.3.7.1.3 and 9.3.8.2
+ */
+ testcase TC_GEONW_PON_LOS_BV_07() runs on ItsGeoNetworking system ItsGeoNetworkingSystem {
+
+ f_GEONW_PON_LOS_BV_07();
+
+ } // End of testcase TC_GEONW_PON_LOS_BV_07
+
+ /**
+ * @desc Check LS Reply generation by destination node
+ *
+ * Pics Selection: PICS_GN_LS_REQ_DST
+ * Config Id: CF01
+ * Initial conditions:
+ * with {
+ * the IUT being in the "initial state"
+ * }
+ * Expected behaviour:
+ * ensure that {
+ * when {
+ * the IUT receives a LS_REQUEST packet
+ * containing Request field
+ * indicating the IUT's GN_ADDR
+ * }
+ * then {
+ * the IUT replies with a LS_REPLY packet
+ * containing Common Header
+ * containing NH field
+ * set to '0' (UNSPECIFIED)
+ * containing LS_REPLY Extended Header
+ * containing DEPV field
+ * indicating same position as the SOPV value of the received LS_REQUEST
+ * }
+ * }
+ *
+ *
+ * @see ETSI TS 102 871-2 v1.4.1 TP/GEONW/PON/LOS/BV-08
+ * @reference EN 302 636-4-1 [1], clauses 9.3.7.3 and 9.3.5
+ */
+ testcase TC_GEONW_PON_LOS_BV_08() runs on ItsGeoNetworking system ItsGeoNetworkingSystem {
+
+ f_GEONW_PON_LOS_BV_08();
+
+ } // End of testcase TC_GEONW_PON_LOS_BV_08
+
+ /**
+ * @desc Check absence of LS Reply generation for already answered LS Request packets
+ *
+ * Pics Selection: PICS_GN_LS_REQ_DST
+ * Config Id: CF02
+ * Initial conditions:
+ * with {
+ * the IUT being in the "initial state" and
+ * the IUT having received a LS_REQUEST packet generated by ItsNodeB from ItsNodeB
+ * the IUT having sent a LS_REPLY packet to ItsNodeB
+ * }
+ * Expected behaviour:
+ * ensure that {
+ * when {
+ * the IUT receives the same LS_REQUEST packet from ItsNodeD
+ * }
+ * then {
+ * the IUT does not reply with a LS_REPLY packet
+ * }
+ * }
+ *
+ *
+ * @see ETSI TS 102 871-2 v1.4.1 TP/GEONW/PON/LOS/BO-09
+ * @reference EN 302 636-4-1 [1], clauses 9.3.7.3 and 9.3.5
+ */
+ testcase TC_GEONW_PON_LOS_BO_09() runs on ItsMtc system ItsGeoNetworkingSystem {
+
+ f_GEONW_PON_LOS_BO_09();
+
+ } // End of testcase TC_GEONW_PON_LOS_BO_09
+
+
+ /**
+ * @desc Check LS Request forwarding
+ *
+ * Pics Selection: PICS_GN_LS_FWD
+ * Config Id: CF03
+ * Initial conditions:
+ * with {
+ * the IUT being in the "initial state" and
+ * the IUT having received Beacon information from ItsNodeB and
+ * the IUT having received Beacon information from ItsNodeC
+ * }
+ * Expected behaviour:
+ * ensure that {
+ * when {
+ * the IUT receives a LS_REQUEST packet from ItsNodeC
+ * containing Basic Header
+ * containing RHL field
+ * indicating value greater than 1
+ * containing LS_REQUEST Extended Header
+ * containing Request field
+ * containing GN_ADDR
+ * containing M_ID
+ * indicating value differing from the M_ID part of the GN_ADDR of the IUT
+ * }
+ * then {
+ * the IUT re-broadcasts the received LS_REQUEST packet
+ * containing Basic Header
+ * containing RHL field
+ * indicating value decreased by 1
+ * }
+ * }
+ *
+ *
+ * @see ETSI TS 102 871-2 v1.4.1 TP/GEONW/PON/LOS/BV-10
+ * @reference EN 302 636-4-1 [1], clauses 9.3.7.2
+ */
+ testcase TC_GEONW_PON_LOS_BV_10() runs on ItsMtc system ItsGeoNetworkingSystem {
+
+ f_GEONW_PON_LOS_BV_10();
+
+ } // End of testcase TC_GEONW_PON_LOS_BV_10
+
+ /**
+ * @desc Check LS Reply forwarding
+ *
+ * Pics Selection: PICS_GN_LS_FWD
+ * Config Id: CF03
+ * Initial conditions:
+ * with {
+ * the IUT being in the "initial state" and
+ * the IUT having received Beacon information from ItsNodeB and
+ * the IUT having received Beacon information from ItsNodeC
+ * }
+ * Expected behaviour:
+ * ensure that {
+ * when {
+ * the IUT receives a LS_REPLY packet from ItsNodeC addressed to ItsNodeB
+ * containing Basic Header
+ * containing RHL field
+ * indicating value greater than 1
+ * }
+ * then {
+ * the IUT forwards the received LS_REPLY packet to ItsNodeB
+ * containing Basic Header
+ * containing RHL field
+ * indicating value decreased by 1
+ * }
+ * }
+ *
+ *
+ * @see ETSI TS 102 871-2 v1.4.1 TP/GEONW/PON/LOS/BV-11
+ * @reference EN 302 636-4-1 [1], clauses 9.3.7.2
+ */
+ testcase TC_GEONW_PON_LOS_BV_11() runs on ItsMtc system ItsGeoNetworkingSystem {
+
+ f_GEONW_PON_LOS_BV_11();
+
+ } // End of testcase TC_GEONW_PON_LOS_BV_11
+
+ /**
+ * @desc Check flushing of the LS buffer, initiated by the processing of a common header from the target destination
+ *
+ * Pics Selection: PICS_GN_LS_REQ_SRC
+ * Config Id: CF01
+ * Initial conditions:
+ * with {
+ * the IUT being in the "initial state" and
+ * the IUT having no Location Table Entry for ItsNodeA and
+ * the IUT having been requested to send a GUC packet ItsNodeA
+ * containing LT field
+ * indicating LT1 and
+ * the IUT having sent a LS_REQUEST packet
+ * }
+ * Expected behaviour:
+ * ensure that {
+ * when {
+ * the IUT receives a GUC packet addressed to it from ItsNodeA before expiry of LT1
+ * }
+ * then {
+ * the IUT sends the waiting GUC packet to ItsNodeA
+ * }
+ * }
+ *
+ *
+ * @see ETSI TS 102 871-2 v1.4.1 TP/GEONW/PON/LOS/BV-12
+ * @reference EN 302 636-4-1 [1], clauses 9.3.8.4, 9.3.7.1.2 and 7.4.2
+ */
+ testcase TC_GEONW_PON_LOS_BV_12() runs on ItsGeoNetworking system ItsGeoNetworkingSystem {
+
+ f_GEONW_PON_LOS_BV_12();
+
+ } // End of testcase TC_GEONW_PON_LOS_BV_12
+
+ /**
+ * @desc Check LS buffer characteristics: FIFO type and Lifetime
+ *
+ * Pics Selection: PICS_GN_LS_REQ_SRC
+ * Config Id: CF01
+ * Initial conditions:
+ * with {
+ * the IUT being in the "initial state" and
+ * the IUT having no Location Table Entry for ItsNodeA and
+ * the IUT having been requested to send a GUC packet to ItsNodeA
+ * containing TrafficClass.SCF set to 1
+ * containing LT field
+ * indicating value LT1
+ * containing payload field
+ * indicating value PL1 and
+ * the IUT having sent a LS_REQUEST packet and
+ * the IUT having been requested to send a second GUC packet to ItsNodeA
+ * containing TrafficClass.SCF set to 1
+ * containing LT field
+ * indicating LT2 lower than LT1
+ * containing payload field
+ * indicating value PL2
+ * }
+ * Expected behaviour:
+ * ensure that {
+ * when {
+ * the IUT receives the LS_REPLY packet from ItsNodeA
+ * after expiry of LT2
+ * before expiry of LT1
+ * }
+ * then {
+ * the IUT sends GUC packet addressed to ItsNodeA
+ * containing payload field
+ * indicating value PL1
+ * }
+ * }
+ *
+ *
+ * @see ETSI TS 102 871-2 v1.4.1 TP/GEONW/PON/LOS/BV-13
+ * @reference EN 302 636-4-1 [1], clauses 7.4.3, 9.3.7.1.2
+ */
+ testcase TC_GEONW_PON_LOS_BV_13() runs on ItsGeoNetworking system ItsGeoNetworkingSystem {
+
+ f_GEONW_PON_LOS_BV_13();
+
+ } // End of testcase TC_GEONW_PON_LOS_BV_13
+
+ /**
+ * @desc Check that GeoNetworking packets in LS buffer are discarded when LS does not complete.
+ *
+ * Pics Selection: PICS_GN_LS_REQ_SRC
+ * Config Id: CF01
+ * Initial conditions:
+ * with {
+ * the IUT being in the "initial state" and
+ * the IUT having no Location Table Entry for ItsNodeA and
+ * the IUT having been requested to send a GUC packet to ItsNodeA
+ * containing TrafficClass.SCF set to 1
+ * containing LT field
+ * indicating value LT1 higher than (itsGnLocationServiceTimer * itsGnLocationServiceMaxRetrans) and
+ * the IUT having sent a LS_REQUEST packet itsGnLocationServiceMaxRetrans times
+ * }
+ * Expected behaviour:
+ * ensure that {
+ * when {
+ * the IUT receives a GUC packet from ItsNodeA
+ * before expiration of LT1
+ * }
+ * then {
+ * the IUT does not send any packet to ItsNodeA (see note)
+ * }
+ * }
+ * NOTE: Stored GUC packets have been discarded upon LS failure
+ *
+ *
+ *
+ * @see ETSI TS 102 871-2 v1.4.1 TP/GEONW/PON/LOS/BV-14
+ * @reference EN 302 636-4-1 [1], clauses 7.4.3
+ */
+ testcase TC_GEONW_PON_LOS_BV_14() runs on ItsGeoNetworking system ItsGeoNetworkingSystem {
+
+ f_GEONW_PON_LOS_BV_14();
+
+ } // End of testcase TC_GEONW_PON_LOS_BV_14
+
+ /**
+ * @desc Check flushing of the LS buffer, initiated by the processing of a common header from the target destination
+ *
+ * Pics Selection: PICS_GN_LS_REQ_SRC
+ * Config Id: CF01
+ * Initial conditions:
+ * with {
+ * the IUT being in the "initial state" and
+ * the IUT having no Location Table Entry for ItsNodeA and
+ * the IUT having been requested to send a GUC packet ItsNodeA
+ * containing LT field
+ * indicating LT1 and
+ * the IUT having sent a LS_REQUEST packet
+ * }
+ * Expected behaviour:
+ * ensure that {
+ * when {
+ * the IUT receives a GUC packet addressed to ItsNodeB from ItsNodeA before expiry of LT1
+ * }
+ * then {
+ * the IUT sends the waiting GUC packet to ItsNodeA
+ * }
+ * }
+ *
+ *
+ * @see ETSI TS 102 871-2 v1.4.1 TP/GEONW/PON/LOS/BV-15
+ * @reference EN 302 636-4-1 [1], clauses 9.3.8.3, 9.3.7.1.2 and 7.4.2
+ */
+ testcase TC_GEONW_PON_LOS_BV_15() runs on ItsGeoNetworking system ItsGeoNetworkingSystem {
+
+ f_GEONW_PON_LOS_BV_15();
+
+ } // End of testcase TC_GEONW_PON_LOS_BV_15
+
+ /**
+ * @desc Check LS Request retransmission termination when indirect response is received
+ *
+ * Pics Selection: PICS_GN_LS_REQ_SRC
+ * Config Id: CF01
+ * Initial conditions:
+ * with {
+ * the IUT being in the "initial state" and
+ * the IUT having no Location Table Entry for ItsNodeA and
+ * the IUT having been requested to send a GUC packet to ItsNodeA
+ * containing TrafficClass.SCF set to 1
+ * containing LT field
+ * indicating value LT1 higher than (itsGnLocationServiceTimer * itsGnLocationServiceMaxRetrans) and
+ * the IUT having sent a LS_REQUEST packet
+ * the IUT having retransmitted the LS_REQUEST packet less than itsGnLocationServiceMaxRetrans
+ * }
+ * Expected behaviour:
+ * ensure that {
+ * when {
+ * the IUT receives a GUC packet addressed to it from ItsNodeA before expiry of LT1
+ * }
+ * then {
+ * the IUT does not retransmits the LS_REQUEST packet
+ * }
+ * }
+ *
+ *
+ * @see ETSI TS 102 871-2 v1.4.1 TP/GEONW/PON/LOS/BV-16
+ * @reference EN 302 636-4-1 [1], clauses 9.3.8.4, 9.3.7.1.2, 9.3.7.1.3 and 9.3.8.2
+ */
+ testcase TC_GEONW_PON_LOS_BV_16() runs on ItsGeoNetworking system ItsGeoNetworkingSystem {
+
+ f_GEONW_PON_LOS_BV_16();
+
+ } // End of testcase TC_GEONW_PON_LOS_BV_16
+
+ /**
+ * @desc Check LS Request retransmission termination when indirect response is received
+ *
+ * Pics Selection: PICS_GN_LS_REQ_SRC
+ * Config Id: CF01
+ * Initial conditions:
+ * with {
+ * the IUT being in the "initial state" and
+ * the IUT having no Location Table Entry for ItsNodeA and
+ * the IUT having been requested to send a GUC packet to ItsNodeA
+ * containing TrafficClass.SCF set to 1
+ * containing LT field
+ * indicating value LT1 higher than (itsGnLocationServiceTimer * itsGnLocationServiceMaxRetrans) and
+ * the IUT having sent a LS_REQUEST packet
+ * the IUT having retransmitted the LS_REQUEST packet less than itsGnLocationServiceMaxRetrans
+ * }
+ * Expected behaviour:
+ * ensure that {
+ * when {
+ * the IUT receives a GUC packet addressed to ItsNodeB from ItsNodeA before expiry of LT1
+ * }
+ * then {
+ * the IUT does not retransmits the LS_REQUEST packet
+ * }
+ * }
+ *
+ *
+ * @see ETSI TS 102 871-2 v1.4.1 TP/GEONW/PON/LOS/BV-17
+ * @reference EN 302 636-4-1 [1], clauses 9.3.8.3, 9.3.7.1.2, 9.3.7.1.3 and 9.3.8.2
+ */
+ testcase TC_GEONW_PON_LOS_BV_17() runs on ItsGeoNetworking system ItsGeoNetworkingSystem {
+
+ f_GEONW_PON_LOS_BV_17();
+
+ } // End of testcase TC_GEONW_PON_LOS_BV_17
+
+ } // End of group geoLocationService
+
+ // 6.2.2.5
+ group geoForwardingPacketBuffer {
+
+ /**
+ * @desc Check Source packet buffering into UC forwarding buffer for unreachable Unicast destinations
+ * (absence of a suitable next hop candidate)
+ *
+ * Pics Selection: PICS_GN_GUC_SRC
+ * Config Id: CF03
+ * Initial conditions:
+ * with {
+ * the IUT being in the "initial state" and
+ * the IUT not having received any Beacon information from ItsNodeB and
+ * the IUT having a Location Table Entry for ItsNodeA (see note) and
+ * the IUT having been requested to send a GUC packet addressed to ItsNodeA
+ * containing TrafficClass.SCF set to 1
+ * }
+ * Expected behaviour:
+ * ensure that {
+ * when {
+ * the IUT receives a Beacon packet from ItsNodeB
+ * }
+ * then {
+ * the IUT selects the ItsNodeB as the next hop and
+ * the IUT sends the buffered GUC packet
+ * }
+ * }
+ * NOTE: Location Table Entry is created by sending any GeoNetworking packet, originated by ItsNodeA, from ItsNodeC to IUT
+ *
+ *
+ *
+ * @see ETSI TS 102 871-2 v1.4.1 TP/GEONW/PON/FPB/BV-01
+ * @reference EN 302 636-4-1 [1], clauses 7.5.3, 9.3.6.3, 9.3.4.2 and 9.3.8.3
+ */
+ testcase TC_GEONW_PON_FPB_BV_01() runs on ItsMtc system ItsGeoNetworkingSystem {
+
+ f_GEONW_PON_FPB_BV_01();
+
+ } // End of testcase TC_GEONW_PON_FPB_BV_01
+
+ /**
+ * @desc Check Forwarder packet buffering into UC forwarding buffer for unreachable Unicast destinations
+ * (absence of a suitable next hop candidate)
+ *
+ * Pics Selection: PICS_GN_GUC_SRC
+ * Config Id: CF03
+ * Initial conditions:
+ * with {
+ * the IUT being in the "initial state" and
+ * the IUT not having received any Beacon information from ItsNodeB and
+ * the IUT having received GUC packets addressed to ItsNodeA from ItsNodeC
+ * containing TrafficClass.SCF set to 1
+ * containing Basic Header
+ * containing LT field
+ * indicating LT1
+ * containing RHL field
+ * indicating value greater than 1
+ * containing GUC Extended Header
+ * containing SN field
+ * indicating value SN1
+ * }
+ * Expected behaviour:
+ * ensure that {
+ * when {
+ * the IUT receives a Beacon packet from ItsNodeB
+ * }
+ * then {
+ * the IUT selects the ItsNodeB as the next hop and
+ * the IUT forwards the buffered GUC packet
+ * containing Basic Header
+ * containing RHL field
+ * indicating value decreased by 1
+ * containing GUC Extended Header
+ * containing SN field
+ * indicating value SN1
+ * }
+ * }
+ *
+ *
+ * @see ETSI TS 102 871-2 v1.4.1 TP/GEONW/PON/FPB/BV-02
+ * @reference EN 302 636-4-1 [1], clauses 9.3.8.3, 7.5.3, 9.3.6.3
+ */
+ testcase TC_GEONW_PON_FPB_BV_02() runs on ItsMtc system ItsGeoNetworkingSystem {
+
+ f_GEONW_PON_FPB_BV_02();
+
+ } // End of testcase TC_GEONW_PON_FPB_BV_02
+
+ /**
+ * @desc Check UC forwarding buffer characteristics: FIFO type
+ *
+ * Pics Selection: PICS_GN_GUC_SRC
+ * Config Id: CF03
+ * Initial conditions:
+ * with {
+ * the IUT being in the "initial state" and
+ * the IUT not having received any Beacon information from ItsNodeB and
+ * the IUT having received a GUC (GEOUNI1) packet addressed to ItsNodeA from ItsNodeC
+ * containing TrafficClass.SCF set to 1
+ * containing Basic Header
+ * containing LT field
+ * indicating value LT1 and
+ * containing RHL field
+ * indicating value greater than 1
+ * containing GUC Extended Header
+ * containing SN field
+ * indicating value SN1
+ * the IUT having received a second GUC (GEOUNI2) packet addressed to ItsNodeA from ItsNodeC
+ * containing TrafficClass.SCF set to 1
+ * containing Basic Header
+ * containing LT field
+ * indicating LT2
+ * containing RHL field
+ * indicating value greater than 1
+ * containing GUC Extended Header
+ * containing SN field
+ * indicating value SN2
+ * }
+ * Expected behaviour:
+ * ensure that {
+ * when {
+ * the IUT receives a Beacon packet from ItsNodeB
+ * before expiry of LT1 and LT2
+ * }
+ * then {
+ * the IUT selects ItsNodeB as the next hop and
+ * the IUT forwards the GEOUNI1 buffered packet
+ * containing GUC Extended Header
+ * containing SN field
+ * indicating value SN1
+ * the IUT forwards the GEOUNI2 buffered packet
+ * containing GUC Extended Header
+ * containing SN field
+ * indicating value SN2
+ * }
+ * }
+ *
+ *
+ * @see ETSI TS 102 871-2 v1.4.1 TP/GEONW/PON/FPB/BV-03
+ * @reference EN 302 636-4-1 [1], clauses 7.5.3, 9.3.6.3 and 9.3.8.3
+ */
+ testcase TC_GEONW_PON_FPB_BV_03() runs on ItsMtc system ItsGeoNetworkingSystem {
+
+ f_GEONW_PON_FPB_BV_03();
+
+ } // End of testcase TC_GEONW_PON_FPB_BV_03
+
+ /**
+ * @desc Check UC forwarding buffer characteristics: discarding upon LT expiration
+ *
+ * Pics Selection: PICS_GN_GUC_SRC
+ * Config Id: CF03
+ * Initial conditions:
+ * with {
+ * the IUT being in the "initial state" and
+ * the IUT not having received any Beacon information from ItsNodeB and
+ * the IUT having received a GUC packet addressed to ItsNodeA from ItsNodeC
+ * containing TrafficClass.SCF set to 1
+ * containing Basic Header
+ * containing LT field
+ * indicating LT1
+ * containing RHL field
+ * indicating value greater than 1
+ * }
+ * Expected behaviour:
+ * ensure that {
+ * when {
+ * the IUT receives a Beacon packet from ItsNodeB
+ * after expiry of LT1
+ * }
+ * then {
+ * the IUT does not forward the buffered GUC packet addressed to ItsNodeA
+ * }
+ * }
+ *
+ *
+ * @see ETSI TS 102 871-2 v1.4.1 TP/GEONW/PON/FPB/BV-03
+ * @reference EN 302 636-4-1 [1], clauses 7.5.3, 9.3.6.3 and 9.3.8.3
+ */
+ testcase TC_GEONW_PON_FPB_BV_04() runs on ItsMtc system ItsGeoNetworkingSystem {
+
+ f_GEONW_PON_FPB_BV_04();
+
+ } // End of testcase TC_GEONW_PON_FPB_BV_04
+
+ /**
+ * @desc Check Source packet buffering into BC forwarding buffer for no GBC recipients
+ *
+ * Pics Selection: none
+ * Config Id: CF02
+ * Initial conditions:
+ * with {
+ * the IUT being in the "initial state" and
+ * the IUT not having received Beacon information from ItsNodeD and
+ * the IUT not having received Beacon information from ItsNodeB and
+ * the IUT having been requested to send a GBC packet to AREA1
+ * containing TrafficClass.SCF set to 1
+ * }
+ * Expected behaviour:
+ * ensure that {
+ * when {
+ * the IUT receives a Beacon packet from either ItsNodeB or ItsNodeD
+ * }
+ * then {
+ * the IUT broadcasts the buffered GBC packet
+ * }
+ * }
+ *
+ *
+ * @see ETSI TS 102 871-2 v1.4.1 TP/GEONW/PON/FPB/BV-06
+ * @reference EN 302 636-4-1 [1], clauses 9.3.5, 7.5.3, 9.3.6.3 and 9.3.11.2
+ */
+ testcase TC_GEONW_PON_FPB_BV_06() runs on ItsMtc system ItsGeoNetworkingSystem {
+
+ f_GEONW_PON_FPB_BV_06();
+
+ } // End of testcase TC_GEONW_PON_FPB_BV_06
+
+ /**
+ * @desc Check BC forwarding buffer characteristics: FIFO type
+ *
+ * Pics Selection: none
+ * Config Id: CF02
+ * Initial conditions:
+ * with {
+ * the IUT being in the "initial state" and
+ * the IUT not having received Beacon information from ItsNodeD and
+ * the IUT not having received Beacon information from ItsNodeB and
+ * the IUT having been requested to send a GBC (GEOBROAD1) packet to AREA1
+ * containing TrafficClass.SCF set to 1
+ * containing Basic Header
+ * containing LT field
+ * indicating LT1
+ * containing GBC Extended Header
+ * containing SN field
+ * indicating value SN1
+ * the IUT having been requested to send a GBC (GEOBROAD2) packet to AREA1
+ * containing TrafficClass.SCF set to 1
+ * containing Basic Header
+ * containing LT field
+ * indicating LT2
+ * containing GBC Extended Header
+ * containing SN field
+ * indicating value SN2
+ * }
+ * Expected behaviour:
+ * ensure that {
+ * when {
+ * the IUT receives a Beacon packet from either ItsNodeD or ItsNodeB
+ * before expiry of LT1 and LT2
+ * }
+ * then {
+ * the IUT broadcasts GEOBROAD1 packet
+ * containing GBC Extended Header
+ * containing SN field
+ * indicating value SN1
+ * the IUT broadcasts GEOBROAD2 packet
+ * containing GBC Extended Header
+ * containing SN field
+ * indicating value SN2
+ * }
+ * }
+ *
+ *
+ * @see ETSI TS 102 871-2 v1.4.1 TP/GEONW/PON/FPB/BV-07
+ * @reference EN 302 636-4-1 [1], clauses 7.5.3, 9.3.6.3 and 9.3.11.2
+ */
+ testcase TC_GEONW_PON_FPB_BV_07() runs on ItsMtc system ItsGeoNetworkingSystem {
+
+ f_GEONW_PON_FPB_BV_07();
+
+ } // End of testcase TC_GEONW_PON_FPB_BV_07
+
+ /**
+ * @desc Check BC forwarding buffer characteristics: discarding upon LT expiration
+ *
+ * Pics Selection: none
+ * Config Id: CF02
+ * Initial conditions:
+ * with {
+ * the IUT being in the "initial state" and
+ * the IUT not having received Beacon information from ItsNodeD and
+ * the IUT not having received Beacon information from ItsNodeB and
+ * the IUT having been requested to send a GBC (GEOBROAD1) packet to AREA1
+ * containing TrafficClass.SCF set to 1
+ * containing Basic Header
+ * containing LT field
+ * indicating LT1
+ * the IUT having been requested to send a GBC (GEOBROAD2) packet to AREA1
+ * containing TrafficClass.SCF set to 1
+ * containing Basic Header
+ * containing LT field
+ * indicating LT2
+ * }
+ * Expected behaviour:
+ * ensure that {
+ * when {
+ * the IUT receives a Beacon packet from either ItsNodeB or ItsNodeD
+ * after expiry of LT1 and LT2
+ * }
+ * then {
+ * the IUT does not broadcast any of the buffered GEOBROAD1 and GEOBROAD2
+ * }
+ * }
+ *
+ *
+ * @see ETSI TS 102 871-2 v1.4.1 TP/GEONW/PON/FPB/BV-08
+ * @reference EN 302 636-4-1 [1], clauses 7.5.3, 9.3.6.3 and 9.3.11.2
+ */
+ testcase TC_GEONW_PON_FPB_BV_08() runs on ItsMtc system ItsGeoNetworkingSystem {
+
+ f_GEONW_PON_FPB_BV_08();
+
+ } // End of testcase TC_GEONW_PON_FPB_BV_08
+
+ /**
+ * @desc Check Source packet buffering into UC forwarding buffer for handling of LT fields in absence of a suitable next hop candidate
+ *
+ * Pics Selection: PICS_GN_GUC_SRC
+ * Config Id: CF03
+ * Initial conditions:
+ * with {
+ * the IUT being in the "initial state" and
+ * the IUT not having received any Beacon information from ItsNodeB and
+ * the IUT having a Location Table Entry for ItsNodeA and
+ * the IUT having been requested to send a GUC packet addressed to ItsNodeA
+ * containing TrafficClass.SCF set to 1
+ * }
+ * Expected behaviour:
+ * ensure that {
+ * when {
+ * the IUT receives a Beacon packet from ItsNodeB
+ * }
+ * then {
+ * the IUT selects the ItsNodeB as the next hop and
+ * the IUT sends the buffered GUC packet
+ * containing GUC Extended Header
+ * containing LT field
+ * indicating (default LT value – WaitingTime(see note))
+ * }
+ * }
+ * NOTE: WaitingTime == time difference between Upper layer packet generation and the neighbour Beacon reception
+ *
+ *
+ *
+ * @see ETSI TS 102 871-2 v1.4.1 TP/GEONW/PON/FPB/BV-09
+ * @reference EN 302 636-4-1 [1], clauses 7.5.3, 9.3.6.3 and 9.3.8.2
+ */
+ testcase TC_GEONW_PON_FPB_BV_09() runs on ItsMtc system ItsGeoNetworkingSystem {
+
+ f_GEONW_PON_FPB_BV_09();
+
+ } // End of testcase TC_GEONW_PON_FPB_BV_09
+
+ /**
+ * @desc Check Source packet buffering into BC forwarding buffer for handling of LT fields for no GBC recipients
+ *
+ * Pics Selection: none
+ * Config Id: CF02
+ * Initial conditions:
+ * with {
+ * the IUT being in the "initial state" and
+ * the IUT not having received Beacon information from ItsNodeD and
+ * the IUT not having received Beacon information from ItsNodeB and
+ * the IUT having been requested to send a GBC packet to AREA1
+ * containing TrafficClass.SCF set to 1
+ * }
+ * Expected behaviour:
+ * ensure that {
+ * when {
+ * the IUT receives a Beacon packet from either ItsNodeB or ItsNodeD
+ * }
+ * then {
+ * the IUT broadcasts the buffered GBC packet
+ * containing GBC Extended Header
+ * containing LT field
+ * indicating (default LT value - WaitingTime (see note))
+ * }
+ * }
+ * NOTE: WaitingTime == time difference between Upper layer packet generation and the neighbour Beacon reception
+ *
+ *
+ *
+ * @see ETSI TS 102 871-2 v1.4.1 TP/GEONW/PON/FPB/BV-10
+ * @reference EN 302 636-4-1 [1], clauses 7.5.3, 9.3.6.3 and 9.3.11.2
+ */
+ testcase TC_GEONW_PON_FPB_BV_10() runs on ItsMtc system ItsGeoNetworkingSystem {
+
+ f_GEONW_PON_FPB_BV_10();
+
+ } // End of testcase TC_GEONW_PON_FPB_BV_10
+
+ /**
+ * @desc Check immediate broadcasting in absence of a suitable next hop candidate when SCF is disabled
+ *
+ * Pics Selection: PICS_GN_GUC_SRC
+ * Config Id: CF03
+ * Initial conditions:
+ * with {
+ * the IUT being in the "initial state" and
+ * the IUT not having received any Beacon information from ItsNodeB and
+ * the IUT having a Location Table Entry for ItsNodeA (see note)
+ * }
+ *
+ * MESSAGE : GUC packet addressed to ItsNodeA
+ *
+ * Expected behaviour:
+ * ensure that {
+ * when {
+ * the IUT is requested to send a MESSAGE
+ * containing TrafficClass.SCF set to 0
+ * }
+ * then {
+ * the IUT broadcast the MESSAGE immediately
+ * }
+ * }
+ *
+ *
+ *
+ * @see ETSI TS 102 871-2 v1.4.1 TP/GEONW/PON/FPB/BV-11-X
+ * @reference EN 302 636-4-1 [1], Annex D2
+ */
+ testcase TC_GEONW_PON_FPB_BV_11_01() runs on ItsMtc system ItsGeoNetworkingSystem {
+
+ f_GEONW_PON_FPB_BV_11_01();
+
+ } // End of testcase TC_GEONW_PON_FPB_BV_11_01
+
+ /**
+ * @desc Check immediate broadcasting in absence of a suitable next hop candidate when SCF is disabled
+ *
+ * Pics Selection: PICS_GN_GAC_SRC
+ * Config Id: CF03
+ * Initial conditions:
+ * with {
+ * the IUT being in the "initial state" and
+ * the IUT not having received any Beacon information from ItsNodeB and
+ * the IUT having a Location Table Entry for ItsNodeA (see note)
+ * }
+ *
+ * MESSAGE : GAC packet
+ * containing DestinationArea
+ * indicating AREA2
+ *
+ * Expected behaviour:
+ * ensure that {
+ * when {
+ * the IUT is requested to send a MESSAGE
+ * containing TrafficClass.SCF set to 0
+ * }
+ * then {
+ * the IUT broadcast the MESSAGE immediately
+ * }
+ * }
+ *
+ *
+ *
+ * @see ETSI TS 102 871-2 v1.4.1 TP/GEONW/PON/FPB/BV-11-X
+ * @reference EN 302 636-4-1 [1], Annex D2
+ */
+ testcase TC_GEONW_PON_FPB_BV_11_02() runs on ItsMtc system ItsGeoNetworkingSystem {
+
+ f_GEONW_PON_FPB_BV_11_02();
+
+ } // End of testcase TC_GEONW_PON_FPB_BV_11_02
+
+ /**
+ * @desc Check immediate broadcasting in absence of a suitable next hop candidate when SCF is disabled
+ *
+ * Pics Selection: PICS_GN_GBC_SRC
+ * Config Id: CF03
+ * Initial conditions:
+ * with {
+ * the IUT being in the "initial state" and
+ * the IUT not having received any Beacon information from ItsNodeB and
+ * the IUT having a Location Table Entry for ItsNodeA (see note)
+ * }
+ *
+ * MESSAGE : GBC packet
+ * containing DestinationArea
+ * indicating AREA2
+ *
+ * Expected behaviour:
+ * ensure that {
+ * when {
+ * the IUT is requested to send a MESSAGE
+ * containing TrafficClass.SCF set to 0
+ * }
+ * then {
+ * the IUT broadcast the MESSAGE immediately
+ * }
+ * }
+ *
+ *
+ *
+ * @see ETSI TS 102 871-2 v1.4.1 TP/GEONW/PON/FPB/BV-11-X
+ * @reference EN 302 636-4-1 [1], Annex D2
+ */
+ testcase TC_GEONW_PON_FPB_BV_11_03() runs on ItsMtc system ItsGeoNetworkingSystem {
+
+ f_GEONW_PON_FPB_BV_11_03();
+
+ } // End of testcase TC_GEONW_PON_FPB_BV_11_03
+
+ /**
+ * @desc Check immediate broadcasting in absence of a suitable next hop candidate when SCF is disabled
+ *
+ * Pics Selection: PICS_GN_TSB_SRC
+ * Config Id: CF03
+ * Initial conditions:
+ * with {
+ * the IUT being in the "initial state" and
+ * the IUT not having received any Beacon information from ItsNodeB and
+ * the IUT having a Location Table Entry for ItsNodeA (see note)
+ * }
+ *
+ * MESSAGE : TSB packet
+ *
+ * Expected behaviour:
+ * ensure that {
+ * when {
+ * the IUT is requested to send a MESSAGE
+ * containing TrafficClass.SCF set to 0
+ * }
+ * then {
+ * the IUT broadcast the MESSAGE immediately
+ * }
+ * }
+ *
+ *
+ *
+ * @see ETSI TS 102 871-2 v1.4.1 TP/GEONW/PON/FPB/BV-11-X
+ * @reference EN 302 636-4-1 [1], Annex D2
+ */
+ testcase TC_GEONW_PON_FPB_BV_11_04() runs on ItsMtc system ItsGeoNetworkingSystem {
+
+ f_GEONW_PON_FPB_BV_11_04();
+
+ } // End of testcase TC_GEONW_PON_FPB_BV_11_04
+
+ /**
+ * @desc Check immediate broadcasting in absence of a suitable next hop candidate when SCF is disabled
+ *
+ * Pics Selection: PICS_GN_SHB_SRC
+ * Config Id: CF03
+ * Initial conditions:
+ * with {
+ * the IUT being in the "initial state" and
+ * the IUT not having received any Beacon information from ItsNodeB and
+ * the IUT having a Location Table Entry for ItsNodeA (see note)
+ * }
+ *
+ * MESSAGE : SHB packet
+ *
+ * Expected behaviour:
+ * ensure that {
+ * when {
+ * the IUT is requested to send a MESSAGE
+ * containing TrafficClass.SCF set to 0
+ * }
+ * then {
+ * the IUT broadcast the MESSAGE immediately
+ * }
+ * }
+ *
+ *
+ *
+ * @see ETSI TS 102 871-2 v1.4.1 TP/GEONW/PON/FPB/BV-11-X
+ * @reference EN 302 636-4-1 [1], Annex D2
+ */
+ testcase TC_GEONW_PON_FPB_BV_11_05() runs on ItsMtc system ItsGeoNetworkingSystem {
+
+ f_GEONW_PON_FPB_BV_11_05();
+
+ } // End of testcase TC_GEONW_PON_FPB_BV_11_05
+
+ /**
+ * @desc Check immediate broadcasting in absence of a suitable next hop candidate when SCF is disabled
+ *
+ * Pics Selection: PICS_GN_GUC_SRC
+ * Config Id: CF03
+ * Initial conditions:
+ * with {
+ * the IUT being in the "initial state" and
+ * the IUT not having received any Beacon information from ItsNodeB
+ * }
+ *
+ * MESSAGE : GUC packet addressed to ItsNodeA
+ *
+ * Expected behaviour:
+ * ensure that {
+ * when {
+ * the IUT receives a MESSAGE
+ * containing TrafficClass.SCF set to 0
+ * }
+ * then {
+ * the IUT broadcast the MESSAGE immediately
+ * }
+ * }
+ *
+ *
+ *
+ * @see ETSI TS 102 871-2 v1.4.1 TP/GEONW/PON/FPB/BV-12-X
+ * @reference EN 302 636-4-1 [1], Annex D2
+ */
+ testcase TC_GEONW_PON_FPB_BV_12_01() runs on ItsMtc system ItsGeoNetworkingSystem {
+
+ f_GEONW_PON_FPB_BV_12_01();
+
+ } // End of testcase TC_GEONW_PON_FPB_BV_12_01
+
+ /**
+ * @desc Check immediate broadcasting in absence of a suitable next hop candidate when SCF is disabled
+ *
+ * Pics Selection: PICS_GN_GAC_SRC
+ * Config Id: CF03
+ * Initial conditions:
+ * with {
+ * the IUT being in the "initial state" and
+ * the IUT not having received any Beacon information from ItsNodeB
+ * }
+ *
+ * MESSAGE : GAC packet
+ * containing DestinationArea
+ * indicating AREA2
+ *
+ * Expected behaviour:
+ * ensure that {
+ * when {
+ * the IUT receives a MESSAGE
+ * containing TrafficClass.SCF set to 0
+ * }
+ * then {
+ * the IUT broadcast the MESSAGE immediately
+ * }
+ * }
+ *
+ *
+ *
+ * @see ETSI TS 102 871-2 v1.4.1 TP/GEONW/PON/FPB/BV-12-X
+ * @reference EN 302 636-4-1 [1], Annex D2
+ */
+ testcase TC_GEONW_PON_FPB_BV_12_02() runs on ItsMtc system ItsGeoNetworkingSystem {
+
+ f_GEONW_PON_FPB_BV_12_02();
+
+ } // End of testcase TC_GEONW_PON_FPB_BV_12_02
+
+ /**
+ * @desc Check immediate broadcasting in absence of a suitable next hop candidate when SCF is disabled
+ *
+ * Pics Selection: PICS_GN_GBC_SRC
+ * Config Id: CF03
+ * Initial conditions:
+ * with {
+ * the IUT being in the "initial state" and
+ * the IUT not having received any Beacon information from ItsNodeB
+ * }
+ *
+ * MESSAGE : GBC packet
+ * containing DestinationArea
+ * indicating AREA2
+ *
+ * Expected behaviour:
+ * ensure that {
+ * when {
+ * the IUT receives a MESSAGE
+ * containing TrafficClass.SCF set to 0
+ * }
+ * then {
+ * the IUT broadcast the MESSAGE immediately
+ * }
+ * }
+ *
+ *
+ *
+ * @see ETSI TS 102 871-2 v1.4.1 TP/GEONW/PON/FPB/BV-12-X
+ * @reference EN 302 636-4-1 [1], Annex D2
+ */
+ testcase TC_GEONW_PON_FPB_BV_12_03() runs on ItsMtc system ItsGeoNetworkingSystem {
+
+ f_GEONW_PON_FPB_BV_12_03();
+
+ } // End of testcase TC_GEONW_PON_FPB_BV_12_03
+
+ /**
+ * @desc Check immediate broadcasting in absence of a suitable next hop candidate when SCF is disabled
+ *
+ * Pics Selection: PICS_GN_TSB_SRC
+ * Config Id: CF03
+ * Initial conditions:
+ * with {
+ * the IUT being in the "initial state" and
+ * the IUT not having received any Beacon information from ItsNodeB
+ * }
+ *
+ * MESSAGE : TSB packet
+ *
+ * Expected behaviour:
+ * ensure that {
+ * when {
+ * the IUT receives a MESSAGE
+ * containing TrafficClass.SCF set to 0
+ * }
+ * then {
+ * the IUT broadcast the MESSAGE immediately
+ * }
+ * }
+ *
+ *
+ *
+ * @see ETSI TS 102 871-2 v1.4.1 TP/GEONW/PON/FPB/BV-12-X
+ * @reference EN 302 636-4-1 [1], Annex D2
+ */
+ testcase TC_GEONW_PON_FPB_BV_12_04() runs on ItsMtc system ItsGeoNetworkingSystem {
+
+ f_GEONW_PON_FPB_BV_12_04();
+
+ } // End of testcase TC_GEONW_PON_FPB_BV_11_04
+
+ } // End of group geoForwardingPacketBuffer
+
+ // 6.2.2.6
+ group geoGeoNetworkingAddress {
+
+ /**
+ * @desc Check the initial GeoNetworking address assignment by IUT with auto-address configuration
+ *
+ * Pics Selection: PICS_GN_ADDR_AUTO
+ * Config Id: CF01
+ * Initial conditions:
+ * with {
+ * the IUT being in the "initial state" and
+ * the IUT's itsGnLocalAddrConfMethod MIB parameter is set to AUTO (0)
+ * }
+ * Expected behaviour:
+ * ensure that {
+ * when {
+ * the IUT generates a Beacon packet
+ * }
+ * then {
+ * the IUT sends a GeoNetworking message
+ * containing a correctly formatted Common Header
+ * containing HT field
+ * set to '1' (BEACON)
+ * containing HST field
+ * set to '0' (UNSPECIFIED)
+ * containing a Beacon Extender Header
+ * containing SOPV field
+ * containing GN_ADDR field
+ * indicating itsGnLocalGnAddr MIB parameter
+ * }
+ * }
+ *
+ *
+ * @see ETSI TS 102 871-2 v1.4.1 TP/GEONW/PON/GNA/BV-01
+ * @reference EN 302 636-4-1 [1], clauses 9.2.1.2 and 9.3.6.2
+ */
+ testcase TC_GEONW_PON_GNA_BV_01() runs on ItsGeoNetworking system ItsGeoNetworkingSystem {
+
+ f_GEONW_PON_GNA_BV_01();
+
+ } // End of testcase TC_GEONW_PON_GNA_BV_01
+
+ /**
+ * @desc Check the proper functioning of duplicate address detection mechanism
+ *
+ * Pics Selection: PICS_GN_DAD
+ * Config Id: CF01
+ * Initial conditions:
+ * with {
+ * the IUT being in the "initial state" and
+ * the IUT having sent an SHB packet
+ * }
+ * Expected behaviour:
+ * ensure that {
+ * when {
+ * the IUT receives a SHB packet
+ * containing SHB Extended Header
+ * containing SOPV field
+ * containing GN_ADDR field
+ * indicating same GN_ADDR as the GN_ADDR field in the last SHB packet originated by the IUT
+ * }
+ * then {
+ * the IUT sends subsequent SHB packet
+ * containing SHB Extended Header
+ * containing SOPV field
+ * containing GN_ADDR field
+ * indicating different GN_ADDR as the previous used GN_ADDR
+ * }
+ * }
+ *
+ *
+ * @see ETSI TS 102 871-2 v1.4.1 TP/GEONW/PON/GNA/BV-02
+ * @reference EN 302 636-4-1 [1], clauses 9.2.1.4
+ */
+ testcase TC_GEONW_PON_GNA_BV_02() runs on ItsGeoNetworking system ItsGeoNetworkingSystem {
+
+ f_GEONW_PON_GNA_BV_02();
+
+ } // End of testcase TC_GEONW_PON_GNA_BV_02
+
+ } // End of group geoGeoNetworkingAddress
+
+ // 6.2.2.7
+ group geoBeaconing {
+
+ /**
+ * @desc Check that the IUT transmits Beacons at prescribed periodicity in the absence of other originated
+ * packets
+ *
+ * Pics Selection: PICS_GN_BEACON_SRC
+ * Config Id: CF01
+ * Initial conditions:
+ * with {
+ * the IUT being in the "initial state"
+ * }
+ * Expected behaviour:
+ * ensure that {
+ * when {
+ * the IUT generates Beacon packets
+ * }
+ * then {
+ * the IUT sends each Beacon packet
+ * after expiry of itsGnBeaconServiceRetransmitTimer
+ * and before expiry of itsGnBeaconServiceRetransmitTimer + itsGnBeaconServiceMaxJitter
+ * }
+ * }
+ *
+ *
+ * @see ETSI TS 102 871-2 v1.4.1 TP/GEONW/PON/BEA/TI-01
+ * @reference EN 302 636-4-1 [1], clauses 9.3.6.2
+ */
+ testcase TC_GEONW_PON_BEA_TI_01() runs on ItsGeoNetworking system ItsGeoNetworkingSystem {
+
+ f_GEONW_PON_BEA_TI_01();
+
+ } // End of testcase TC_GEONW_PON_BEA_TI_01
+
+ /**
+ * @desc Check that the IUT resets its timer for next Beacon transmission when originating other packets
+ *
+ * Pics Selection: PICS_GN_BEACON_SRC
+ * Config Id: CF01
+ * Initial conditions:
+ * with {
+ * the IUT being in the "initial state" and
+ * the IUT having received Beacon information from ItsNodeB
+ * }
+ * Expected behaviour:
+ * ensure that {
+ * when {
+ * the IUT is requested to send a SHB packet
+ * }
+ * then {
+ * the IUT broadcasts a SHB packet and
+ * the IUT sends the next Beacon packet
+ * after expiry of itsGnBeaconServiceRetransmitTimer
+ * and before expiry of itsGnBeaconServiceRetransmitTimer + itsGnBeaconServiceMaxJitter
+ * }
+ * }
+ *
+ *
+ * @see ETSI TS 102 871-2 v1.4.1 TP/GEONW/PON/BEA/TI-02
+ * @reference EN 302 636-4-1 [1], clauses 9.2.3 and 9.3.10.2
+ */
+ testcase TC_GEONW_PON_BEA_TI_02() runs on ItsGeoNetworking system ItsGeoNetworkingSystem {
+
+ f_GEONW_PON_BEA_TI_02();
+
+ } // End of testcase TC_GEONW_PON_BEA_TI_02
+
+ } // End of group geoBeaconing
+
+ // 6.2.2.8
+ group geoGeoUnicast {
+
+ group gucAllForwardingAlgorithms {
+
+ /**
+ * @desc Check that the protocol header fields (RHL, PV) are correctly updated at each forwarding step
+ *
+ * Pics Selection: PICS_GN_GUC_FWD
+ * Config Id: CF03
+ * Initial conditions:
+ * with {
+ * the IUT being in the "initial state" and
+ * the IUT having received Beacon information from ItsNodeB and
+ * the IUT having received Beacon information from ItsNodeC and
+ * the IUT having received a GUC packet (GEOUNI1) originated by ItsNodeA
+ * }
+ * Expected behaviour:
+ * ensure that {
+ * when {
+ * the IUT receives a GUC packet (GEOUNI2) addressed to ItsNodeA from ItsNodeC
+ * containing TrafficClass.SCF set to 1
+ * containing Basic Header
+ * containing RHL field
+ * indicating value greater than 1
+ * containing Common Header
+ * containing MHL field
+ * indicating value MHL1
+ * containing GUC Extended Header
+ * containing DEPV field
+ * indicating position different from the SOPV value of GEOUNI1
+ * containing TST field
+ * indicating older value than the TimeStamp value of GEOUNI1
+ * }
+ * then {
+ * the IUT retransmits GEOUNI2
+ * containing Basic Header
+ * containing RHL field
+ * indicating value decreased by 1 from the incoming value
+ * containing Common Header
+ * containing MHL field
+ * indicating value MHL1
+ * containing GUC Extended Header
+ * containing DEPV field
+ * indicating same position as the SOPV value of GEOUNI1
+ * }
+ * }
+ *
+ *
+ * @see ETSI TS 102 871-2 v1.4.1 TP/GEONW/PON/GUC/ALL/BV-03
+ * @reference EN 302 636-4-1 [1], clauses 10.3.8.3
+ */
+ testcase TC_GEONW_PON_GUC_ALL_BV_03() runs on ItsMtc system ItsGeoNetworkingSystem {
+
+ f_GEONW_PON_GUC_ALL_BV_03();
+
+ } // End of testcase TC_GEONW_PON_GUC_ALL_BV_03
+
+ /**
+ * @desc Check that the RHL restriction is correctly handled at the forwarding step
+ *
+ * Pics Selection: PICS_GN_GUC_FWD
+ * Config Id: CF03
+ * Initial conditions:
+ * with {
+ * the IUT being in the "initial state" and
+ * the IUT having received Beacon information from ItsNodeB and
+ * the IUT having received Beacon information from ItsNodeC
+ * }
+ * Expected behaviour:
+ * ensure that {
+ * when {
+ * the IUT receives a GUC packet addressed to ItsNodeA from ItsNodeC
+ * containing TrafficClass.SCF set to 1
+ * containing Basic Header
+ * containing RHL field
+ * indicating 1
+ * }
+ * then {
+ * the IUT does not retrnasmit the GUC packet
+ * }
+ * }
+ *
+ *
+ * @see ETSI TS 102 871-2 v1.4.1 TP/GEONW/PON/GUC/ALL/BO-04
+ * @reference EN 302 636-4-1 [1], clauses 10.3.8.3
+ */
+ testcase TC_GEONW_PON_GUC_ALL_BO_04() runs on ItsMtc system ItsGeoNetworkingSystem {
+
+ f_GEONW_PON_GUC_ALL_BO_04();
+
+ } // End of testcase TC_GEONW_PON_GUC_ALL_BO_04
+
+ /**
+ * @desc Check that a received GUC packet is passed over the Gn SAP to the correct upper
+ * protocol if the Destination address matches the IUT address
+ *
+ * Pics Selection: PICS_GN_GUC_DST
+ * Config Id: CF01
+ * Initial conditions:
+ * with {
+ * the IUT being in the "initial state"
+ * }
+ * Expected behaviour:
+ * ensure that {
+ * when {
+ * the IUT receives a GUC packet addressed to it
+ * }
+ * then {
+ * the IUT passes the received GUC packet to the correct Upper Layer protocol
+ * }
+ * }
+ *
+ *
+ * @see ETSI TS 102 871-2 v1.4.1 TP/GEONW/PON/GUC/ALL/BV-05
+ * @reference EN 302 636-4-1 [1], clauses 10.3.8.4
+ */
+ testcase TC_GEONW_PON_GUC_ALL_BV_05() runs on ItsGeoNetworking system ItsGeoNetworkingSystem {
+
+ f_GEONW_PON_GUC_ALL_BV_05();
+
+ } // End of testcase TC_GEONW_PON_GUC_ALL_BV_06
+
+ /**
+ * @desc Check that a received GUC packet is not passed over the Gn SAP if the Destination
+ * address does not match the IUT address
+ *
+ * Pics Selection: PICS_GN_GUC_FWD
+ * Config Id: CF01
+ * Initial conditions:
+ * with {
+ * the IUT being in the "initial state" and
+ * the IUT having received Beacon information from ItsNodeB and
+ * the IUT having received Beacon information from ItsNodeC
+ * }
+ * Expected behaviour:
+ * ensure that {
+ * when {
+ * the IUT receives a GUC packet addressed to ItsNodeB from ItsNodeC
+ * }
+ * then {
+ * the IUT does not pass the received GUC packet to any Upper Layer
+ * }
+ * }
+ *
+ *
+ * @see ETSI TS 102 871-2 v1.4.1 TP/GEONW/PON/GUC/ALL/BV-06
+ * @reference EN 302 636-4-1 [1], clauses 10.3.8.4
+ */
+ testcase TC_GEONW_PON_GUC_ALL_BV_06() runs on ItsGeoNetworking system ItsGeoNetworkingSystem {
+
+ f_GEONW_PON_GUC_ALL_BV_06();
+
+ } // End of testcase TC_GEONW_PON_GUC_ALL_BV_06
+
+ /**
+ * @desc Check that a received GUC packet is not passed over the Gn SAP to the correct upper protocol
+ * when the Destination address matches the IUT address if received twice or more
+ *
+ * Pics Selection: PICS_GN_GUC_DST
+ * Config Id: CF03
+ * Initial conditions:
+ * with {
+ * the IUT being in the "initial state" and
+ * the IUT having received Beacon information from ItsNodeC and
+ * the IUT having received Beacon information from ItsNodeB and
+ * the IUT having received a GUC packet addressed to IUT from ItsNodeC
+ * containing TrafficClass.SCF set to 1
+ * containing Basic Header
+ * containing RHL field
+ * indicating value greater than 1
+ * }
+ * Expected behaviour:
+ * ensure that {
+ * when {
+ * the IUT receives the same GUC packet from ItsNodeB
+ * containing Basic Header
+ * containing RHL field
+ * indicating HL1 - 1
+ * }
+ * then {
+ * the IUT does not pass the received GUC packet to any Upper Layer protocol
+ * }
+ * }
+ *
+ *
+ * @see ETSI TS 102 871-2 v1.4.1 TP/GEONW/PON/GUC/ALL/BO-08
+ * @reference EN 302 636-4-1 [1], clause 10.3.9.3
+ */
+ testcase TC_GEONW_PON_GUC_ALL_BO_08() runs on ItsMtc system ItsGeoNetworkingSystem {
+
+ f_GEONW_PON_GUC_ALL_BO_08();
+
+ } // End of testcase TC_GEONW_PON_GUC_ALL_BV_08
+
+ } // End of group gucAllForwardingAlgorithms
+
+ group gucGreedyForwarding {
+
+ /**
+ * @desc Check that a GUC request over upper Gn SAP triggers the origination of a
+ * GUC packet
+ *
+ * Pics Selection: PICS_GN_GUC_SRC AND (PICS_GN_NON_AREA_FORWARDING_ALGORITHM == 'GREEDY' OR PICS_GN_NON_AREA_FORWARDING_ALGORITHM == 'UNSPECIFIED')
+ * Config Id: CF01
+ * Initial conditions:
+ * with {
+ * the IUT being in the "initial state" and
+ * the IUT having received Beacon information from ItsNodeB
+ * }
+ * Expected behaviour:
+ * ensure that {
+ * when {
+ * the IUT is requested to send a GUC packet to ItsNodeB
+ * }
+ * then {
+ * the IUT sends a GeoNetworking packet
+ * containing a correctly formatted Common Header
+ * containing HT field
+ * set to '2' (GEOUNICAST)
+ * containing GUC Extended Header
+ * containing DEPV field
+ * indicating same position as the SOPV value of the Beacon information received
+ * }
+ * }
+ *
+ *
+ * @see ETSI TS 102 871-2 v1.4.1 TP/GEONW/PON/GUC/GRD/BV-01
+ * @reference EN 302 636-4-1 [1], clauses 10.3.8.2, Annex E.2
+ */
+ testcase TC_GEONW_PON_GUC_GRD_BV_01() runs on ItsGeoNetworking system ItsGeoNetworkingSystem {
+
+ f_GEONW_PON_GUC_GRD_BV_01();
+
+ } // End of testcase TC_GEONW_PON_GUC_GRD_BV_01
+
+ /**
+ * @desc Check that a received GUC packet is routed to the correct next hop neighbour according
+ * to the greedy forwarding rules
+ *
+ * Pics Selection: PICS_GN_GUC_FWD AND (PICS_GN_NON_AREA_FORWARDING_ALGORITHM == 'GREEDY' OR PICS_GN_NON_AREA_FORWARDING_ALGORITHM == 'UNSPECIFIED')
+ * Config Id: CF04
+ * Initial conditions:
+ * with {
+ * the IUT being in the "initial state" and
+ * the IUT having received Beacon information from ItsNodeB and
+ * the IUT having received Beacon information from ItsNodeD and
+ * the IUT having received Beacon information from ItsNodeC
+ * }
+ * Expected behaviour:
+ * ensure that {
+ * when {
+ * the IUT receives a GUC packet addressed to ItsNodeA from ItsNodeC
+ * containing TrafficClass.SCF set to 1
+ * containing Basic Header
+ * containing RHL field
+ * indicating value greater than 1
+ * }
+ * then {
+ * the IUT selects ItsNodeB as the next hop and
+ * the IUT forwards the GUC packet
+ * }
+ * }
+ *
+ *
+ * @see ETSI TS 102 871-2 v1.4.1 TP/GEONW/PON/GUC/GRD/BV-02
+ * @reference EN 302 636-4-1 [1], clauses 10.3.8.3, Annex E.2
+ */
+ testcase TC_GEONW_PON_GUC_GRD_BV_02() runs on ItsMtc system ItsGeoNetworkingSystem {
+
+ f_GEONW_PON_GUC_GRD_BV_02();
+
+ } // End of testcase TC_GEONW_PON_GUC_GRD_BV_02
+
+ /**
+ * @desc Check that a received GUC packet is not triggering forwarding if received twice or more
+ *
+ * Pics Selection: PICS_GN_GUC_FWD AND (PICS_GN_NON_AREA_FORWARDING_ALGORITHM == 'GREEDY' OR PICS_GN_NON_AREA_FORWARDING_ALGORITHM == 'UNSPECIFIED')
+ * Config Id: CF03
+ * Initial conditions:
+ * with {
+ * the IUT being in the "initial state" and
+ * the IUT having received Beacon information from ItsNodeC and
+ * the IUT having received Beacon information from ItsNodeB and
+ * the IUT having received a GUC packet addressed to ItsNodeA from ItsNodeC
+ * containing TrafficClass.SCF set to 1
+ * containing Basic Header
+ * containing RHL field
+ * indicating value greater than 1 and
+ * the IUT having forwarded the GUC packet
+ * }
+ * Expected behaviour:
+ * ensure that {
+ * when {
+ * the IUT receives the same GUC packet from ItsNodeB
+ * containing Basic Header
+ * containing RHL field
+ * indicating HL1 - 1
+ * }
+ * then {
+ * the IUT does forward the packet
+ * }
+ * }
+ *
+ *
+ * @see ETSI TS 102 871-2 v1.4.1 TP/GEONW/PON/GUC/GRD/BO-07
+ * @reference EN 302 636-4-1 [1], clause 10.3.9.3, Annex E.2
+ */
+ testcase TC_GEONW_PON_GUC_GRD_BO_07() runs on ItsMtc system ItsGeoNetworkingSystem {
+
+ f_GEONW_PON_GUC_GRD_BO_07();
+
+ } // End of testcase TC_GEONW_PON_GUC_GRD_BO_07
+
+ } // End of group gucGreedyForwarding
+
+ group gucContentionBasedForwarding {
+
+ /**
+ * @desc Check that a GUC request over upper Gn SAP triggers the origination of a GUC packet
+ *
+ * Pics Selection: PICS_GN_GUC_SRC AND PICS_GN_NON_AREA_FORWARDING_ALGORITHM == 'CBF'
+ * Config Id: CF03
+ * Initial conditions:
+ * with {
+ * the IUT being in the "initial state" and
+ * the IUT having received Beacon information from ItsNodeB
+ * }
+ * Expected behaviour:
+ * ensure that {
+ * when {
+ * the IUT is requested to send a GUC packet to ItsNodeB
+ * }
+ * then {
+ * the IUT broadcasts a GeoNetworking packet
+ * containing a correctly formatted Common Header
+ * containing HT field
+ * set to '2' (GEOUNICAST)
+ * containing GUC Extended Header
+ * containing DEPV field
+ * indicating same position as the SOPV value of the received Beacon information
+ * }
+ * }
+ *
+ *
+ * @see ETSI TS 102 871-2 v1.4.1 TP/GEONW/PON/GUC/CBF/BV-01
+ * @reference EN 302 636-4-1 [1], clauses 10.3.8.2, 10.3.8.3, Annex E.3
+ */
+ testcase TC_GEONW_PON_GUC_CBF_BV_01() runs on ItsMtc system ItsGeoNetworkingSystem {
+
+ f_GEONW_PON_GUC_CBF_BV_01();
+
+ } // End of testcase TC_GEONW_PON_GUC_CBF_BV_01
+
+ /**
+ * @desc Check that a received GUC packet is forwarded at the correct time according to the
+ * contention based forwarding rules
+ *
+ * Pics Selection: PICS_GN_GUC_FWD AND PICS_GN_NON_AREA_FORWARDING_ALGORITHM == 'CBF'
+ * Config Id: CF03
+ * Initial conditions:
+ * with {
+ * the IUT being in the "initial state" and
+ * the IUT having received Beacon information from ItsNodeB and
+ * the IUT having received Beacon information from ItsNodeC and
+ * the distance between IUT and ItsNodeA being
+ * less than itsGnDefaultMaxCommunicationRange MIB attribute
+ * }
+ * Expected behaviour:
+ * ensure that {
+ * when {
+ * the IUT receives a GUC packet addressed to ItsNodeA from ItsNodeC
+ * containing TrafficClass.SCF set to 1
+ * containing Basic Header
+ * containing RHL field
+ * indicating value greater than 1
+ * }
+ * then {
+ * the IUT re-broadcasts the received GUC packet
+ * upon expiry of calculated CBF delay (see note)
+ * }
+ * }
+ * NOTE: The CBF delay timer value is calculated from the itsGnDefaultMaxCommunicationRange,
+ * itsGnCbfMinTime, and itsGnCbfMaxTime MIB attributes, and the distance value
+ * between IUT and ItsNodeC
+ *
+ *
+ *
+ * @see ETSI TS 102 871-2 v1.4.1 TP/GEONW/PON/GUC/CBF/BV-02
+ * @reference EN 302 636-4-1 [1], clauses 10.3.8.3, Annex E.3
+ */
+ testcase TC_GEONW_PON_GUC_CBF_BV_02() runs on ItsMtc system ItsGeoNetworkingSystem {
+
+ f_GEONW_PON_GUC_CBF_BV_02();
+
+ } // End of testcase TC_GEONW_PON_GUC_CBF_BV_02
+
+ /**
+ * @desc Check that GUC packet forwarding correctly avoids packet duplication according to the
+ * contention based forwarding rules
+ *
+ * Pics Selection: PICS_GN_GUC_FWD AND PICS_GN_NON_AREA_FORWARDING_ALGORITHM == 'CBF'
+ * Config Id: CF03
+ * Initial conditions:
+ * with {
+ * the IUT being in the "initial state" and
+ * the IUT having received Beacon information from ItsNodeB and
+ * the IUT having received Beacon information from ItsNodeC and
+ * the distance between IUT and ItsNodeA being
+ * less than the itsGnDefaultMaxCommunicationRange MIB attribute and
+ * the IUT having received a GUC packet addressed to ItsNodeA from ItsNodeC
+ * containing TrafficClass.SCF set to 1
+ * containing Basic Header
+ * containing RHL field
+ * indicating value greater than 1 and
+ * the IUT having started a CBF timer for this packet (see note)
+ * }
+ * Expected behaviour:
+ * ensure that {
+ * when {
+ * the IUT receives the same GUC packet from ItsNodeD
+ * before expiration of the CBF timer
+ * }
+ * then {
+ * the IUT does not re-broadcast the GUC packet
+ * }
+ * }
+ * NOTE: the CBF delay timer value is calculated from the itsGnDefaultMaxCommunicationRange,
+ * itsGnCbfMinTime, and itsGnCbfMaxTime MIB attributes, and the
+ * distance value between IUT and ItsNodeC
+ *
+ *
+ *
+ * @see ETSI TS 102 871-2 v1.4.1 TP/GEONW/PON/GUC/CBF/BV-07
+ * @reference EN 302 636-4-1 [1], clauses 10.3.8.3, Annex E.3
+ */
+ testcase TC_GEONW_PON_GUC_CBF_BV_07() runs on ItsMtc system ItsGeoNetworkingSystem {
+
+ f_GEONW_PON_GUC_CBF_BV_07();
+
+ } // End of testcase TC_GEONW_PON_GUC_CBF_BV_07
+
+ /**
+ * @desc Check that a received GUC packet forwarding is correctly handling the minimum delay
+ * value according to the contention based forwarding rules
+ *
+ * Pics Selection: PICS_GN_GUC_FWD AND PICS_GN_NON_AREA_FORWARDING_ALGORITHM == 'CBF'
+ * Config Id: CF03
+ * Initial conditions:
+ * with {
+ * the IUT being in the "initial state" and
+ * the IUT having received Beacon information from ItsNodeB and
+ * the IUT having received Beacon information from ItsNodeC and
+ * the distance between IUT and ItsNodeC being
+ * larger than the itsGnDefaultMaxCommunicationRange MIB attribute
+ * }
+ * Expected behaviour:
+ * ensure that {
+ * when {
+ * the IUT receives a GUC packet addressed to ItsNodeA from ItsNodeC
+ * containing TrafficClass.SCF set to 1
+ * containing Basic Header
+ * containing RHL field
+ * indicating value greater than 1
+ * }
+ * then {
+ * the IUT re-broadcasts the received GUC packet
+ * upon expiry of itsGnCbfMinTime delay
+ * }
+ * }
+ *
+ *
+ * @see ETSI TS 102 871-2 v1.4.1 TP/GEONW/PON/GUC/CBF/BV-20
+ * @reference EN 302 636-4-1 [1], clauses 10.3.8.3, Annex E.3
+ */
+ testcase TC_GEONW_PON_GUC_CBF_BV_20() runs on ItsMtc system ItsGeoNetworkingSystem {
+
+ f_GEONW_PON_GUC_CBF_BV_20();
+
+ } // End of testcase TC_GEONW_PON_GUC_CBF_BV_20
+
+ /**
+ * @desc Check that a received GUC packet is forwarded at the correct time according to the
+ * contention based forwarding rules when the sender is unknown
+ *
+ * Pics Selection: PICS_GN_GUC_FWD AND PICS_GN_NON_AREA_FORWARDING_ALGORITHM == 'CBF'
+ * Config Id: CF03
+ * Initial conditions:
+ * with {
+ * the IUT being in the "initial state" and
+ * the IUT having received Beacon information from ItsNodeB and
+ * the IUT not having received any message from ItsNodeC and
+ * the distance between IUT and ItsNodeA being
+ * less than the itsGnDefaultMaxCommunicationRange MIB attribute and
+ * }
+ * Expected behaviour:
+ * ensure that {
+ * when {
+ * the IUT receives a GUC packet addressed to ItsNodeA from ItsNodeC
+ * containing TrafficClass.SCF set to 1
+ * containing Basic Header
+ * containing RHL field
+ * indicating value greater than 1
+ * }
+ * then {
+ * the IUT re-broadcasts the received GUC packet
+ * upon expiry of CBF_MAX
+ * }
+ * }
+ *
+ *
+ *
+ * @see ETSI TS 102 871-2 v1.4.1 TP/GEONW/PON/GUC/CBF/BV-21
+ * @reference EN 302 636-4-1 [1], clauses 10.3.8.3, Annex E.3
+ */
+ testcase TC_GEONW_PON_GUC_CBF_BV_21() runs on ItsMtc system ItsGeoNetworkingSystem {
+
+ f_GEONW_PON_GUC_CBF_BV_21();
+
+ } // End of testcase TC_GEONW_PON_GUC_CBF_BV_21
+
+ /**
+ * @desc Check that a received GUC packet is forwarded at the correct time according to the contention
+ * based forwarding rules when the sender is known sender with an uncertain position (PAI = 0).
+ *
+ * Pics Selection: PICS_GN_GUC_FWD AND PICS_GN_NON_AREA_FORWARDING_ALGORITHM == 'CBF'
+ * Config Id: CF03
+ * Initial conditions:
+ * with {
+ * the IUT being in the "initial state" and
+ * the IUT having received Beacon information from ItsNodeB and
+ * the IUT having received Beacon information from ItsNodeD
+ * containing Beacon ExtendedHeader
+ * containing SOPV field
+ * containing PAI
+ * set to ‘0’
+ * }
+ * Expected behaviour:
+ * ensure that {
+ * when {
+ * the IUT receives a GUC packet addressed to ItsNodeA generated by ItsNodeC from ItsNodeD
+ * containing TrafficClass.SCF set to 1
+ * containing Basic Header
+ * containing RHL field
+ * indicating value greater than 1
+ * }
+ * then {
+ * the IUT re-broadcasts the GUC packet
+ * upon expiry of CBF_MAX
+ * }
+ * }
+ *
+ *
+ *
+ * @see ETSI TS 102 871-2 v1.4.1 TP/GEONW/PON/GUC/CBF/BV-22
+ * @reference EN 302 636-4-1 [1], clauses 10.3.8.3, Annex E.3
+ */
+ testcase TC_GEONW_PON_GUC_CBF_BV_22() runs on ItsMtc system ItsGeoNetworkingSystem {
+
+ f_GEONW_PON_GUC_CBF_BV_22();
+
+ } // End of testcase TC_GEONW_PON_GUC_CBF_BV_22
+
+ } // End of group gucContentionBasedForwarding
+
+ } // End of group geoGeoUnicast
+
+ // 6.2.2.9
+ group geoGeoBroadcast {
+
+ group gbcNonAreaForwarding {
+
+ group gbcNonAreaAllForwardingAlgorithm {
+
+ /**
+ * @desc Check that the protocol header fields (RHL) are correctly updated during a GBC forwarding step
+ *
+ * Pics Selection: PICS_GN_GBC_FWD
+ * Config Id: CF03
+ * Initial conditions:
+ * with {
+ * the IUT being in the "initial state" and
+ * the IUT having received Beacon information from ItsNodeB
+ * the IUT having received Beacon information from ItsNodeC
+ * }
+ * Expected behaviour:
+ * ensure that {
+ * when {
+ * the IUT receives a GBC packet from ItsNodeC
+ * containing TrafficClass.SCF set to 1
+ * containing Basic Header
+ * containing RHL field
+ * indicating value HL1 higher than 1
+ * containing Common Header
+ * containing MHL field
+ * indicating value MHL1
+ * containing DestinationArea
+ * indicating AREA2
+ * }
+ * then {
+ * the IUT retransmits the GBC packet
+ * containing Basic Header
+ * containing RHL field
+ * indicating value (HL1 -1)
+ * containing Common Header
+ * containing MHL field
+ * indicating value MHL1
+ * containing DestinationArea
+ * indicating AREA2
+ * }
+ * }
+ *
+ *
+ * @see ETSI TS 102 871-2 v1.4.1 TP/GEONW/PON/GBC/NONAREA/ALL/BV-03
+ * @reference EN 302 636-4-1 [1], clauses 10.3.11.3
+ */
+ testcase TC_GEONW_PON_GBC_NONAREA_ALL_BV_03() runs on ItsMtc system ItsGeoNetworkingSystem {
+
+ f_GEONW_PON_GBC_NONAREA_ALL_BV_03();
+
+ } // End of testcase TC_GEONW_PON_GBC_NONAREA_ALL_BV_03
+
+ /**
+ * @desc Check that the RHL restriction is correctly handled at a GBC forwarding step
+ *
+ * Pics Selection: PICS_GN_GBC_FWD
+ * Config Id: CF03
+ * Initial conditions:
+ * with {
+ * the IUT being in the "initial state" and
+ * the IUT having received Beacon information from ItsNodeB
+ * the IUT having received Beacon information from ItsNodeC
+ * }
+ * Expected behaviour:
+ * ensure that {
+ * when {
+ * the IUT receives a GBC packet from ItsNodeC
+ * containing TrafficClass.SCF set to 1
+ * containing Basic Header
+ * containing RHL field
+ * indicating 1
+ * containing GBC Extended Header
+ * containing DestinationArea
+ * indicating AREA2
+ * }
+ * then {
+ * the IUT does not retransmit the GBC packet
+ * }
+ * }
+ *
+ *
+ * @see ETSI TS 102 871-2 v1.4.1 TP/GEONW/PON/GBC/NONAREA/ALL/BV-04
+ * @reference EN 302 636-4-1 [1], clauses 10.3.11.3
+ */
+ testcase TC_GEONW_PON_GBC_NONAREA_ALL_BV_04() runs on ItsMtc system ItsGeoNetworkingSystem {
+
+ f_GEONW_PON_GBC_NONAREA_ALL_BV_04();
+
+ } // End of testcase TC_GEONW_PON_GBC_NONAREA_ALL_BV_04
+
+ /**
+ * @desc Check that a received GBC packet is not passed over the Gn SAP if it is received for the
+ * first time outside the GBC destination area
+ *
+ * Pics Selection: PICS_GN_GBC_FWD
+ * Config Id: CF01
+ * Initial conditions:
+ * with {
+ * the IUT being in the "initial state" and
+ * the IUT having received Beacon information from ItsNodeB
+ * }
+ * Expected behaviour:
+ * ensure that {
+ * when {
+ * the IUT receives a GBC packet
+ * containing TrafficClass.SCF set to 1
+ * containing DestinationArea
+ * indicating AREA2
+ * }
+ * then {
+ * the IUT does not pass the received GBC packet to any Upper Layer protocol
+ * }
+ * }
+ *
+ *
+ * @see ETSI TS 102 871-2 v1.4.1 TP/GEONW/PON/GBC/NONAREA/ALL/BV-06
+ * @reference EN 302 636-4-1 [1], clauses 10.3.11.3
+ */
+ testcase TC_GEONW_PON_GBC_NONAREA_ALL_BV_06() runs on ItsGeoNetworking system ItsGeoNetworkingSystem {
+
+ f_GEONW_PON_GBC_NONAREA_ALL_BV_06();
+
+ } // End of testcase TC_GEONW_PON_GBC_NONAREA_ALL_BV_06
+
+ /**
+ * @desc Check that a received GBC packet is discarded when indicating a too big GeoArea
+ *
+ * Pics Selection: PICS_GN_GBC_FWD
+ * Config Id: CF04
+ * Initial conditions:
+ * with {
+ * the IUT being in the "initial state" and
+ * the IUT having received Beacon information from ItsNodeB
+ * the IUT having received Beacon information from ItsNodeD
+ * }
+ * Expected behaviour:
+ * ensure that {
+ * when {
+ * the IUT receives a GBC packet from ItsNodeC
+ * containing TrafficClass.SCF set to 1
+ * containing DestinationArea
+ * indicating a geoArea bigger than itsGnMaxGeoAreaSize
+ * }
+ * then {
+ * the IUT does not retransmit the received GBC packet
+ * }
+ * }
+ *
+ *
+ * @see ETSI TS 102 871-2 v1.4.1 TP/GEONW/PON/GBC/NONAREA/ALL/BO-09
+ * @reference EN 302 636-4-1 [1], Annex B.3
+ */
+ testcase TC_GEONW_PON_GBC_NONAREA_ALL_BO_09() runs on ItsMtc system ItsGeoNetworkingSystem {
+
+ f_GEONW_PON_GBC_NONAREA_ALL_BO_09();
+
+ } // End of testcase TC_GEONW_PON_GBC_NONAREA_ALL_BO_09
+
+ /**
+ * @desc Check that a received GBC packet from inside of the destination area is discarded if
+ * received for the first time when IUT is outside of the destination area
+ *
+ * Pics Selection: PICS_GN_GBC_FWD AND PICS_GN_GEOBROADCAST_FORWARDING_ALGORITHM == 'CBF'
+ * Config Id: CF04
+ * Initial conditions:
+ * with {
+ * the IUT being in the "initial state" and
+ * the IUT having received Beacon information from ItsNodeB and
+ * the IUT having received Beacon information from ItsNodeC and
+ * the IUT having received Beacon information from ItsNodeD
+ * }
+ * Expected behaviour:
+ * ensure that {
+ * when {
+ * the IUT receives the a GBC packet from ItsNodeD
+ * containing TrafficClass.SCF set to 1
+ * containing GBC Extended Header
+ * containing DestinationArea
+ * indicating AREA2
+ * }
+ * then {
+ * the IUT discards the received GBC packet
+ * }
+ * }
+ *
+ *
+ *
+ * @see ETSI TS 102 871-2 v1.4.1 TP/GEONW/PON/GBC/NONAREA/ALL/BO-10
+ * @reference EN 302 636-4-1 [1], Annex D
+ */
+ testcase TC_GEONW_PON_GBC_NONAREA_ALL_BO_10() runs on ItsMtc system ItsGeoNetworkingSystem {
+
+ f_GEONW_PON_GBC_NONAREA_ALL_BO_10();
+
+ } // End of testcase TC_GEONW_PON_GBC_NONAREA_ALL_BO_10
+
+ } // End of group gbcNonAreaAllForwardingAlgorithm
+
+ group gbcNonAreaGreedyForwarding {
+
+ /**
+ * @desc Check that a GBC request over upper Gn SAP triggers line forwarding if the IUT is outside the Destination Area
+ *
+ * Pics Selection: PICS_GN_GBC_SRC AND (PICS_GN_NON_AREA_FORWARDING_ALGORITHM == 'GREEDY'
+ * OR PICS_GN_NON_AREA_FORWARDING_ALGORITHM == 'UNSPECIFIED')
+ * Config Id: CF02
+ * Initial conditions:
+ * with {
+ * the IUT being in the "initial state" and
+ * the IUT having received Beacon information from ItsNodeD and
+ * the IUT having received Beacon information from ItsNodeB
+ * }
+ * Expected behaviour:
+ * ensure that {
+ * when {
+ * the IUT is requested to send a GBC packet
+ * containing TrafficClass.SCF set to 1
+ * containing DestinationArea
+ * indicating AREA2
+ * }
+ * then {
+ * the IUT selects ItsNodeB as the next hop and
+ * the IUT sends the GBC packet (see note)
+ * }
+ * }
+ * NOTE: Next hop ITS Station being identified by the MAC layer address of ItsNodeB
+ *
+ *
+ *
+ * @see ETSI TS 102 871-2 v1.4.1 TP/GEONW/PON/GBC/NONAREA/GRD/BV-01
+ * @reference EN 302 636-4-1 [1], clauses 10.3.11.2, Annex E.2
+ */
+ testcase TC_GEONW_PON_GBC_NONAREA_GRD_BV_01() runs on ItsMtc system ItsGeoNetworkingSystem {
+
+ f_GEONW_PON_GBC_NONAREA_GRD_BV_01();
+
+ } // End of testcase TC_GEONW_PON_GBC_NONAREA_GRD_BV_01
+
+ /**
+ * @desc Check that a received GBC packet is triggering line forwarding if received out of its
+ * destination area for the first time from a known ITS-Station
+ *
+ * Pics Selection: PICS_GN_GBC_FWD AND (PICS_GN_NON_AREA_FORWARDING_ALGORITHM == 'GREEDY'
+ * OR PICS_GN_NON_AREA_FORWARDING_ALGORITHM == 'UNSPECIFIED')
+ * Config Id: CF04
+ * Initial conditions:
+ * with {
+ * the IUT being in the "initial state" and
+ * the IUT having received Beacon information from ItsNodeB and
+ * the IUT having received Beacon information from ItsNodeD and
+ * the IUT having received Beacon information from ItsNodeC
+ * }
+ * Expected behaviour:
+ * ensure that {
+ * when {
+ * the IUT receives a GBC packet generated by ItsNodeC
+ * containing TrafficClass.SCF set to 1
+ * containing DestinationArea
+ * indicating AREA2
+ * }
+ * then {
+ * the IUT selects ItsNodeB as the next hop and
+ * the IUT forwards the GBC packet (see note)
+ * }
+ * }
+ * NOTE: Next hop ITS Station being identified by the MAC layer address of ItsNodeB
+ *
+ *
+ *
+ * @see ETSI TS 102 871-2 v1.4.1 TP/GEONW/PON/GBC/NONAREA/GRD/BV-02
+ * @reference EN 302 636-4-1 [1], clauses 10.3.11.3, Annex E.2
+ */
+ testcase TC_GEONW_PON_GBC_NONAREA_GRD_BV_02() runs on ItsMtc system ItsGeoNetworkingSystem {
+
+ f_GEONW_PON_GBC_NONAREA_GRD_BV_02();
+
+ } // End of testcase TC_GEONW_PON_GBC_NONAREA_GRD_BV_02
+
+ /**
+ * @desc Check that a received GBC packet is not triggering line forwarding if received out of its
+ * destination area twice or more
+ *
+ * Pics Selection: PICS_GN_GBC_FWD AND (PICS_GN_NON_AREA_FORWARDING_ALGORITHM == 'GREEDY'
+ * OR PICS_GN_NON_AREA_FORWARDING_ALGORITHM == 'UNSPECIFIED')
+ * Config Id: CF04
+ * Initial conditions:
+ * with {
+ * the IUT being in the "initial state" and
+ * the IUT having received Beacon information from ItsNodeB and
+ * the IUT having received Beacon information from ItsNodeD
+ * the IUT having received a GBC packet from ItsNodeC
+ * containing TrafficClass.SCF set to 1
+ * containing Basic Header
+ * containing RHL field
+ * indicating value HL1 higher than 1
+ * containing GBC Extended Header
+ * containing SN field
+ * indicating value SN1
+ * containing DestinationArea
+ * indicating AREA2
+ * the IUT having forwarded the received GBC packet
+ * }
+ * Expected behaviour:
+ * ensure that {
+ * when {
+ * the IUT receives the same GBC packet from ItsNodeD
+ * containing Basic Header
+ * containing RHL field
+ * indicating value lower than HL1
+ * containing GBC Extended Header
+ * containing SN field
+ * indicating value SN1
+ * }
+ * then {
+ * the IUT does not forward the received GBC packet
+ * }
+ * }
+ *
+ *
+ * @see ETSI TS 102 871-2 v1.4.1 TP/GEONW/PON/GBC/NONAREA/GRD/BO-07
+ * @reference EN 302 636-4-1 [1], clauses 10.3.11.3
+ */
+ testcase TC_GEONW_PON_GBC_NONAREA_GRD_BO_07() runs on ItsMtc system ItsGeoNetworkingSystem {
+
+ f_GEONW_PON_GBC_NONAREA_GRD_BO_07();
+
+ } // End of testcase TC_GEONW_PON_GBC_NONAREA_GRD_BO_07
+
+ } // End of group gbcNonAreaGreedyForwarding
+
+ group gbcNonAreaContentionBasedForwarding {
+
+ /**
+ * @desc Check that a GBC request over upper Gn SAP triggers the broadcasting of a GBC packet if the IUT is outside the Destination Area
+ *
+ * Pics Selection: PICS_GN_GBC_SRC AND PICS_GN_NON_AREA_FORWARDING_ALGORITHM == 'CBF'
+ * Config Id: CF02
+ * Initial conditions:
+ * with {
+ * the IUT being in the "initial state" and
+ * the IUT having received Beacon information from ItsNodeD and
+ * the IUT having received Beacon information from ItsNodeB
+ * }
+ * Expected behaviour:
+ * ensure that {
+ * when {
+ * the IUT is requested to send a GBC packet
+ * containing TrafficClass.SCF set to 1
+ * containing DestinationArea
+ * indicating AREA2
+ * }
+ * then {
+ * the IUT broadcasts immediately the GBC packet
+ * }
+ * }
+ *
+ *
+ * @see ETSI TS 102 871-2 v1.4.1 TP/GEONW/PON/GBC/NONAREA/CBF/BV-01
+ * @reference EN 302 636-4-1 [1], clauses 10.3.11.2, Annex E.3
+ */
+ testcase TC_GEONW_PON_GBC_NONAREA_CBF_BV_01() runs on ItsMtc system ItsGeoNetworkingSystem {
+
+ f_GEONW_PON_GBC_NONAREA_CBF_BV_01();
+
+ } // End of testcase TC_GEONW_PON_GBC_NONAREA_CBF_BV_01
+
+ /**
+ * @desc Check that a received GBC packet is forwarded at the correct time according to the contention
+ * based forwarding rules
+ *
+ * Pics Selection: PICS_GN_GBC_FWD AND PICS_GN_NON_AREA_FORWARDING_ALGORITHM == 'CBF'
+ * Config Id: CF03
+ * Initial conditions:
+ * with {
+ * the IUT being in the "initial state" and
+ * the IUT having received Beacon information from ItsNodeB and
+ * the IUT having received Beacon information from ItsNodeC and
+ * the distance between IUT and ItsNodeA being
+ * less than itsGnDefaultMaxCommunicationRange MIB attribute
+ * }
+ * Expected behaviour:
+ * ensure that {
+ * when {
+ * the IUT receives a GBC packet addressed to ItsNodeA from ItsNodeC
+ * containing TrafficClass.SCF set to 1
+ * containing Basic Header
+ * containing RHL field
+ * indicating value greater than 1
+ * }
+ * then {
+ * the IUT re-broadcasts the received GBC packet
+ * upon expiry of calculated CBF delay (see note)
+ * }
+ * }
+ * NOTE: The CBF delay timer value is calculated from the itsGnDefaultMaxCommunicationRange,
+ * itsGnGeoCbfMinTime, and itsGnGeoCbfMaxTime MIB attributes, and the distance value between IUT and ItsNodeC.
+ *
+ *
+ *
+ * @see ETSI TS 102 871-2 v1.4.1 TP/GEONW/PON/GBC/NONAREA/CBF/BV-02
+ * @reference EN 302 636-4-1 [1], clauses 10.3.11.3, Annex E.3
+ */
+ testcase TC_GEONW_PON_GBC_NONAREA_CBF_BV_02() runs on ItsMtc system ItsGeoNetworkingSystem {
+
+ f_GEONW_PON_GBC_NONAREA_CBF_BV_02();
+
+ } // End of testcase TC_GEONW_PON_GBC_NONAREA_CBF_BV_02
+
+ /**
+ * @desc Check that GBC packet forwarding correctly avoids packet duplication according to the
+ * contention based forwarding rules
+ *
+ * Pics Selection: PICS_GN_GBC_FWD AND PICS_GN_NON_AREA_FORWARDING_ALGORITHM == 'CBF'
+ * Config Id: CF03
+ * Initial conditions:
+ * with {
+ * the IUT being in the "initial state" and
+ * the IUT having received Beacon information from ItsNodeB and
+ * the IUT having received Beacon information from ItsNodeC and
+ * the distance between IUT and ItsNodeA being
+ * less than the itsGnDefaultMaxCommunicationRange MIB attribute and
+ * the IUT having received a GBC packet addressed to ItsNodeA from ItsNodeC
+ * containing TrafficClass.SCF set to 1
+ * containing Basic Header
+ * containing RHL field
+ * indicating value greater than 1 and
+ * the IUT having started a CBF timer for this packet (see note)
+ * }
+ * Expected behaviour:
+ * ensure that {
+ * when {
+ * the IUT receives the same GBC packet from ItsNodeB
+ * before expiration of the CBF timer
+ * }
+ * then {
+ * the IUT does not re-broadcast the GBC packet
+ * }
+ * }
+ * NOTE: The CBF delay timer value is calculated from the itsGnDefaultMaxCommunicationRange,
+ * itsGnGeoCbfMinTime, and itsGnGeoCbfMaxTime MIB attributes, and the distance value between IUT and ItsNodeC.
+ *
+ *
+ *
+ * @see ETSI TS 102 871-2 v1.4.1 TP/GEONW/PON/GBC/NONAREA/CBF/BV-07
+ * @reference EN 302 636-4-1 [1], clauses 10.3.11.3, Annex E.3
+ */
+ testcase TC_GEONW_PON_GBC_NONAREA_CBF_BV_07() runs on ItsMtc system ItsGeoNetworkingSystem {
+
+ f_GEONW_PON_GBC_NONAREA_CBF_BV_07();
+
+ } // End of testcase TC_GEONW_PON_GBC_NONAREA_CBF_BV_07
+
+ /**
+ * @desc Check that a received GBC packet forwarding is correctly handling the minimum delay value
+ * according to the contention based forwarding rules
+ *
+ * Pics Selection: PICS_GN_GBC_FWD AND PICS_GN_NON_AREA_FORWARDING_ALGORITHM == 'CBF'
+ * Config Id: CF03
+ * Initial conditions:
+ * with {
+ * the IUT being in the "initial state" and
+ * the IUT having received Beacon information from ItsNodeB and
+ * the IUT having received Beacon information from ItsNodeC and
+ * the distance between IUT and ItsNodeC being
+ * less than itsGnDefaultMaxCommunicationRange MIB attribute
+ * }
+ * Expected behaviour:
+ * ensure that {
+ * when {
+ * the IUT receives a GBC packet addressed to ItsNodeA from ItsNodeC
+ * containing TrafficClass.SCF set to 1
+ * containing Basic Header
+ * containing RHL field
+ * indicating value greater than 1
+ * }
+ * then {
+ * the IUT re-broadcasts the received GBC packet
+ * upon expiry of itsGnGeoCbfMinTime delay
+ * }
+ * }
+ *
+ *
+ * @see ETSI TS 102 871-2 v1.4.1 TP/GEONW/PON/GBC/NONAREA/CBF/BV-20
+ * @reference EN 302 636-4-1 [1], clauses 10.3.11.3, Annex E.3
+ */
+ testcase TC_GEONW_PON_GBC_NONAREA_CBF_BV_20() runs on ItsMtc system ItsGeoNetworkingSystem {
+
+ f_GEONW_PON_GBC_NONAREA_CBF_BV_20();
+
+ } // End of testcase TC_GEONW_PON_GBC_NONAREA_CBF_BV_20
+
+ /**
+ * @desc Check that a received GBC packet is forwarded at the correct time according to the contention
+ * based forwarding rules if received for the first time when IUT is outside of the destination area
+ * from an unknown sender
+ *
+ * Pics Selection: PICS_GN_GBC_FWD AND PICS_GN_NON_AREA_FORWARDING_ALGORITHM == 'CBF'
+ * Config Id: CF04
+ * Initial conditions:
+ * with {
+ * the IUT being in the "initial state" and
+ * the IUT having received Beacon information from ItsNodeB and
+ * the IUT not having received any message from ItsNodeD
+ * }
+ * Expected behaviour:
+ * ensure that {
+ * when {
+ * the IUT receives the a GBC packet generated by ItsNodeC from ItsNodeD
+ * containing TrafficClass.SCF set to 1
+ * containing GBC Extended Header
+ * containing DestinationArea
+ * indicating AREA2
+ * }
+ * then {
+ * the IUT re-broadcasts the GBC packet
+ * upon expiry of CBF_MAX
+ * }
+ * }
+ *
+ *
+ *
+ * @see ETSI TS 102 871-2 v1.4.1 TP/GEONW/PON/GBC/NONAREA/CBF/BV-21
+ * @reference EN 302 636-4-1 [1], Annex E.3
+ */
+ testcase TC_GEONW_PON_GBC_NONAREA_CBF_BV_21() runs on ItsMtc system ItsGeoNetworkingSystem {
+
+ f_GEONW_PON_GBC_NONAREA_CBF_BV_21();
+
+ } // End of testcase TC_GEONW_PON_GBC_NONAREA_CBF_BV_21
+
+ /**
+ * @desc Check that a received GBC packet is forwarded at the correct time according to the contention
+ * based forwarding rules if received for the first time when IUT is outside of the destination area
+ * from a known sender having an uncertain position (PAI = 0)
+ *
+ * Pics Selection: PICS_GN_GBC_FWD AND PICS_GN_NON_AREA_FORWARDING_ALGORITHM == 'CBF'
+ * Config Id: CF04
+ * Initial conditions:
+ * with {
+ * the IUT being in the "initial state" and
+ * the IUT having received Beacon information from ItsNodeB and
+ * the IUT having received Beacon information from ItsNodeD
+ * containing Beacon ExtendedHeader
+ * containing SOPV field
+ * containing PAI
+ * set to '0'
+ * }
+ * Expected behaviour:
+ * ensure that {
+ * when {
+ * the IUT receives the a GBC packet generated by ItsNodeC from ItsNodeD
+ * containing TrafficClass.SCF set to 1
+ * containing GBC Extended Header
+ * containing DestinationArea
+ * indicating AREA2
+ * }
+ * then {
+ * the IUT re-broadcasts the GBC packet
+ * upon expiry of CBF_MAX
+ * }
+ * }
+ *
+ *
+ *
+ * @see ETSI TS 102 871-2 v1.4.1 TP/GEONW/PON/GBC/NONAREA/CBF/BV-22
+ * @reference EN 302 636-4-1 [1], Annex E.3
+ */
+ testcase TC_GEONW_PON_GBC_NONAREA_CBF_BV_22() runs on ItsMtc system ItsGeoNetworkingSystem {
+
+ f_GEONW_PON_GBC_NONAREA_CBF_BV_22();
+
+ } // End of testcase TC_GEONW_PON_GBC_NONAREA_CBF_BV_22
+
+ } // End of group gbcNonAreaContentionBasedForwarding
+
+ } // End of group gbcNonAreaForwarding
+
+ group gbcAreaForwarding {
+
+ group gbcAreaAllForwardingAlgorithm {
+
+ /**
+ * @desc Check that a GBC request over upper Gn SAP triggers broadcasting of a GBC packet if the IUT is within the Destination Area
+ *
+ * Pics Selection: PICS_GN_GBC_SRC
+ * Config Id: CF02
+ * Initial conditions:
+ * with {
+ * the IUT being in the "initial state" and
+ * the IUT having received Beacon information from ItsNodeD and
+ * the IUT having received Beacon information from ItsNodeB
+ * }
+ * Expected behaviour:
+ * ensure that {
+ * when {
+ * the IUT is requested to send a GBC packet
+ * containing TrafficClass.SCF set to 1
+ * containing DestinationArea
+ * indicating AREA1
+ * }
+ * then {
+ * the IUT broadcasts immediately the GBC packet
+ * containing DestinationArea
+ * indicating AREA1
+ * }
+ * }
+ *
+ *
+ * @see ETSI TS 102 871-2 v1.4.1 TP/GEONW/PON/GBC/AREA/ALL/BV-01
+ * @reference EN 302 636-4-1 [1], clauses 10.3.11.2
+ */
+ testcase TC_GEONW_PON_GBC_AREA_ALL_BV_01() runs on ItsMtc system ItsGeoNetworkingSystem {
+
+ f_GEONW_PON_GBC_AREA_ALL_BV_01();
+
+ } // End of testcase TC_GEONW_PON_GBC_AREA_ALL_BV_01
+
+ /**
+ * @desc Check that the protocol header fields (RHL) are correctly updated during a GBC re-
+ * broadcasting step
+ *
+ * Pics Selection: PICS_GN_GBC_FWD
+ * Config Id: CF02
+ * Initial conditions:
+ * with {
+ * the IUT being in the "initial state" and
+ * the IUT having received Beacon information from ItsNodeD and
+ * the IUT having received Beacon information from ItsNodeB
+ * }
+ * Expected behaviour:
+ * ensure that {
+ * when {
+ * the IUT receives a GBC packet
+ * containing TrafficClass.SCF set to 1
+ * containing Basic Header
+ * containing RHL field
+ * indicating value HL1 higher than 1
+ * containing Common Header
+ * containing MHL field
+ * indicating value MHL1
+ * containing DestinationArea
+ * indicating AREA1
+ * }
+ * then {
+ * the IUT retransmits the GBC packet
+ * containing Basic Header
+ * containing RHL field
+ * indicating value (HL1 -1)
+ * containing Common Header
+ * containing MHL field
+ * indicating value MHL1
+ * }
+ * }
+ *
+ *
+ * @see ETSI TS 102 871-2 v1.4.1 TP/GEONW/PON/GBC/AREA/ALL/BV-03
+ * @reference EN 302 636-4-1 [1], clauses 9.3.11.3
+ */
+ testcase TC_GEONW_PON_GBC_AREA_ALL_BV_03() runs on ItsMtc system ItsGeoNetworkingSystem {
+
+ f_GEONW_PON_GBC_AREA_ALL_BV_03();
+
+ } // End of testcase TC_GEONW_PON_GBC_AREA_ALL_BV_03
+
+ /**
+ * @desc Check that the RHL restriction is correctly handled at a GBC re-broadcasting step
+ *
+ * Pics Selection: PICS_GN_GBC_FWD
+ * Config Id: CF02
+ * Initial conditions:
+ * with {
+ * the IUT being in the "initial state" and
+ * the IUT having received Beacon information from ItsNodeD and
+ * the IUT having received Beacon information from ItsNodeB
+ * }
+ * Expected behaviour:
+ * ensure that {
+ * when {
+ * the IUT receives a GBC packet
+ * containing TrafficClass.SCF set to 1
+ * containing Basic Header
+ * containing RHL field
+ * indicating 1
+ * containing GBC Extended Header
+ * containing DestinationArea
+ * indicating AREA1
+ * }
+ * then {
+ * the IUT does not retransmit the GBC packet
+ * }
+ * }
+ *
+ *
+ * @see ETSI TS 102 871-2 v1.4.1 TP/GEONW/PON/GBC/AREA/ALL/BV-04
+ * @reference EN 302 636-4-1 [1], clauses 10.3.11.3
+ */
+ testcase TC_GEONW_PON_GBC_AREA_ALL_BV_04() runs on ItsMtc system ItsGeoNetworkingSystem {
+
+ f_GEONW_PON_GBC_AREA_ALL_BV_04();
+
+ } // End of testcase TC_GEONW_PON_GB_AREA_ALLC_BV_04
+
+ /**
+ * @desc Check that a received GBC packet is passed over the Gn SAP to the correct upper
+ * protocol if it is received for the first time within the GBC destination area
+ *
+ * Pics Selection: PICS_GN_GBC_DST
+ * Config Id: CF01
+ * Initial conditions:
+ * with {
+ * the IUT being in the "initial state" and
+ * the IUT having received Beacon information from ItsNodeB
+ * }
+ * Expected behaviour:
+ * ensure that {
+ * when {
+ * the IUT receives a GBC packet
+ * containing TrafficClass.SCF set to 1
+ * containing DestinationArea
+ * indicating AREA1
+ * }
+ * then {
+ * the IUT passes the received GBC packet to the correct Upper Layer protocol
+ * }
+ * }
+ *
+ *
+ * @see ETSI TS 102 871-2 v1.4.1 TP/GEONW/PON/GBC/AREA/ALL/BV-05
+ * @reference EN 302 636-4-1 [1], clauses 10.3.11.3
+ */
+ testcase TC_GEONW_PON_GBC_AREA_ALL_BV_05() runs on ItsGeoNetworking system ItsGeoNetworkingSystem {
+
+ f_GEONW_PON_GBC_AREA_ALL_BV_05();
+
+ } // End of testcase TC_GEONW_PON_GBC_AREA_ALL_BV_05
+
+ /**
+ * @desc Check that a received GBC packet is not passed over the Gn SAP if it is received for the
+ * second or more time
+ *
+ * Pics Selection: PICS_GN_GBC_DST
+ * Config Id: CF02
+ * Initial conditions:
+ * with {
+ * the IUT being in the "initial state" and
+ * the IUT having received Beacon information from ItsNodeD and
+ * the IUT having received Beacon information from ItsNodeB and
+ * the IUT having received a GBC packet from ItsNodeB
+ * containing TrafficClass.SCF set to 1
+ * containing Basic Header
+ * containing RHL field
+ * indicating HL1
+ * containing GBC Extended Header
+ * containing SN field
+ * indicating value SN1
+ * containing DestinationArea
+ * indicating AREA1 and
+ * the IUT having passed the received GBC packet to the correct Upper Layer protocol
+ * }
+ * Expected behaviour:
+ * ensure that {
+ * when {
+ * the IUT receives the same GBC packet from ItsNodeD
+ * containing Basic Header
+ * containing RHL field
+ * indicating value lower than HL1
+ * containing SN field
+ * indicating value SN1
+ * }
+ * then {
+ * the IUT does not pass the received GBC packet to any Upper Layer protocol
+ * }
+ * }
+ *
+ *
+ * @see ETSI TS 102 871-2 v1.4.1 TP/GEONW/PON/GBC/AREA/ALL/BO-08
+ * @reference EN 302 636-4-1 [1], clauses 10.3.11.3
+ */
+ testcase TC_GEONW_PON_GBC_AREA_ALL_BO_08() runs on ItsMtc system ItsGeoNetworkingSystem {
+
+ f_GEONW_PON_GBC_AREA_ALL_BO_08();
+
+ } // End of testcase TC_GEONW_PON_GBC_AREA_ALL_BO_08
+
+ } // End of group gbcAreaAllForwardingAlgorithm
+
+ group gbcAreaSimpleForwarding {
+
+ /**
+ * @desc Check that a received GBC packet is triggering re-broadcasting if received for the first
+ * time within its destination area
+ *
+ * Pics Selection: PICS_GN_GBC_FWD AND (PICS_GN_AREA_FORWARDING_ALGORITHM == 'SIMPLE'
+ * OR PICS_GN_AREA_FORWARDING_ALGORITHM == 'UNSPECIFIED')
+ * Config Id: CF02
+ * Initial conditions:
+ * with {
+ * the IUT being in the "initial state" and
+ * the IUT having received Beacon information from ItsNodeD and
+ * the IUT having received Beacon information from ItsNodeB
+ * }
+ * Expected behaviour:
+ * ensure that {
+ * when {
+ * the IUT receives a GBC packet
+ * containing TrafficClass.SCF set to 1
+ * containing DestinationArea
+ * indicating AREA1
+ * }
+ * then {
+ * the IUT re-broadcasts immediately the GBC packet
+ * }
+ * }
+ *
+ *
+ * @see ETSI TS 102 871-2 v1.4.1 TP/GEONW/PON/GBC/AREA/SMP/BV-02
+ * @reference EN 302 636-4-1 [1], clauses 10.3.11.3, Annex E.2
+ */
+ testcase TC_GEONW_PON_GBC_AREA_SMP_BV_02() runs on ItsMtc system ItsGeoNetworkingSystem {
+
+ f_GEONW_PON_GBC_AREA_SMP_BV_02();
+
+ } // End of testcase TC_GEONW_PON_GBC_AREA_SMP_BV_02
+
+ /**
+ * @desc Check that a received GBC packet is not triggering re-broadcasting if received for
+ * the second or more time (duplicate packet detection)
+ *
+ * Pics Selection: PICS_GN_GBC_FWD AND (PICS_GN_AREA_FORWARDING_ALGORITHM == 'SIMPLE'
+ * OR PICS_GN_AREA_FORWARDING_ALGORITHM == 'UNSPECIFIED')
+ * Config Id: CF02
+ * Initial conditions:
+ * with {
+ * the IUT being in the "initial state" and
+ * the IUT having received Beacon information from ItsNodeD and
+ * the IUT having received Beacon information from ItsNodeB and
+ * the IUT having received a GBC packet from ItsNodeB
+ * containing TrafficClass.SCF set to 1
+ * containing Basic Header
+ * containing RHL field
+ * indicating value HL1 higher than 1
+ * containing GBC Extended Header
+ * containing SN field
+ * indicating value SN1
+ * containing DestinationArea
+ * indicating AREA1 and
+ * the IUT having re-broadcast the GBC packet
+ * }
+ * Expected behaviour:
+ * ensure that {
+ * when {
+ * the IUT receives the same GBC packet from ItsNodeD
+ * containing Basic Header
+ * containing RHL field
+ * indicating value lower than HL1
+ * containing GBC Extended Header
+ * containing SN field
+ * indicating value SN1
+ * }
+ * then {
+ * the IUT does not re-broadcast the GBC packet
+ * }
+ * }
+ *
+ *
+ * @see ETSI TS 102 871-2 v1.4.1 TP/GEONW/PON/GBC/AREA/SMP/BO-07
+ * @reference EN 302 636-4-1 [1], clauses 10.3.11.3, Annex A.2
+ */
+ testcase TC_GEONW_PON_GBC_AREA_SMP_BO_07() runs on ItsMtc system ItsGeoNetworkingSystem {
+
+ f_GEONW_PON_GBC_AREA_SMP_BO_07();
+
+ } // End of testcase TC_GEONW_PON_GBC_AREA_SMP_BO_07
+
+ } // End of group gbcAreaSimpleForwarding
+
+ group gbcAreaContentionBasedForwarding {
+
+ /**
+ * @desc Check that a received GBC packet is triggering contention if received for the first time from a known sender
+ * when inside of the destination area
+ *
+ * Pics Selection: PICS_GN_GBC_FWD AND PICS_GN_AREA_FORWARDING_ALGORITHM == 'CBF'
+ * Config Id: CF04
+ * Initial conditions:
+ * with {
+ * the IUT being in the "initial state" and
+ * the IUT having received Beacon information from ItsNodeB and
+ * the IUT having received Beacon information from ItsNodeD and
+ * the IUT having received Beacon information from ItsNodeC
+ * }
+ * Expected behaviour:
+ * ensure that {
+ * when {
+ * the IUT receives the a GBC packet from ItsNodeC
+ * containing TrafficClass.SCF set to 1
+ * containing GBC Extended Header
+ * containing DestinationArea
+ * indicating AREA1
+ * }
+ * then {
+ * the IUT saves the GBC packet into the CBF buffer and
+ * the IUT starts the contention timer and
+ * the IUT re-broadcasts the received GBC packet
+ * upon expiry of the contention timer
+ * }
+ * }
+ *
+ *
+ * @see ETSI TS 102 871-2 v1.4.1 TP/GEONW/PON/GBC/AREA/CBF/BV-02
+ * @reference EN 302 636-4-1 [1], Annex E.3
+ */
+ testcase TC_GEONW_PON_GBC_AREA_CBF_BV_02() runs on ItsMtc system ItsGeoNetworkingSystem {
+
+ f_GEONW_PON_GBC_AREA_CBF_BV_02();
+
+ } // End of testcase TC_GEONW_PON_GBC_AREA_CBF_BV_02
+
+ /**
+ * @desc Check that a received GBC packet is discarded if received twice or more
+ *
+ * Pics Selection: PICS_GN_GBC_FWD AND PICS_GN_AREA_FORWARDING_ALGORITHM == 'CBF'
+ * Config Id: CF04
+ * Initial conditions:
+ * with {
+ * the IUT being in the "initial state" and
+ * the IUT having received Beacon information from ItsNodeB and
+ * the IUT having received Beacon information from ItsNodeD
+ * the IUT having received a GBC packet from ItsNodeC
+ * containing TrafficClass.SCF set to 1
+ * containing GBC Extended Header
+ * containing DestinationArea
+ * indicating AREA1
+ * the IUT having saved the packet into CBF buffer
+ * }
+ * Expected behaviour:
+ * ensure that {
+ * when {
+ * the IUT receives the same GBC packet from ItsNodeD
+ * }
+ * then {
+ * the IUT removes the GBC packet from the CBF buffer
+ * the IUT discards the new received GBC packet
+ * }
+ * }
+ *
+ *
+ * @see ETSI TS 102 871-2 v1.4.1 TP/GEONW/PON/GBC/AREA/CBF/BV-07
+ * @reference EN 302 636-4-1 [1], Annex E.3
+ */
+ testcase TC_GEONW_PON_GBC_AREA_CBF_BV_07() runs on ItsMtc system ItsGeoNetworkingSystem {
+
+ f_GEONW_PON_GBC_AREA_CBF_BV_07();
+
+ } // End of testcase TC_GEONW_PON_GBC_AREA_CBF_BV_07
+
+ /**
+ * @desc Check that a received GBC packet is triggering contention if received for the first time
+ * when IUT is inside of the destination area from an unknown sender
+ *
+ * Pics Selection: PICS_GN_GBC_FWD AND PICS_GN_AREA_FORWARDING_ALGORITHM == 'CBF'
+ * Config Id: CF04
+ * Initial conditions:
+ * with {
+ * the IUT being in the "initial state" and
+ * the IUT having received Beacon information from ItsNodeB and
+ * the IUT not having received any message from ItsNodeD
+ * }
+ * Expected behaviour:
+ * ensure that {
+ * when {
+ * the IUT receives the a GBC packet generated by ItsNodeC from ItsNodeD
+ * containing TrafficClass.SCF set to 1
+ * containing GBC Extended Header
+ * containing DestinationArea
+ * indicating AREA1
+ * }
+ * then {
+ * the IUT saves the GBC packet into the CBF buffer and
+ * the IUT starts the contention timer set to CBF_MAX and
+ * the IUT broadcasts the received GeoBroedcast packet
+ * upon expiry of the contention timer
+ * }
+ * }
+ *
+ *
+ *
+ * @see ETSI TS 102 871-2 v1.4.1 TP/GEONW/PON/GBC/AREA/CBF/BV-21
+ * @reference EN 302 636-4-1 [1], Annex E.3
+ */
+ testcase TC_GEONW_PON_GBC_AREA_CBF_BV_21() runs on ItsMtc system ItsGeoNetworkingSystem {
+
+ f_GEONW_PON_GBC_AREA_CBF_BV_21();
+
+ } // End of testcase TC_GEONW_PON_GBC_AREA_CBF_BV_21
+
+
+ /**
+ * @desc Check that a received GBC packet is triggering contention if received for the first time
+ * when IUT is inside of the destination area from an unknown sender
+ *
+ * Pics Selection: PICS_GN_GBC_FWD AND PICS_GN_AREA_FORWARDING_ALGORITHM == 'CBF'
+ * Config Id: CF04
+ * Initial conditions:
+ * with {
+ * the IUT being in the "initial state" and
+ * the IUT having received Beacon information from ItsNodeB and
+ * the IUT having received Beacon information from ItsNodeD
+ * containing Beacon ExtendedHeader
+ * containing SOPV field
+ * containing PAI
+ * set to '0'
+ * }
+ * Expected behaviour:
+ * ensure that {
+ * when {
+ * the IUT receives the a GBC packet generated by ItsNodeC from ItsNodeD
+ * containing TrafficClass.SCF set to 1
+ * containing GBC Extended Header
+ * containing DestinationArea
+ * indicating AREA1
+ * }
+ * then {
+ * the IUT saves the GBC packet into the CBF buffer and
+ * the IUT starts the contention timer set to CBF_MAX and
+ * the IUT re-broadcasts the received GeoBroedcast packet
+ * upon expiry of the contention timer
+ * }
+ * }
+ *
+ *
+ *
+ * @see ETSI TS 102 871-2 v1.4.1 TP/GEONW/PON/GBC/AREA/CBF/BV-22
+ * @reference EN 302 636-4-1 [1], Annex E.3
+ */
+ testcase TC_GEONW_PON_GBC_AREA_CBF_BV_22() runs on ItsMtc system ItsGeoNetworkingSystem {
+
+ f_GEONW_PON_GBC_AREA_CBF_BV_22();
+
+ } // End of testcase TC_GEONW_PON_GBC_AREA_CBF_BV_22
+
+ } // End of group gbcAreaContentionBasedForwarding
+
+ group gbcAreaAdvancedForwarding {
+
+ /**
+ * @desc Check that a received GBC packet with Broadcast MAC destination is triggering
+ * contention if received for the first time from an unknown sender when IUT is inside the
+ * destination area
+ *
+ * Pics Selection: PICS_GN_GBC_FWD AND PICS_GN_AREA_FORWARDING_ALGORITHM == 'ADVANCED'
+ * Config Id: CF05
+ * Initial conditions:
+ * with {
+ * the IUT being in the "initial state" and
+ * the IUT having received Beacon information from ItsNodeB and
+ * the IUT not having received any message from ItsNodeE
+ * }
+ * Expected behaviour:
+ * ensure that {
+ * when {
+ * the IUT receives a GBC packet from ItsNodeE
+ * addressed to link-layer broadcast address
+ * containing TrafficClass.SCF set to 1
+ * containing GBC Extended Header
+ * containing DestinationArea
+ * indicating AREA1
+ * }
+ * then {
+ * the IUT saves the GBC packet into the CBF buffer and
+ * the IUT starts the contention timer set to CBF_MAX and
+ * the IUT re-broadcasts the received GBC packet
+ * upon expiry of the contention timer
+ * }
+ * }
+ *
+ *
+ *
+ * @see ETSI TS 102 871-2 v1.4.1 TP/GEONW/PON/GBC/AREA/ADV/BV-21
+ * @reference EN 302 636-4-1 [1], Annex F.4
+ */
+ testcase TC_GEONW_PON_GBC_AREA_ADV_BV_21() runs on ItsMtc system ItsGeoNetworkingSystem {
+
+ f_GEONW_PON_GBC_AREA_ADV_BV_21();
+
+ } // End of testcase TC_GEONW_PON_GBC_AREA_ADV_BV_21
+
+ /**
+ * @desc Check that a received GBC packet is discarded if received more than MAX_COUNTER
+ * times when IUT is inside of the destination area
+ *
+ * Pics Selection: PICS_GN_GBC_FWD AND PICS_GN_AREA_FORWARDING_ALGORITHM == 'ADVANCED'
+ * Config Id: CF06
+ * Initial conditions:
+ * with {
+ * the IUT being in the "initial state" and
+ * the IUT having received Beacon information from ItsNodeB and
+ * the IUT having received Beacon information from ItsNodeF and
+ * the IUT having received a GBC packet GBC1 from ItsNodeF
+ * containing TrafficClass.SCF set to 1
+ * containing GBC Extended Header
+ * containing DestinationArea
+ * indicating AREA1
+ * the IUT having saved the packet into CBF buffer
+ * the IUT having received MAX_COUNTER - 1 times the GBC1 packet
+ * }
+ * Expected behaviour:
+ * ensure that {
+ * when {
+ * the IUT receives the same GBC packet GBC1
+ * }
+ * then {
+ * the IUT removes GBC1 from the CBF buffer
+ * the IUT discards the new received GBC packet
+ * }
+ * }
+ *
+ *
+ *
+ * @see ETSI TS 102 871-2 v1.4.1 TP/GEONW/PON/GBC/AREA/ADV/BV-23
+ * @reference EN 302 636-4-1 [1], Annex F.4
+ */
+ testcase TC_GEONW_PON_GBC_AREA_ADV_BV_23() runs on ItsMtc system ItsGeoNetworkingSystem {
+
+ f_GEONW_PON_GBC_AREA_ADV_BV_23();
+
+ } // End of testcase TC_GEONW_PON_GBC_AREA_ADV_BV_23
+
+ /**
+ * @desc Check that a received GBC packet is discarded if received more than 1 times when IUT
+ * is inside of the destination area and inside the sectorial area of the GBC packet Sender
+ *
+ * Pics Selection: PICS_GN_GBC_FWD AND PICS_GN_AREA_FORWARDING_ALGORITHM == 'ADVANCED'
+ * Config Id: CF05
+ * Initial conditions:
+ * with {
+ * the IUT being in the "initial state" and
+ * the IUT having received Beacon information from ItsNodeB and
+ * the IUT having received Beacon information from ItsNodeE and
+ * the IUT having received a GBC packet GBC1 from ItsNodeB
+ * containing TrafficClass.SCF set to 1
+ * containing GBC Extended Header
+ * containing DestinationArea
+ * indicating AREA1
+ * the IUT having saved the packet into CBF buffer
+ * }
+ * Expected behaviour:
+ * ensure that {
+ * when {
+ * the IUT receives the same GBC packet GBC1 from ItsNodeE
+ * the IUT is inside the sectorial area of ItsNodeB
+ * }
+ * then {
+ * the IUT removes GBC1 from the CBF buffer
+ * the IUT discards the new received GBC packet
+ * }
+ * }
+ *
+ *
+ *
+ * @see ETSI TS 102 871-2 v1.4.1 TP/GEONW/PON/GBC/AREA/ADV/BV-24
+ * @reference EN 302 636-4-1 [1], Annex F.4
+ */
+ testcase TC_GEONW_PON_GBC_AREA_ADV_BV_24() runs on ItsMtc system ItsGeoNetworkingSystem {
+
+ f_GEONW_PON_GBC_AREA_ADV_BV_24();
+
+ } // End of testcase TC_GEONW_PON_GBC_AREA_ADV_BV_24
+
+ /**
+ * @desc Check that a received GBC packet is triggering contention if received more than 1 times when the IUT
+ * is inside of the destination area and outside the sectorial area of the GBC packet Sender (Angle_FSR > Angle_TH)
+ *
+ * Pics Selection: PICS_GN_GBC_FWD AND PICS_GN_AREA_FORWARDING_ALGORITHM == 'ADVANCED'
+ * Config Id: CF06
+ * Initial conditions:
+ * with {
+ * the IUT being in the "initial state" and
+ * the IUT having received Beacon information from ItsNodeB and
+ * the IUT having received Beacon information from ItsNodeF and
+ * the IUT having received a GBC packet GBC1 from ItsNodeB
+ * containing TrafficClass.SCF set to 1
+ * containing GBC Extended Header
+ * containing DestinationArea
+ * indicating AREA1
+ * the IUT having saved the packet into CBF buffer
+ * }
+ * Expected behaviour:
+ * ensure that {
+ * when {
+ * the IUT receives the same GBC packet GBC1 from ItsNodeF
+ * the IUT is outside the sectorial area of ItsNodeB
+ * }
+ * then {
+ * the IUT saves the GBC packet GBC1 from ItsNodeF and
+ * the IUT starts the contention timer and
+ * the IUT re-broadcasts the received GBC packet
+ * upon expiry of the contention timer
+ * }
+ * }
+ *
+ * Note: In this configuration IUT is outside sectorial area of ItsNodeB to the angle FSR
+ *
+ *
+ * @see ETSI TS 102 871-2 v1.4.1 TP/GEONW/PON/GBC/AREA/ADV/BV-25
+ * @reference EN 302 636-4-1 [1], Annex F.4
+ */
+ testcase TC_GEONW_PON_GBC_AREA_ADV_BV_25() runs on ItsMtc system ItsGeoNetworkingSystem {
+
+ f_GEONW_PON_GBC_AREA_ADV_BV_25();
+
+ } // End of testcase TC_GEONW_PON_GBC_AREA_ADV_BV_25
+
+ /**
+ * @desc Check that a received GBC packet is triggering contention if received more than 1 times when IUT
+ * is inside the destination area and outside the sectorial area of the GBC packet Sender (Dist_R > Dist_F)
+ *
+ * Pics Selection: PICS_GN_GBC_FWD AND PICS_GN_AREA_FORWARDING_ALGORITHM == 'ADVANCED'
+ * Config Id: CF07
+ * Initial conditions:
+ * with {
+ * the IUT being in the "initial state" and
+ * the IUT having received Beacon information from ItsNodeB and
+ * the IUT having received Beacon information from ItsNodeD and
+ * the IUT having received a GBC packet GBC1 from ItsNodeB
+ * containing TrafficClass.SCF set to 1
+ * containing GBC Extended Header
+ * containing DestinationArea
+ * indicating AREA1
+ * the IUT having saved packet into the CBF buffer
+ * }
+ * Expected behaviour:
+ * ensure that {
+ * when {
+ * the IUT receives the same GBC packet GBC1 from ItsNodeD
+ * the IUT is outside the sectorial area of ItsNodeB
+ * }
+ * then {
+ * the IUT saves the GBC packet into the CBF buffer and
+ * the IUT starts the contention timer and
+ * the IUT re-broadcasts the received GBC packet
+ * upon expiry of the contention timer
+ * }
+ * }
+ *
+ * Note: In this configuration IUT is outside sectorial area of ItsNodeB because of dist_R > dist_F
+ *
+ *
+ * @see ETSI TS 102 871-2 v1.4.1 TP/GEONW/PON/GBC/AREA/ADV/BV-26
+ * @reference EN 302 636-4-1 [1], Annex F.4
+ */
+ testcase TC_GEONW_PON_GBC_AREA_ADV_BV_26() runs on ItsMtc system ItsGeoNetworkingSystem {
+
+ f_GEONW_PON_GBC_AREA_ADV_BV_26();
+
+ } // End of testcase TC_GEONW_PON_GBC_AREA_ADV_BV_26
+
+ /**
+ * @desc Check that a received GBC packet with Unicast MAC destination is triggering line
+ * forwarding if received for the first time when IUT is inside the destination area
+ *
+ * Pics Selection: PICS_GN_GBC_FWD AND PICS_GN_AREA_FORWARDING_ALGORITHM == 'ADVANCED'
+ * Config Id: CF05
+ * Initial conditions:
+ * with {
+ * the IUT being in the "initial state" and
+ * the IUT having received Beacon information from ItsNodeB and
+ * the IUT having received Beacon information from ItsNodeE and
+ * }
+ * Expected behaviour:
+ * ensure that {
+ * when {
+ * the IUT receives a GBC packet from ItsNodeE
+ * addressed to IUT's link-layer address
+ * containing TrafficClass.SCF set to 1
+ * containing GBC Extended Header
+ * containing DestinationArea
+ * indicating AREA1
+ * }
+ * then {
+ * the IUT selects ItsNodeB as the next hop ITS station and
+ * the IUT forwards the GBC packet
+ * }
+ * }
+ *
+ *
+ *
+ * @see ETSI TS 102 871-2 v1.4.1 TP/GEONW/PON/GBC/AREA/ADV/BV-27
+ * @reference EN 302 636-4-1 [1], Annex F.4
+ */
+ testcase TC_GEONW_PON_GBC_AREA_ADV_BV_27() runs on ItsMtc system ItsGeoNetworkingSystem {
+
+ f_GEONW_PON_GBC_AREA_ADV_BV_27();
+
+ } // End of testcase TC_GEONW_PON_GBC_AREA_ADV_BV_27
+
+ /**
+ * @desc Check that a received GBC packet with Unicast MAC destination is triggering
+ * rebroadcast if received for the first time when IUT is inside the destination area.
+ *
+ * Pics Selection: PICS_GN_GBC_FWD AND PICS_GN_AREA_FORWARDING_ALGORITHM == 'ADVANCED'
+ * Config Id: CF05
+ * Initial conditions:
+ * with {
+ * the IUT being in the "initial state" and
+ * the IUT having received Beacon information from ItsNodeB and
+ * the IUT having received Beacon information from ItsNodeE
+ * }
+ * Expected behaviour:
+ * ensure that {
+ * when {
+ * the IUT receives a GBC packet from ItsNodeE addressed to IUT's link-layer address
+ * containing TrafficClass.SCF set to 1
+ * containing GBC Extended Header
+ * containing DestinationArea
+ * indicating AREA1
+ * }
+ * then {
+ * the IUT saves the GBC packet into the CBF buffer and
+ * the IUT starts the contention timer set to CBF_MAX and
+ * the IUT re-broadcasts the received GBC packet
+ * upon expiry of the contention timer
+ * }
+ * }
+ *
+ *
+ * @see ETSI TS 102 871-2 v1.4.1 TP/GEONW/PON/GBC/AREA/ADV/BV-28
+ * @reference EN 302 636-4-1 [1], Annex F.4
+ */
+ testcase TC_GEONW_PON_GBC_AREA_ADV_BV_28() runs on ItsMtc system ItsGeoNetworkingSystem {
+
+ f_GEONW_PON_GBC_AREA_ADV_BV_28();
+
+ } // End of testcase TC_GEONW_PON_BAA_BV_28
+
+ /**
+ * @desc Check that a received GBC packet with Broadcast destination is triggering contention if
+ * received for the first time from known sender when IUT is inside the destination area
+ *
+ * Pics Selection: PICS_GN_GBC_FWD AND PICS_GN_AREA_FORWARDING_ALGORITHM == 'ADVANCED'
+ * Config Id: CF05
+ * Initial conditions:
+ * with {
+ * the IUT being in the "initial state" and
+ * the IUT having received Beacon information from ItsNodeB and
+ * the IUT having received Beacon information from ItsNodeE
+ * }
+ * Expected behaviour:
+ * ensure that {
+ * when {
+ * the IUT receives a GBC packet from ItsNodeE
+ * addressed to broadcast link-layer address
+ * containing TrafficClass.SCF set to 1
+ * containing GBC Extended Header
+ * containing DestinationArea
+ * indicating AREA1
+ * }
+ * then {
+ * the IUT calculates and starts the contention timer and
+ * the IUT re-broadcasts the received GBC packet
+ * upon expiry of the contention timer
+ * }
+ * }
+ *
+ *
+ *
+ * @see ETSI TS 102 871-2 v1.4.1 TP/GEONW/PON/GBC/AREA/ADV/BV-29
+ * @reference EN 302 636-4-1 [1], Annex F.4
+ */
+ testcase TC_GEONW_PON_GBC_AREA_ADV_BV_29() runs on ItsMtc system ItsGeoNetworkingSystem {
+
+ f_GEONW_PON_GBC_AREA_ADV_BV_29();
+
+ } // End of testcase TC_GEONW_PON_GBC_AREA_ADV_BV_29
+
+ } // End of group gbcAreaAdvancedForwarding
+
+ } // End of group gbcAreaForwarding
+
+ } // End of group geoGeoBroadcast
+
+ // 6.2.2.10
+ group geoTopologicallyScopedBroadcast {
+
+ /**
+ * @desc Check that a TSB request over upper Gn SAP triggers the origination of a TSB
+ * packet
+ *
+ * Pics Selection: PICS_GN_TSB_SRC
+ * Config Id: CF02
+ * Initial conditions:
+ * with {
+ * the IUT being in the "initial state" and
+ * the IUT having received Beacon information from ItsNodeB and
+ * the IUT having received Beacon information from ItsNodeD
+ * }
+ * Expected behaviour:
+ * ensure that {
+ * when {
+ * the IUT is requested to send a TSB packet
+ * }
+ * then {
+ * the IUT broadcasts a TSB packet
+ * }
+ * }
+ *
+ *
+ * @see ETSI TS 102 871-2 v1.4.1 TP/GEONW/PON/TSB/BV-01
+ * @reference EN 302 636-4-1 [1], clauses 10.3.9.2
+ */
+ testcase TC_GEONW_PON_TSB_BV_01() runs on ItsMtc system ItsGeoNetworkingSystem {
+
+ f_GEONW_PON_TSB_BV_01();
+
+ } // End of testcase TC_GEONW_PON_TSB_BV_01
+
+ /**
+ * @desc Check that a received TSB packet is triggering re-broadcasting if received for the first time
+ *
+ * Pics Selection: PICS_GN_TSB_FWD
+ * Config Id: CF02
+ * Initial conditions:
+ * with {
+ * the IUT being in the "initial state" and
+ * the IUT having received Beacon information from ItsNodeD and
+ * the IUT having received Beacon information from ItsNodeB
+ * }
+ * Expected behaviour:
+ * ensure that {
+ * when {
+ * the IUT receives a TSB packet
+ * containing Basic Header
+ * containing RHL field
+ * indicating HL1 higher than 1
+ * }
+ * then {
+ * the IUT re-broadcasts the TSB packet
+ * }
+ * }
+ *
+ *
+ * @see ETSI TS 102 871-2 v1.4.1 TP/GEONW/PON/TSB/BV-02
+ * @reference EN 302 636-4-1 [1], clauses 10.3.9.3
+ */
+ testcase TC_GEONW_PON_TSB_BV_02() runs on ItsMtc system ItsGeoNetworkingSystem {
+
+ f_GEONW_PON_TSB_BV_02();
+
+ } // End of testcase TC_GEONW_PON_TSB_BV_02
+
+ /**
+ * @desc Check that the protocol header fields (RHL) are correctly updated during a TSB re-
+ * broadcasting step
+ *
+ * Pics Selection: PICS_GN_TSB_FWD
+ * Config Id: CF02
+ * Initial conditions:
+ * with {
+ * the IUT being in the "initial state" and
+ * the IUT having received Beacon information from ItsNodeD and
+ * the IUT having received Beacon information from ItsNodeB
+ * }
+ * Expected behaviour:
+ * ensure that {
+ * when {
+ * the IUT receives a TSB packet
+ * containing Basic Header
+ * containing RHL field
+ * indicating HL1
+ * containing Common Header
+ * containing MHL field
+ * indicating value MHL1
+ * }
+ * then {
+ * the IUT re-broadcasts the TSB packet
+ * containing Basic Header
+ * containing RHL field
+ * indicating value (HL1 -1)
+ * containing Common Header
+ * containing MHL field
+ * indicating value MHL1
+ * }
+ * }
+ *
+ *
+ * @see ETSI TS 102 871-2 v1.4.1 TP/GEONW/PON/TSB/BV-03
+ * @reference EN 302 636-4-1 [1], clauses 10.3.9.3
+ */
+ testcase TC_GEONW_PON_TSB_BV_03() runs on ItsMtc system ItsGeoNetworkingSystem {
+
+ f_GEONW_PON_TSB_BV_03();
+
+ } // End of testcase TC_GEONW_PON_TSB_BV_03
+
+ /**
+ * @desc Check that the RHL restriction is correctly handled at a TSB re-broadcasting step
+ *
+ * Pics Selection: PICS_GN_TSB_FWD
+ * Config Id: CF02
+ * Initial conditions:
+ * with {
+ * the IUT being in the "initial state"
+ * }
+ * Expected behaviour:
+ * ensure that {
+ * when {
+ * the IUT receives a TSB packet
+ * containing Basic Header
+ * containing RHL field
+ * indicating 1
+ * }
+ * then {
+ * the IUT does not re-broadcast the TSB packet
+ * }
+ * }
+ *
+ *
+ * @see ETSI TS 102 871-2 v1.4.1 TP/GEONW/PON/TSB/BO-04
+ * @reference EN 302 636-4-1 [1], clauses 10.3.9.3
+ */
+ testcase TC_GEONW_PON_TSB_BO_04() runs on ItsMtc system ItsGeoNetworkingSystem {
+
+ f_GEONW_PON_TSB_BO_04();
+
+ } // End of testcase TC_GEONW_PON_TSB_BO_04
+
+ /**
+ * @desc Check that a received TSB packet is passed over the Gn SAP to the correct upper protocol if it is
+ * received for the first time
+ *
+ * Pics Selection: PICS_GN_TSB_DST
+ * Config Id: CF01
+ * Initial conditions:
+ * with {
+ * the IUT being in the "initial state"
+ * }
+ * Expected behaviour:
+ * ensure that {
+ * when {
+ * the IUT receives a TSB packet
+ * }
+ * then {
+ * the IUT passes the received TSB packet to the correct Upper Layer protocol
+ * }
+ * }
+ *
+ *
+ * @see ETSI TS 102 871-2 v1.4.1 TP/GEONW/PON/TSB/BV-05
+ * @reference EN 302 636-4-1 [1], clauses 10.3.9.3
+ */
+ testcase TC_GEONW_PON_TSB_BV_05() runs on ItsGeoNetworking system ItsGeoNetworkingSystem {
+
+ f_GEONW_PON_TSB_BV_05();
+
+ } // End of testcase TC_GEONW_PON_TSB_BV_05
+
+ /**
+ * @desc Check that a received TSB packet is not triggering re-broadcasting if received for the second or
+ * more time
+ *
+ * Pics Selection: PICS_GN_TSB_FWD
+ * Config Id: CF02
+ * Initial conditions:
+ * with {
+ * the IUT being in the "initial state" and
+ * the IUT having received Beacon information from ItsNodeD and
+ * the IUT having received Beacon information from ItsNodeB and
+ * the IUT having received a TSB packet from ItsNodeB
+ * containing Basic Header
+ * containing RHL field
+ * indicating HL1 higher than 1
+ * containing TSB Extended Header
+ * containing SN field
+ * indicating value SN1 and
+ * the IUT having re-broadcast the TSB packet
+ * }
+ * Expected behaviour:
+ * ensure that {
+ * when {
+ * the IUT receives the same TSB packet from ItsNodeD
+ * containing Basic Header
+ * containing RHL field
+ * indicating HL1 - 1
+ * containing TSB Extended Header
+ * containing SN field
+ * indicating value SN1
+ * }
+ * then {
+ * the IUT does not re-broadcast the TSB packet
+ * }
+ * }
+ *
+ *
+ * @see ETSI TS 102 871-2 v1.4.1 TP/GEONW/PON/TSB/BO-07
+ * @reference EN 302 636-4-1 [1], clauses 10.3.9.3
+ */
+ testcase TC_GEONW_PON_TSB_BO_07() runs on ItsMtc system ItsGeoNetworkingSystem {
+
+ f_GEONW_PON_TSB_BO_07();
+
+ } // End of testcase TC_GEONW_PON_TSB_BO_07
+
+
+ /**
+ * @desc Check that a received TSB packet is not passed over the Gn SAP if it is received for the second
+ * or more time
+ *
+ * Pics Selection: PICS_GN_TSB_DST
+ * Config Id: CF02
+ * Initial conditions:
+ * with {
+ * the IUT being in the "initial state" and
+ * the IUT having received a TSB packet from ItsNodeB
+ * containing Basic Header
+ * containing RHL field
+ * indicating HL1 higher than 1
+ * containing TSB Extended Header
+ * containing SN field
+ * indicating value SN1 and
+ * the IUT having passed the received TSB packet to the correct Upper Layer protocol
+ * }
+ * Expected behaviour:
+ * ensure that {
+ * when {
+ * the IUT receives the same TSB packet from ItsNodeD
+ * containing Basic Header
+ * containing RHL field
+ * indicating HL1 - 1
+ * containing TSB Extended Header
+ * containing SN field
+ * indicating value SN1
+ * }
+ * then {
+ * the IUT does not pass the received TSB packet to any Upper Layer protocol
+ * }
+ * }
+ *
+ *
+ * @see ETSI TS 102 871-2 v1.4.1 TP/GEONW/PON/TSB/BO-08
+ * @reference EN 302 636-4-1 [1], clauses 10.3.9.3
+ */
+ testcase TC_GEONW_PON_TSB_BO_08() runs on ItsMtc system ItsGeoNetworkingSystem {
+
+ f_GEONW_PON_TSB_BO_08();
+
+ } // End of testcase TC_GEONW_PON_TSB_BO_08
+
+ } // End of group geoTopologicallyScopedBroadcast
+
+ // 6.2.2.11
+ group geoSingleHopBroadcast {
+
+ /**
+ * @desc Check that a SHB request over upper Gn SAP triggers the origination of a SHB
+ * packet
+ *
+ * Pics Selection: PICS_GN_SHB_SRC
+ * Config Id: CF02
+ * Initial conditions:
+ * with {
+ * the IUT being in the "initial state" and
+ * the IUT having received Beacon information from ItsNodeD and
+ * the IUT having received Beacon information from ItsNodeB
+ * }
+ * Expected behaviour:
+ * ensure that {
+ * when {
+ * the IUT is requested to send a SHB packet
+ * }
+ * then {
+ * the IUT broadcasts the SHB packet
+ * }
+ * }
+ *
+ *
+ * @see ETSI TS 102 871-2 v1.4.1 TP/GEONW/PON/SHB/BV-01
+ * @reference EN 302 636-4-1 [1], clauses 10.3.10.2
+ */
+ testcase TC_GEONW_PON_SHB_BV_01() runs on ItsMtc system ItsGeoNetworkingSystem {
+
+ f_GEONW_PON_SHB_BV_01();
+
+ } // End of testcase TC_GEONW_PON_SHB_BV_01
+
+ /**
+ * @desc Check that a received SHB packet is passed over the Gn SAP to the correct upper protocol if it is
+ * received for the first time
+ *
+ * Pics Selection: PICS_GN_SHB_DST
+ * Config Id: CF02
+ * Initial conditions:
+ * with {
+ * the IUT being in the "initial state"
+ * }
+ * Expected behaviour:
+ * ensure that {
+ * when {
+ * the IUT receives a SHB packet
+ * }
+ * then {
+ * the IUT passes the received SHB packet to the Upper Layer protocol
+ * }
+ * }
+ *
+ *
+ * @see ETSI TS 102 871-2 v1.4.1 TP/GEONW/PON/SHB/BV-05
+ * @reference EN 302 636-4-1 [1], clauses 10.3.10.3
+ */
+ testcase TC_GEONW_PON_SHB_BV_05() runs on ItsGeoNetworking system ItsGeoNetworkingSystem {
+
+ f_GEONW_PON_SHB_BV_05();
+
+ } // End of testcase TC_GEONW_PON_SHB_BV_05
+
+ } // End of group geoSingleHopBroadcast
+
+ // 6.2.2.12
+ group geoGeoAnycast {
+
+ group gacNonAreaForwarding {
+
+ group gacNonAreaAllForwardingAlgorithm {
+
+ /**
+ * @desc Check that the protocol header fields (RHL) are correctly updated during a GAC
+ * forwarding step
+ *
+ * Pics Selection: PICS_GN_GAC_FWD
+ * Config Id: CF03
+ * Initial conditions:
+ * with {
+ * the IUT being in the "initial state" and
+ * the IUT having received Beacon information from ItsNodeB
+ * the IUT having received Beacon information from ItsNodeC
+ * }
+ * Expected behaviour:
+ * ensure that {
+ * when {
+ * the IUT receives a GAC packet from ItsNodeC
+ * containing TrafficClass.SCF set to 1
+ * containing Basic Header
+ * containing RHL field
+ * indicating value HL1 higher than 1
+ * containing Common Header
+ * containing MHL field
+ * indicating value MHL1
+ * containing DestinationArea
+ * indicating AREA2
+ * }
+ * then {
+ * the IUT retrnasmits the GAC packet
+ * containing Basic Header
+ * containing RHL field
+ * indicating value (HL1 - 1)
+ * containing Common Header
+ * containing MHL field
+ * indicating value MHL1
+ * containing DestinationArea
+ * indicating AREA2
+ * }
+ * }
+ *
+ *
+ * @see ETSI TS 102 871-2 v1.4.1 TP/GEONW/PON/GAC/NONAREA/ALL/BV-03
+ * @reference EN 302 636-4-1 [1], clauses 10.3.6.3 and 10.3.12.3
+ */
+ testcase TC_GEONW_PON_GAC_NONAREA_ALL_BV_03() runs on ItsMtc system ItsGeoNetworkingSystem {
+
+ f_GEONW_PON_GAC_NONAREA_ALL_BV_03();
+
+ } // End of testcase TC_GEONW_PON_GAC_NONAREA_ALL_BV_03
+
+ /**
+ * @desc Check that the RHL restriction is correctly handled at a GAC forwarding step
+ *
+ * Pics Selection: PICS_GN_GAC_FWD
+ * Config Id: CF03
+ * Initial conditions:
+ * with {
+ * the IUT being in the "initial state" and
+ * the IUT having received Beacon information from ItsNodeB
+ * the IUT having received Beacon information from ItsNodeC
+ * }
+ * Expected behaviour:
+ * ensure that {
+ * when {
+ * the IUT receives a GAC packet from ItsNodeC
+ * containing TrafficClass.SCF set to 1
+ * containing Basic Header
+ * containing RHL field
+ * indicating 1
+ * containing GAC Extended Header
+ * containing DestinationArea
+ * indicating AREA2
+ * }
+ * then {
+ * the IUT does not retransmit the GAC packet
+ * }
+ * }
+ *
+ *
+ * @see ETSI TS 102 871-2 v1.4.1 TP/GEONW/PON/GAC/NONAREA/ALL/BO-04
+ * @reference EN 302 636-4-1 [1], clauses 10.3.12.3
+ */
+ testcase TC_GEONW_PON_GAC_NONAREA_ALL_BO_04() runs on ItsMtc system ItsGeoNetworkingSystem {
+
+ f_GEONW_PON_GAC_NONAREA_ALL_BO_04();
+
+ } // End of testcase TC_GEONW_PON_GAC_NONAREA_ALL_BO_04
+
+ /**
+ * @desc Check that a received GAC packet is not passed over the Gn SAP if it is received for the
+ * first time outside the GAC destination area
+ *
+ * Pics Selection: PICS_GN_GAC_FWD
+ * Config Id: CF01
+ * Initial conditions:
+ * with {
+ * the IUT being in the "initial state"
+ * }
+ * Expected behaviour:
+ * ensure that {
+ * when {
+ * the IUT receives a GAC packet from ItsNodeB
+ * containing TrafficClass.SCF set to 1
+ * containing DestinationArea
+ * indicating AREA2
+ * }
+ * then {
+ * the IUT does not pass the received GAC packet to any Upper Layer protocol
+ * }
+ * }
+ *
+ *
+ * @see ETSI TS 102 871-2 v1.4.1 TP/GEONW/PON/GAC/BV-06
+ * @reference EN 302 636-4-1 [1], clauses 10.3.12.3
+ */
+ testcase TC_GEONW_PON_GAC_NONAREA_ALL_BV_06() runs on ItsGeoNetworking system ItsGeoNetworkingSystem {
+
+ f_GEONW_PON_GAC_NONAREA_ALL_BV_06();
+
+ } // End of testcase TC_GEONW_PON_GAC_NONAREA_ALL_BV_06
+
+ /**
+ * @desc Check that a received GAC packet is discarded when indicating a too big GeoArea
+ *
+ * Pics Selection: PICS_GN_GAC_FWD
+ * Config Id: CF04
+ * Initial conditions:
+ * with {
+ * the IUT being in the "initial state" and
+ * the IUT having received Beacon information from ItsNodeB and
+ * the IUT having received Beacon information from ItsNodeD
+ * }
+ * Expected behaviour:
+ * ensure that {
+ * when {
+ * the IUT receives a GAC packet from ItsNodeC
+ * containing TrafficClass.SCF set to 1
+ * containing DestinationArea
+ * indicating a geoArea bigger than itsGnMaxGeoAreaSize
+ * }
+ * then {
+ * the IUT does not retransmit the received GAC packet
+ * }
+ * }
+ *
+ *
+ * @see ETSI TS 102 871-2 v1.4.1 TP/GEONW/PON/GAC/NONAREA/ALL/BO-09
+ * @reference EN 302 636-4-1 [1], Annex B.3
+ */
+ testcase TC_GEONW_PON_GAC_NONAREA_ALL_BO_09() runs on ItsMtc system ItsGeoNetworkingSystem {
+
+ f_GEONW_PON_GAC_NONAREA_ALL_BO_09();
+
+ } // End of testcase TC_GEONW_PON_GAC_NONAREA_ALL_BO_09
+
+ /**
+ * @desc Check that a received GAC packet from inside the destination area is discarded if received for
+ * the first time from a known sender when IUT is outside the destination area.
+ *
+ * Pics Selection: PICS_GN_GAC_FWD
+ * Config Id: CF04
+ * Initial conditions:
+ * with {
+ * the IUT being in the "initial state" and
+ * the IUT having received Beacon information from ItsNodeB and
+ * the IUT having received Beacon information from ItsNodeC and
+ * the IUT having received Beacon information from ItsNodeD
+ * }
+ * Expected behaviour:
+ * ensure that {
+ * when {
+ * the IUT receives a GAC packet from ItsNodeD
+ * containing TrafficClass.SCF set to 1
+ * containing GAC Extended Header
+ * containing DestinationArea
+ * indicating AREA2
+ * }
+ * then {
+ * the IUT discards the received GAC packet
+ * }
+ * }
+ *
+ *
+ * @see ETSI TS 102 871-2 v1.4.1 TP/GEONW/PON/GAC/NONAREA/ALL/BV-10
+ * @reference EN 302 636-4-1 [1], Annex D
+ */
+ testcase TC_GEONW_PON_GAC_NONAREA_ALL_BV_10() runs on ItsMtc system ItsGeoNetworkingSystem {
+
+ f_GEONW_PON_GAC_NONAREA_ALL_BV_10();
+
+ } // End of testcase TC_GEONW_PON_GAC_NONAREA_ALL_BV_10
+
+ } // End of group gacNonAreaAllForwardingAlgorithm
+
+ group gacNonAreaGreedyForwarding {
+
+ /**
+ * @desc Check that a GAC request over upper Gn SAP triggers line forwarding if the IUT is outside the Destination Area
+ *
+ * Pics Selection: PICS_GN_GAC_SRC AND (PICS_GN_NON_AREA_FORWARDING_ALGORITHM == 'GREEDY' OR PICS_GN_NON_AREA_FORWARDING_ALGORITHM == 'UNSPECIFIED')
+ * Config Id: CF02
+ * Initial conditions:
+ * with {
+ * the IUT being in the "initial state" and
+ * the IUT having received Beacon information from ItsNodeD and
+ * the IUT having received Beacon information from ItsNodeB
+ * }
+ * Expected behaviour:
+ * ensure that {
+ * when {
+ * the IUT is requested to send a GAC packet
+ * containing TrafficClass.SCF set to 1
+ * containing DestinationArea
+ * indicating AREA2
+ * }
+ * then {
+ * the IUT selects ItsNodeB as the next hop and
+ * the IUT sends the GAC packet (see note)
+ * containing DestinationArea
+ * indicating AREA2
+ * }
+ * }
+ * NOTE: Next hop ITS Station being identified by the MAC layer address of ItsNodeB
+ *
+ *
+ *
+ * @see ETSI TS 102 871-2 v1.4.1 TP/GEONW/PON/GAC/NONAREA/GRD/BV-02
+ * @reference EN 302 636-4-1 [1], clauses 10.3.12.2, Annex E.2
+ */
+ testcase TC_GEONW_PON_GAC_NONAREA_GRD_BV_01() runs on ItsMtc system ItsGeoNetworkingSystem {
+
+ f_GEONW_PON_GAC_NONAREA_GRD_BV_01();
+
+ } // End of testcase TC_GEONW_PON_GAC_NONAREA_GRD_BV_01
+
+ /**
+ * @desc Check that a received GAC packet is triggering line forwarding if received out of its
+ * destination area for the first time
+ *
+ * Pics Selection: PICS_GN_GAC_FWD AND (PICS_GN_NON_AREA_FORWARDING_ALGORITHM == 'GREEDY' OR PICS_GN_NON_AREA_FORWARDING_ALGORITHM == 'UNSPECIFIED')
+ * Config Id: CF04
+ * Initial conditions:
+ * with {
+ * the IUT being in the "initial state" and
+ * the IUT having received Beacon information from ItsNodeB
+ * the IUT having received Beacon information from ItsNodeD
+ * }
+ * Expected behaviour:
+ * ensure that {
+ * when {
+ * the IUT receives a GAC packet from ItsNodeC
+ * containing TrafficClass.SCF set to 1
+ * containing DestinationArea
+ * indicating AREA2
+ * }
+ * then {
+ * the IUT selects ItsNodeB as the next hop and
+ * the IUT forwards the GAC packet (see note)
+ * }
+ * }
+ * NOTE: Next hop ITS Station being identified by the MAC layer address of ItsNodeB
+ *
+ *
+ *
+ * @see ETSI TS 102 871-2 v1.4.1 TP/GEONW/PON/GAC/NONAREA/GRD/BV-02
+ * @reference EN 302 636-4-1 [1], clauses 10.3.12.3, Annex E.2
+ */
+ testcase TC_GEONW_PON_GAC_NONAREA_GRD_BV_02() runs on ItsMtc system ItsGeoNetworkingSystem {
+
+ f_GEONW_PON_GAC_NONAREA_GRD_BV_02();
+
+ } // End of testcase TC_GEONW_PON_GAC_BV_02
+
+ /**
+ * @desc Check that a received GAC packet is not triggering line forwarding if received out of its
+ * destination area for the second or more time
+ *
+ * Pics Selection: PICS_GN_GAC_FWD AND (PICS_GN_NON_AREA_FORWARDING_ALGORITHM == 'GREEDY' OR PICS_GN_NON_AREA_FORWARDING_ALGORITHM == 'UNSPECIFIED')
+ * Config Id: CF04
+ * Initial conditions:
+ * with {
+ * the IUT being in the "initial state" and
+ * the IUT having received Beacon information from ItsNodeB
+ * the IUT having received Beacon information from ItsNodeD
+ * the IUT having received a GAC packet from ItsNodeC
+ * containing TrafficClass.SCF set to 1
+ * containing Basic Header
+ * containing RHL field
+ * indicating value HL1 higher than 1
+ * containing GAC Extended Header
+ * containing SN field
+ * indicating value SN1 and
+ * containing DestinationArea
+ * indicating AREA2
+ * the IUT having forwarded the GAC packet
+ * }
+ * Expected behaviour:
+ * ensure that {
+ * when {
+ * the IUT receives the same GAC packet from other neighbour
+ * containing Basic Header
+ * containing RHL field
+ * indicating value lower than HL1
+ * containing GAC Extended Header
+ * containing SN field
+ * indicating value SN1
+ * }
+ * then {
+ * the IUT does not forward the received GAC packet
+ * }
+ * }
+ *
+ *
+ * @see ETSI TS 102 871-2 v1.4.1 TP/GEONW/PON/GAC/NONAREA/GRD/BO-07
+ * @reference EN 302 636-4-1 [1], clauses 10.3.12.3
+ */
+ testcase TC_GEONW_PON_GAC_NONAREA_GRD_BO_07() runs on ItsMtc system ItsGeoNetworkingSystem {
+
+ f_GEONW_PON_GAC_NONAREA_GRD_BO_07();
+
+ } // End of testcase TC_GEONW_PON_GAC_NONAREA_GRD_BO_07
+
+ } // End of group gacNonAreaGreedyForwarding
+
+ group gacNonAreaContentionBasedForwarding {
+
+ /**
+ * @desc Check that a GAC request over upper Gn SAP triggers immediate broadcasting of a
+ * GAC packet if the IUT is outside the Destination Area
+ *
+ * Pics Selection: PICS_GN_GAC_SRC AND PICS_GN_NON_AREA_FORWARDING_ALGORITHM == 'CBF'
+ * Config Id: CF02
+ * Initial conditions:
+ * with {
+ * the IUT being in the "initial state" and
+ * the IUT having received Beacon information from ItsNodeD and
+ * the IUT having received Beacon information from ItsNodeB
+ * }
+ * Expected behaviour:
+ * ensure that {
+ * when {
+ * the IUT is requested to send a GAC packet
+ * containing TrafficClass.SCF set to 1
+ * containing DestinationArea
+ * indicating AREA2
+ * }
+ * then {
+ * the IUT broadcasts immediately the GAC packet
+ * }
+ * }
+ *
+ *
+ * @see ETSI TS 102 871-2 v1.4.1 TP/GEONW/PON/GAC/NONAREA/CBF/BV-01
+ * @reference EN 302 636-4-1 [1], clauses 10.3.12.2
+ */
+ testcase TC_GEONW_PON_GAC_NONAREA_CBF_BV_01() runs on ItsMtc system ItsGeoNetworkingSystem {
+
+ f_GEONW_PON_GAC_NONAREA_CBF_BV_01();
+
+ } // End of testcase TC_GEONW_PON_GAC_NONAREA_CBF_BV_01
+
+ /**
+ * @desc Check that a received GAC packet is forwarded at the correct time according to the contention
+ * based forwarding rules
+ *
+ * Pics Selection: PICS_GN_GAC_SRC AND PICS_GN_NON_AREA_FORWARDING_ALGORITHM == 'CBF'
+ * Config Id: CF03
+ * Initial conditions:
+ * with {
+ * the IUT being in the "initial state" and
+ * the IUT having received Beacon information from ItsNodeB and
+ * the IUT having received Beacon information from ItsNodeC and
+ * the distance between IUT and ItsNodeA being
+ * less than itsGnDefaultMaxCommunicationRange MIB attribute
+ * }
+ * Expected behaviour:
+ * ensure that {
+ * when {
+ * the IUT receives a GAC packet addressed to ItsNodeA from ItsNodeC
+ * containing TrafficClass.SCF set to 1
+ * containing Basic Header
+ * containing RHL field
+ * indicating value greater than 1
+ * }
+ * then {
+ * the IUT re-broadcasts the received GAC packet
+ * upon expiry of calculated CBF delay (see note)
+ * }
+ * }
+ * NOTE: The CBF delay timer value is calculated from the itsGnDefaultMaxCommunicationRange, itsGnCbfMinTime,
+ * and itsGnCbfMaxTime MIB attributes, and the distance value between IUT and ItsNodeC.
+ *
+ *
+ *
+ * @see ETSI TS 102 871-2 v1.4.1 TP/GEONW/PON/GAC/NONAREA/CBF/BV-02
+ * @reference EN 302 636-4-1 [1], clauses 10.3.12.2, Annex E3
+ */
+ testcase TC_GEONW_PON_GAC_NONAREA_CBF_BV_02() runs on ItsMtc system ItsGeoNetworkingSystem {
+
+ f_GEONW_PON_GAC_NONAREA_CBF_BV_02();
+
+ } // End of testcase TC_GEONW_PON_GAC_NONAREA_CBF_BV_02
+
+ /**
+ * @desc Check that GAC packet forwarding correctly avoids packet duplication according to the contention
+ * based forwarding rules
+ *
+ * Pics Selection: PICS_GN_GAC_SRC AND PICS_GN_NON_AREA_FORWARDING_ALGORITHM == 'CBF'
+ * Config Id: CF03
+ * Initial conditions:
+ * with {
+ * the IUT being in the "initial state" and
+ * the IUT having received Beacon information from ItsNodeB and
+ * the IUT having received Beacon information from ItsNodeC and
+ * the distance between IUT and ItsNodeA being
+ * less than the itsGnDefaultMaxCommunicationRange MIB attribute and
+ * the IUT having received a GAC packet addressed to ItsNodeA from ItsNodeC
+ * containing TrafficClass.SCF set to 1
+ * containing Basic Header
+ * containing RHL field
+ * indicating value greater than 1 and
+ * the IUT having started a CBF timer for this packet (see note)
+ * }
+ * Expected behaviour:
+ * ensure that {
+ * when {
+ * the IUT receives the same GAC packet from ItsNodeB
+ * before expiration of the CBF timer
+ * }
+ * then {
+ * the IUT does not re-broadcast the GAC packet
+ * }
+ * }
+ * NOTE: The CBF delay timer value is calculated from the itsGnDefaultMaxCommunicationRange, itsGnCbfMinTime,
+ * and itsGnCbfMaxTime MIB attributes, and the distance value between IUT and ItsNodeC.
+ *
+ *
+ *
+ * @see ETSI TS 102 871-2 v1.4.1 TP/GEONW/PON/GAC/NONAREA/CBF/BV-07
+ * @reference EN 302 636-4-1 [1], clauses 10.3.12.3, Annex E3
+ */
+ testcase TC_GEONW_PON_GAC_NONAREA_CBF_BV_07() runs on ItsMtc system ItsGeoNetworkingSystem {
+
+ f_GEONW_PON_GAC_NONAREA_CBF_BV_07();
+
+ } // End of testcase TC_GEONW_PON_GAC_NONAREA_CBF_BV_07
+
+ /**
+ * @desc Check that a received GAC packet forwarding is correctly handling the minimum delay value
+ * according to the contention based forwarding rules
+ *
+ * Pics Selection: PICS_GN_GAC_SRC AND PICS_GN_NON_AREA_FORWARDING_ALGORITHM == 'CBF'
+ * Config Id: CF03
+ * Initial conditions:
+ * with {
+ * the IUT being in the "initial state" and
+ * the IUT having received Beacon information from ItsNodeB and
+ * the IUT having received Beacon information from ItsNodeC and
+ * the distance between IUT and ItsNodeC being
+ * larger than the itsGnDefaultMaxCommunicationRange MIB attribute
+ * }
+ * Expected behaviour:
+ * ensure that {
+ * when {
+ * the IUT receives a GAC packet addressed to ItsNodeA from ItsNodeC
+ * containing TrafficClass.SCF set to 1
+ * containing Basic Header
+ * containing RHL field
+ * indicating value greater than 1
+ * }
+ * then {
+ * the IUT re-broadcasts the received GAC packet
+ * upon expiry of itsGnCbfMinTime delay
+ * }
+ * }
+ *
+ *
+ *
+ * @see ETSI TS 102 871-2 v1.4.1 TP/GEONW/PON/GAC/NONAREA/CBF/BV-20
+ * @reference EN 302 636-4-1 [1], clauses 10.3.12.3, Annex E3
+ */
+ testcase TC_GEONW_PON_GAC_NONAREA_CBF_BV_20() runs on ItsMtc system ItsGeoNetworkingSystem {
+
+ f_GEONW_PON_GAC_NONAREA_CBF_BV_20();
+
+ } // End of testcase TC_GEONW_PON_GAC_NONAREA_CBF_BV_20
+
+ /**
+ * @desc Check that a received GAC packet is forwarded at the correct time according to the contention
+ * based forwarding rules if received for the first time when IUT is outside of the destination area
+ * from an unknown sender
+ *
+ * Pics Selection: PICS_GN_GAC_SRC AND PICS_GN_NON_AREA_FORWARDING_ALGORITHM == 'CBF'
+ * Config Id: CF04
+ * Initial conditions:
+ * with {
+ * the IUT being in the "initial state" and
+ * the IUT having received Beacon information from ItsNodeB and
+ * the IUT not having received any message from ItsNodeD
+ * }
+ * Expected behaviour:
+ * ensure that {
+ * when {
+ * the IUT receives a GAC packet generated by ItsNodeC from ItsNodeD
+ * containing TrafficClass.SCF set to 1
+ * containing GAC Extended Header
+ * containing DestinationArea
+ * indicating AREA2
+ * }
+ * then {
+ * the IUT re-broadcasts the GAC packet
+ * upon expiry of CBF_MAX
+ * }
+ * }
+ *
+ *
+ *
+ * @see ETSI TS 102 871-2 v1.4.1 TP/GEONW/PON/GAC/NONAREA/CBF/BV-21
+ * @reference EN 302 636-4-1 [1], Annex E3
+ */
+ testcase TC_GEONW_PON_GAC_NONAREA_CBF_BV_21() runs on ItsMtc system ItsGeoNetworkingSystem {
+
+ f_GEONW_PON_GAC_NONAREA_CBF_BV_21();
+
+ } // End of testcase TC_GEONW_PON_GAC_NONAREA_CBF_BV_21
+
+ /**
+ * @desc Check that a received GAC packet is forwarded at the correct time according to the contention
+ * based forwarding rules if received for the first time when IUT is outside of the destination area
+ * from a known sender having an uncertain position (PAI = 0)
+ *
+ * Pics Selection: PICS_GN_GAC_SRC AND PICS_GN_NON_AREA_FORWARDING_ALGORITHM == 'CBF'
+ * Config Id: CF04
+ * Initial conditions:
+ * with {
+ * the IUT being in the "initial state" and
+ * the IUT having received Beacon information from ItsNodeB and
+ * the IUT having received Beacon information from ItsNodeD
+ * containing Beacon ExtendedHeader
+ * containing SOPV field
+ * containing PAI
+ * set to ‘0’
+ * }
+ * Expected behaviour:
+ * ensure that {
+ * when {
+ * the IUT receives a GAC packet generated by ItsNodeC from ItsNodeD
+ * containing TrafficClass.SCF set to 1
+ * containing GAC Extended Header
+ * containing DestinationArea
+ * indicating AREA2
+ * }
+ * then {
+ * the IUT re-broadcasts the GAC packet
+ * upon expiry of CBF_MAX
+ * }
+ * }
+ *
+ *
+ *
+ * @see ETSI TS 102 871-2 v1.4.1 TP/GEONW/PON/GAC/NONAREA/CBF/BV-22
+ * @reference EN 302 636-4-1 [1], Annex E3
+ */
+ testcase TC_GEONW_PON_GAC_NONAREA_CBF_BV_22() runs on ItsMtc system ItsGeoNetworkingSystem {
+
+ f_GEONW_PON_GAC_NONAREA_CBF_BV_22();
+
+ } // End of testcase TC_GEONW_PON_GAC_NONAREA_CBF_BV_22
+
+ } // End of group gacNonAreaContentionBasedForwarding
+
+ } // End of group gacNonAreaForwarding
+
+ group gacAreaForwarding {
+
+ /**
+ * @desc Check that GAC request over upper Gn SAP triggers broadcasting of a GAC packet if the IUT is within the Destination Area
+ *
+ * Pics Selection: PICS_GN_GAC_SRC
+ * Config Id: CF02
+ * Initial conditions:
+ * with {
+ * the IUT being in the "initial state" and
+ * the IUT having received Beacon information from ItsNodeD and
+ * the IUT having received Beacon information from ItsNodeB
+ * }
+ * Expected behaviour:
+ * ensure that {
+ * when {
+ * the IUT is requested to send a GAC packet
+ * containing TrafficClass.SCF set to 1
+ * containing DestinationArea
+ * indicating AREA1
+ * }
+ * then {
+ * the IUT broadcasts immediately the GAC packet
+ * containing DestinationArea
+ * indicating AREA1
+ * }
+ * }
+ *
+ *
+ * @see ETSI TS 102 871-2 v1.4.1 TP/GEONW/PON/GAC/AREA/ALL/BV-01
+ * @reference EN 302 636-4-1 [1], clauses 10.3.12.2
+ */
+ testcase TC_GEONW_PON_GAC_AREA_ALL_BV_01() runs on ItsMtc system ItsGeoNetworkingSystem {
+
+ f_GEONW_PON_GAC_AREA_ALL_BV_01();
+
+ } // End of testcase TC_GEONW_PON_GAC_AREA_ALL_BV_01
+
+ /**
+ * @desc Check that a received GAC packet is not triggering forwarding or re-broadcasting if the IUT
+ * is within the Destination Area
+ *
+ * Pics Selection: PICS_GN_GAC_FWD
+ * Config Id: CF02
+ * Initial conditions:
+ * with {
+ * the IUT being in the "initial state" and
+ * the IUT having received Beacon information from ItsNodeD and
+ * the IUT having received Beacon information from ItsNodeB
+ * }
+ * Expected behaviour:
+ * ensure that {
+ * when {
+ * the IUT receives a GAC packet
+ * containing TrafficClass.SCF set to 1
+ * containing DestinationArea
+ * indicating AREA1
+ * }
+ * then {
+ * IUT does not retransmit the received GAC packet
+ * }
+ * }
+ *
+ *
+ * @see ETSI TS 102 871-2 v1.4.1 TP/GEONW/PON/GAC/AREA/ALL/BV-02
+ * @reference EN 302 636-4-1 [1], clauses 10.3.12.3
+ */
+ testcase TC_GEONW_PON_GAC_AREA_ALL_BV_02() runs on ItsMtc system ItsGeoNetworkingSystem {
+
+ f_GEONW_PON_GAC_AREA_ALL_BV_02();
+
+ } // End of testcase TC_GEONW_PON_GAC_AREA_ALL_BV_02
+
+ /**
+ * @desc Check that a received GAC packet is passed over the Gn SAP to the correct upper
+ * protocol if it is received for the first time within the GAC destination area
+ *
+ * Pics Selection: PICS_GN_GAC_DST
+ * Config Id: CF01
+ * Initial conditions:
+ * with {
+ * the IUT being in the "initial state"
+ * }
+ * Expected behaviour:
+ * ensure that {
+ * when {
+ * the IUT receives a GAC packet from ItsNodeB
+ * containing TrafficClass.SCF set to 1
+ * containing DestinationArea
+ * indicating AREA1
+ * }
+ * then {
+ * the IUT passes the received GAC packet to the correct Upper Layer protocol
+ * }
+ * }
+ *
+ *
+ * @see ETSI TS 102 871-2 v1.4.1 TP/GEONW/PON/GAC/AREA/ALL/BV-05
+ * @reference EN 302 636-4-1 [1], clauses 10.3.12.3
+ */
+ testcase TC_GEONW_PON_GAC_AREA_ALL_BV_05() runs on ItsGeoNetworking system ItsGeoNetworkingSystem {
+
+ f_GEONW_PON_GAC_AREA_ALL_BV_05();
+
+ } // End of testcase TC_GEONW_PON_GAC_AREA_ALL_BV_05
+
+ /**
+ * @desc Check that a received GAC packet is not passed over the Gn SAP if it is received for
+ * the second or more time
+ *
+ * Pics Selection: PICS_GN_GAC_DST
+ * Config Id: CF02
+ * Initial conditions:
+ * with {
+ * the IUT being in the "initial state" and
+ * the IUT having received a GAC packet from ItsNodeD
+ * containing TrafficClass.SCF set to 1
+ * containing Basic Header
+ * containing RHL field
+ * indicating HL1
+ * containing GAC Extended Header
+ * containing SN field
+ * indicating value SN1 and
+ * containing DestinationArea
+ * indicating AREA1 and
+ * the IUT having passed the received GAC packet to the correct Upper Layer protocol
+ * }
+ * Expected behaviour:
+ * ensure that {
+ * when {
+ * the IUT receives the same GAC packet from ItsNodeB
+ * containing Basic Header
+ * containing RHL field
+ * indicating value lower than HL1
+ * containing GAC Extended Header
+ * containing SN field
+ * indicating value SN1
+ * }
+ * then {
+ * the IUT does not pass the received GAC packet to any Upper Layer protocol
+ * }
+ * }
+ *
+ *
+ * @see ETSI TS 102 871-2 v1.4.1 TP/GEONW/PON/GAC/AREA/ALL/BO-08
+ * @reference EN 302 636-4-1 [1], clauses 10.3.12.3
+ */
+ testcase TC_GEONW_PON_GAC_AREA_ALL_BO_08() runs on ItsMtc system ItsGeoNetworkingSystem {
+
+ f_GEONW_PON_GAC_AREA_ALL_BO_08();
+
+ } // End of testcase TC_GEONW_PON_GAC_AREA_ALL_BO_08
+
+ } // End of group gacAreaForwarding
+
+ } // End of group geoGeoAnycast
+
+ } // End of group geoProtocolOperation
+
+ // 6.2.3 Capacities
+ group geoCapacities {
+
+ // 6.2.3.1
+ group geoCapLocationService {
+
+ /**
+ * @desc Test of LS buffer capacity according to its GnLocationServicePacketBufferSize parameter and
+ * the overflow handling procedure
+ *
+ * Pics Selection: PICS_GN_LS_REQ_SRC
+ * Config Id: CF01
+ * Initial conditions:
+ * with {
+ * the IUT being in the "initial state" and
+ * the IUT having no Location Table Entry for ItsNodeA and
+ * the IUT having received Beacon information from ItsNodeB and
+ * the IUT having been requested to send multiple GUC packets to ItsNodeA
+ * containing TrafficClass.SCF set to 1 and
+ * the IUT having sent a LS_REQUEST packet and
+ * the IUT not having received a LS_REPLY packet
+ * }
+ * Expected behaviour:
+ * ensure that {
+ * when {
+ * the IUT is requested to send a GUC packet to ItsNodeA
+ * containing TrafficClass.SCF set to 1 and
+ * the location service buffer capacity exceeded (see note 1)
+ * }
+ * then {
+ * the IUT removes the older packet(s) in the location service buffer and,
+ * the IUT inserts the new received packet at the end of the location service buffer (see note 2)
+ * }
+ * }
+ * NOTE 1: The amount of stored data exceeds Location Service buffer capacity defined by the
+ * itsGnLocationServicePacketBufferSize MIB parameter
+ * NOTE 2: Buffered packets will be delivered upon reception of LS_REPLY message
+ *
+ *
+ *
+ * @see ETSI TS 102 871-2 v1.4.1 TP/GEONW/CAP/LOS/BV-01
+ * @reference EN 302 636-4-1 [1], clauses 7.4.3
+ */
+ testcase TC_GEONW_CAP_LOS_BV_01() runs on ItsGeoNetworking system ItsGeoNetworkingSystem {
+
+ f_GEONW_CAP_LOS_BV_01();
+
+ } // End of testcase TC_GEONW_CAP_LOS_BV_01
+
+ } // End of group geoCapLocationService
+
+ // 6.2.3.2
+ group geoCapForwardingPacketBuffer {
+
+ /**
+ * @desc Test of UC forwarding buffer capacity according to itsGnUcForwardingPacketBufferSize
+ * parameter and the overflow handling procedure
+ *
+ * Pics Selection: PICS_GN_GUC_FWD
+ * 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 GUC packets addressed to ItsNodeA from ItsNodeC
+ * containing TrafficClass.SCF set to 1
+ * }
+ * Expected behaviour:
+ * ensure that {
+ * when {
+ * the IUT receives a GUC 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 GUC 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
+ *
+ *
+ *
+ * @see ETSI TS 102 871-2 v1.4.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 {
+
+ f_GEONW_CAP_FPB_BV_01();
+
+ } // End of testcase TC_GEONW_CAP_FPB_BV_01
+
+ /**
+ * @desc Test of BC forwarding buffer capacity according to itsGnBcForwardingPacketBufferSize
+ * parameter and the overflow handling procedure
+ *
+ * Pics Selection: PICS_GN_GBC_FWD
+ * 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 GBC packets
+ * containing TrafficClass.SCF set to 1
+ * containing GBC Extended Header
+ * containing GBC Destination Area
+ * indicating AREA2
+ * }
+ * Expected behaviour:
+ * ensure that {
+ * when {
+ * the IUT receives a GBC packet
+ * containing TrafficClass.SCF set to 1
+ * containing GBC Extended Header
+ * containing GBC 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 GBC 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
+ *
+ *
+ *
+ * @see ETSI TS 102 871-2 v1.4.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 {
+
+ f_GEONW_CAP_FPB_BV_02();
+
+ } // End of testcase TC_GEONW_CAP_FPB_BV_02
+
+ } // End of group geoCapForwardingPacketBuffer
+
+ } // End of group geoCapacities
+
+} // End of module ItsGeoNetworking_TestCases
+
diff --git a/ItsGeoNetworking_TestControl.ttcn b/ItsGeoNetworking_TestControl.ttcn
new file mode 100644
index 0000000000000000000000000000000000000000..3cc3c88329c0a5c2d5b337f2063122e0bec23584
--- /dev/null
+++ b/ItsGeoNetworking_TestControl.ttcn
@@ -0,0 +1,494 @@
+/**
+ * @author ETSI / STF405 / STF449 / STF484
+ * @version $URL$
+ * $Id$
+ * @desc Test Control file for GeoNetworking
+ * @copyright ETSI Copyright Notification
+ * No part may be reproduced except as authorized by written permission.
+ * The copyright and the foregoing restriction extend to reproduction in all media.
+ * All rights reserved.
+ *
+ */
+module ItsGeoNetworking_TestControl {
+
+ // ATS GeoNetworking
+ import from ItsGeoNetworking_TestCases all;
+
+ // LibItsGeoNetworking
+ import from LibItsGeoNetworking_Pics all;
+ import from LibItsGeoNetworking_TypesAndValues all;
+
+ // Test Execution
+ control {
+
+ /* FDV */
+
+ if(PICS_GN_BASIC_HEADER) {
+ execute(TC_GEONW_FDV_BAH_BV_01());
+ execute(TC_GEONW_FDV_BAH_BI_02());
+ }
+
+ if(PICS_GN_COMMON_HEADER) {
+ execute(TC_GEONW_FDV_COH_BV_01());
+ execute(TC_GEONW_FDV_COH_BV_02());
+ execute(TC_GEONW_FDV_COH_BV_03());
+ execute(TC_GEONW_FDV_COH_BO_04());
+ }
+
+ if(PICS_GN_BEACON_SRC) {
+ execute(TC_GEONW_FDV_BEA_BV_01());
+ execute(TC_GEONW_FDV_BEA_BV_02());
+ execute(TC_GEONW_FDV_BEA_BV_03());
+ execute(TC_GEONW_FDV_BEA_BV_04());
+ }
+
+ if(PICS_GN_GUC_SRC) {
+ execute(TC_GEONW_FDV_GUC_BV_01());
+ }
+
+ if(PICS_GN_GBC_SRC) {
+ execute(TC_GEONW_FDV_GBC_BV_01());
+ }
+
+ if(PICS_GN_GAC_SRC) {
+ execute(TC_GEONW_FDV_GAC_BV_01());
+ }
+
+ if(PICS_GN_SHB_SRC) {
+ execute(TC_GEONW_FDV_SHB_BV_01());
+ }
+
+ if(PICS_GN_TSB_SRC) {
+ execute(TC_GEONW_FDV_TSB_BV_01());
+ }
+
+ /* PON/LOT */
+
+ if(PICS_GN_GUC_SRC and PICS_GN_BEACON_DST) {
+ execute(TC_GEONW_PON_LOT_BV_01());
+ }
+
+ if(PICS_GN_LS_REQ_SRC and PICS_GN_LS_REP_DST) {
+ execute(TC_GEONW_PON_LOT_BV_02());
+ }
+
+ if(PICS_GN_BEACON_DST) {
+ execute(TC_GEONW_PON_LOT_BV_03_01());
+ }
+
+ if(PICS_GN_GUC_DST) {
+ execute(TC_GEONW_PON_LOT_BV_03_02());
+ }
+
+ if(PICS_GN_GAC_DST) {
+ execute(TC_GEONW_PON_LOT_BV_03_03());
+ }
+
+ if(PICS_GN_GBC_DST) {
+ execute(TC_GEONW_PON_LOT_BV_03_04());
+ }
+
+ if(PICS_GN_TSB_DST) {
+ execute(TC_GEONW_PON_LOT_BV_03_05());
+ }
+
+ if(PICS_GN_SHB_DST) {
+ execute(TC_GEONW_PON_LOT_BV_03_06());
+ }
+
+ if(PICS_GN_LS_REQ_DST) {
+ execute(TC_GEONW_PON_LOT_BV_03_07());
+ }
+
+ if(PICS_GN_LS_REP_DST) {
+ execute(TC_GEONW_PON_LOT_BV_03_08());
+ }
+
+ if(PICS_GN_LS_REQ_SRC) {
+ execute(TC_GEONW_PON_LOT_BV_04());
+ }
+
+ if(PICS_GN_GUC_DST) {
+ execute(TC_GEONW_PON_LOT_BV_05_01());
+ }
+
+ if(PICS_GN_GAC_DST) {
+ execute(TC_GEONW_PON_LOT_BV_05_02());
+ }
+
+ if(PICS_GN_GBC_DST) {
+ execute(TC_GEONW_PON_LOT_BV_05_03());
+ }
+
+ if(PICS_GN_TSB_DST) {
+ execute(TC_GEONW_PON_LOT_BV_05_04());
+ }
+
+ if(PICS_GN_SHB_DST) {
+ execute(TC_GEONW_PON_LOT_BV_05_05());
+ }
+
+ if(PICS_GN_LS_REQ_DST) {
+ execute(TC_GEONW_PON_LOT_BV_05_06());
+ }
+
+ if(PICS_GN_LS_REP_DST) {
+ execute(TC_GEONW_PON_LOT_BV_05_07());
+ }
+
+ /* PON/LPV */
+
+ if(PICS_GN_BEACON_SRC) {
+ execute(TC_GEONW_PON_LPV_BV_01());
+ }
+
+ /* PON/SQN */
+
+ if(PICS_GN_GBC_SRC) {
+ execute(TC_GEONW_PON_SQN_BV_01());
+ execute(TC_GEONW_PON_SQN_BV_02());
+ }
+
+ /* PON/LOS */
+
+ if(PICS_GN_LS_REQ_SRC) {
+ execute(TC_GEONW_PON_LOS_BV_01());
+ execute(TC_GEONW_PON_LOS_BV_02());
+ if(PICS_GN_LS_REP_DST) {
+ execute(TC_GEONW_PON_LOS_BV_03());
+ execute(TC_GEONW_PON_LOS_BV_04());
+ }
+ execute(TC_GEONW_PON_LOS_BV_05());
+ }
+
+ if(PICS_GN_LS_REQ_RETRANSMISSION) {
+ execute(TC_GEONW_PON_LOS_TI_06());
+ execute(TC_GEONW_PON_LOS_BV_07());
+ }
+
+ if(PICS_GN_LS_REQ_DST) {
+ execute(TC_GEONW_PON_LOS_BV_08());
+ execute(TC_GEONW_PON_LOS_BO_09());
+ }
+
+ if(PICS_GN_LS_FWD) {
+ execute(TC_GEONW_PON_LOS_BV_10());
+ execute(TC_GEONW_PON_LOS_BV_11());
+ }
+
+ if(PICS_GN_LS_REQ_SRC) {
+ execute(TC_GEONW_PON_LOS_BV_12());
+ execute(TC_GEONW_PON_LOS_BV_13());
+ execute(TC_GEONW_PON_LOS_BV_14());
+ execute(TC_GEONW_PON_LOS_BV_15());
+ execute(TC_GEONW_PON_LOS_BV_16());
+ execute(TC_GEONW_PON_LOS_BV_17());
+ }
+
+ /* PON/FPB */
+
+ if(PICS_GN_GUC_SRC) {
+ execute(TC_GEONW_PON_FPB_BV_01());
+ execute(TC_GEONW_PON_FPB_BV_02());
+ execute(TC_GEONW_PON_FPB_BV_03());
+ execute(TC_GEONW_PON_FPB_BV_04());
+ }
+
+ if(PICS_GN_TSB_SRC) {
+ execute(TC_GEONW_PON_FPB_BV_06());
+ execute(TC_GEONW_PON_FPB_BV_07());
+ execute(TC_GEONW_PON_FPB_BV_08());
+ }
+
+ if(PICS_GN_GUC_SRC) {
+ execute(TC_GEONW_PON_FPB_BV_09());
+ }
+
+ if(PICS_GN_TSB_SRC) {
+ execute(TC_GEONW_PON_FPB_BV_10());
+ }
+
+ if(PICS_GN_GUC_SRC) {
+ execute(TC_GEONW_PON_FPB_BV_11_01());
+ }
+
+ if(PICS_GN_GAC_SRC) {
+ execute(TC_GEONW_PON_FPB_BV_11_02());
+ }
+
+ if(PICS_GN_GBC_SRC) {
+ execute(TC_GEONW_PON_FPB_BV_11_03());
+ }
+
+ if(PICS_GN_TSB_SRC) {
+ execute(TC_GEONW_PON_FPB_BV_11_04());
+ }
+
+ if(PICS_GN_SHB_SRC) {
+ execute(TC_GEONW_PON_FPB_BV_11_05());
+ }
+
+ if(PICS_GN_GUC_SRC) {
+ execute(TC_GEONW_PON_FPB_BV_12_01());
+ }
+
+ if(PICS_GN_GAC_SRC) {
+ execute(TC_GEONW_PON_FPB_BV_12_02());
+ }
+
+ if(PICS_GN_GBC_SRC) {
+ execute(TC_GEONW_PON_FPB_BV_12_03());
+ }
+
+ if(PICS_GN_TSB_SRC) {
+ execute(TC_GEONW_PON_FPB_BV_12_04());
+ }
+
+ /* PON/GNA */
+
+ if(PICS_GN_ADDR_AUTO) {
+ if (PICS_GN_LOCAL_ADDR_CONF_METHOD == e_auto) {
+ execute(TC_GEONW_PON_GNA_BV_01());
+ }
+ }
+
+ if(PICS_GN_DAD) {
+ execute(TC_GEONW_PON_GNA_BV_02());
+ }
+
+ /* PON/BEA */
+
+ if(PICS_GN_BEACON_SRC) {
+ execute(TC_GEONW_PON_BEA_TI_01());
+ execute(TC_GEONW_PON_BEA_TI_02());
+ }
+
+ /* PON/GUC */
+ if(PICS_GN_GUC) {
+
+ if(PICS_GN_GUC_FWD) {
+ execute(TC_GEONW_PON_GUC_ALL_BV_03());
+ execute(TC_GEONW_PON_GUC_ALL_BO_04());
+ execute(TC_GEONW_PON_GUC_ALL_BV_06());
+ }
+
+ if(PICS_GN_GUC_DST) {
+ execute(TC_GEONW_PON_GUC_ALL_BV_05());
+ execute(TC_GEONW_PON_GUC_ALL_BO_08());
+ }
+
+ if((PICS_GN_NON_AREA_FORWARDING_ALGORITHM == e_greedy) or (PICS_GN_NON_AREA_FORWARDING_ALGORITHM == e_unspecified)) {
+
+ if(PICS_GN_GUC_SRC) {
+ execute(TC_GEONW_PON_GUC_GRD_BV_01());
+ }
+
+ if(PICS_GN_GUC_FWD) {
+ execute(TC_GEONW_PON_GUC_GRD_BV_02());
+ execute(TC_GEONW_PON_GUC_GRD_BO_07());
+ }
+ }
+
+ if(PICS_GN_NON_AREA_FORWARDING_ALGORITHM == e_cbf) {
+
+ if(PICS_GN_GUC_SRC) {
+ execute(TC_GEONW_PON_GUC_CBF_BV_01());
+ }
+
+ if(PICS_GN_GUC_FWD) {
+ execute(TC_GEONW_PON_GUC_CBF_BV_02());
+ execute(TC_GEONW_PON_GUC_CBF_BV_07());
+ execute(TC_GEONW_PON_GUC_CBF_BV_20());
+ execute(TC_GEONW_PON_GUC_CBF_BV_21());
+ execute(TC_GEONW_PON_GUC_CBF_BV_22());
+ }
+ }
+
+ }
+
+ /* PON/GBC */
+ if(PICS_GN_GBC) {
+
+ if(PICS_GN_GBC_FWD) {
+ execute(TC_GEONW_PON_GBC_NONAREA_ALL_BV_03());
+ execute(TC_GEONW_PON_GBC_NONAREA_ALL_BV_04());
+ execute(TC_GEONW_PON_GBC_NONAREA_ALL_BV_06());
+ execute(TC_GEONW_PON_GBC_NONAREA_ALL_BO_09());
+ execute(TC_GEONW_PON_GBC_NONAREA_ALL_BO_10());
+ }
+
+ if((PICS_GN_NON_AREA_FORWARDING_ALGORITHM == e_greedy) or (PICS_GN_NON_AREA_FORWARDING_ALGORITHM == e_unspecified)) {
+
+ if(PICS_GN_GBC_SRC) {
+ execute(TC_GEONW_PON_GBC_NONAREA_GRD_BV_01());
+ }
+
+ if(PICS_GN_GBC_FWD) {
+ execute(TC_GEONW_PON_GBC_NONAREA_GRD_BV_02());
+ execute(TC_GEONW_PON_GBC_NONAREA_GRD_BO_07());
+ }
+ }
+
+ if(PICS_GN_NON_AREA_FORWARDING_ALGORITHM == e_cbf) {
+
+ if(PICS_GN_GBC_SRC) {
+ execute(TC_GEONW_PON_GBC_NONAREA_CBF_BV_01());
+ }
+
+ if(PICS_GN_GBC_FWD) {
+ execute(TC_GEONW_PON_GBC_NONAREA_CBF_BV_02());
+ execute(TC_GEONW_PON_GBC_NONAREA_CBF_BV_07());
+ execute(TC_GEONW_PON_GBC_NONAREA_CBF_BV_20());
+ execute(TC_GEONW_PON_GBC_NONAREA_CBF_BV_21());
+ execute(TC_GEONW_PON_GBC_NONAREA_CBF_BV_22());
+ }
+ }
+
+ if(PICS_GN_GBC_SRC) {
+ execute(TC_GEONW_PON_GBC_AREA_ALL_BV_01());
+ }
+
+ if(PICS_GN_GBC_FWD) {
+ execute(TC_GEONW_PON_GBC_AREA_ALL_BV_03());
+ execute(TC_GEONW_PON_GBC_AREA_ALL_BV_04());
+ }
+
+ if(PICS_GN_GBC_DST) {
+ execute(TC_GEONW_PON_GBC_AREA_ALL_BV_05());
+ execute(TC_GEONW_PON_GBC_AREA_ALL_BO_08());
+ }
+
+ if((PICS_GN_AREA_FORWARDING_ALGORITHM == e_simple) or (PICS_GN_AREA_FORWARDING_ALGORITHM == e_unspecified)) {
+
+ if(PICS_GN_GBC_FWD) {
+ execute(TC_GEONW_PON_GBC_AREA_SMP_BV_02());
+ execute(TC_GEONW_PON_GBC_AREA_SMP_BO_07());
+ }
+ }
+
+ if(PICS_GN_AREA_FORWARDING_ALGORITHM == e_cbf) {
+
+ if(PICS_GN_GBC_FWD) {
+ execute(TC_GEONW_PON_GBC_AREA_CBF_BV_02());
+ execute(TC_GEONW_PON_GBC_AREA_CBF_BV_07());
+ execute(TC_GEONW_PON_GBC_AREA_CBF_BV_21());
+ execute(TC_GEONW_PON_GBC_AREA_CBF_BV_22());
+ }
+ }
+
+ if(PICS_GN_AREA_FORWARDING_ALGORITHM == e_advanced) {
+
+ if(PICS_GN_GBC_FWD) {
+ execute(TC_GEONW_PON_GBC_AREA_ADV_BV_21());
+ execute(TC_GEONW_PON_GBC_AREA_ADV_BV_23());
+ execute(TC_GEONW_PON_GBC_AREA_ADV_BV_24());
+ execute(TC_GEONW_PON_GBC_AREA_ADV_BV_25());
+ execute(TC_GEONW_PON_GBC_AREA_ADV_BV_26());
+ execute(TC_GEONW_PON_GBC_AREA_ADV_BV_27());
+ execute(TC_GEONW_PON_GBC_AREA_ADV_BV_28());
+ execute(TC_GEONW_PON_GBC_AREA_ADV_BV_29());
+ }
+ }
+ }
+
+ /* PON/TSB */
+ if(PICS_GN_TSB) {
+
+ if(PICS_GN_TSB_SRC) {
+ execute(TC_GEONW_PON_TSB_BV_01());
+ }
+
+ if(PICS_GN_TSB_FWD) {
+ execute(TC_GEONW_PON_TSB_BV_02());
+ execute(TC_GEONW_PON_TSB_BV_03());
+ execute(TC_GEONW_PON_TSB_BO_04());
+ execute(TC_GEONW_PON_TSB_BO_07());
+ }
+
+ if(PICS_GN_TSB_DST) {
+ execute(TC_GEONW_PON_TSB_BV_05());
+ execute(TC_GEONW_PON_TSB_BO_08());
+ }
+ }
+
+ /* PON/SHB */
+ if(PICS_GN_SHB) {
+
+ if(PICS_GN_SHB_SRC) {
+ execute(TC_GEONW_PON_SHB_BV_01());
+ }
+
+ if(PICS_GN_SHB_DST) {
+ execute(TC_GEONW_PON_SHB_BV_05());
+ }
+ }
+
+ /* PON/GAC */
+ if(PICS_GN_GAC) {
+
+ if(PICS_GN_GAC_FWD) {
+ execute(TC_GEONW_PON_GAC_NONAREA_ALL_BV_03());
+ execute(TC_GEONW_PON_GAC_NONAREA_ALL_BO_04());
+ execute(TC_GEONW_PON_GAC_NONAREA_ALL_BV_06());
+ execute(TC_GEONW_PON_GAC_NONAREA_ALL_BO_09());
+ execute(TC_GEONW_PON_GAC_NONAREA_ALL_BV_10());
+ }
+
+ if((PICS_GN_NON_AREA_FORWARDING_ALGORITHM == e_greedy) or (PICS_GN_NON_AREA_FORWARDING_ALGORITHM == e_unspecified)) {
+
+ if(PICS_GN_GAC_SRC) {
+ execute(TC_GEONW_PON_GAC_NONAREA_GRD_BV_01());
+ }
+
+ if(PICS_GN_GAC_FWD) {
+ execute(TC_GEONW_PON_GAC_NONAREA_GRD_BV_02());
+ execute(TC_GEONW_PON_GAC_NONAREA_GRD_BO_07());
+ }
+ }
+
+ if(PICS_GN_NON_AREA_FORWARDING_ALGORITHM == e_cbf) {
+
+ if(PICS_GN_GAC_SRC) {
+ execute(TC_GEONW_PON_GAC_NONAREA_CBF_BV_01());
+ }
+
+ if(PICS_GN_GAC_FWD) {
+ execute(TC_GEONW_PON_GAC_NONAREA_CBF_BV_02());
+ execute(TC_GEONW_PON_GAC_NONAREA_CBF_BV_07());
+ execute(TC_GEONW_PON_GAC_NONAREA_CBF_BV_20());
+ execute(TC_GEONW_PON_GAC_NONAREA_CBF_BV_21());
+ execute(TC_GEONW_PON_GAC_NONAREA_CBF_BV_22());
+ }
+ }
+
+ if(PICS_GN_GAC_SRC) {
+ execute(TC_GEONW_PON_GAC_AREA_ALL_BV_01());
+ }
+
+ if(PICS_GN_GAC_FWD) {
+ execute(TC_GEONW_PON_GAC_AREA_ALL_BV_02());
+ }
+
+ if(PICS_GN_GAC_DST) {
+ execute(TC_GEONW_PON_GAC_AREA_ALL_BV_05());
+ execute(TC_GEONW_PON_GAC_AREA_ALL_BO_08());
+ }
+ }
+
+ /* CAP */
+
+ if(PICS_GN_LS_REQ_SRC) {
+ execute(TC_GEONW_CAP_LOS_BV_01());
+ }
+
+ if(PICS_GN_GUC_FWD) {
+ execute(TC_GEONW_CAP_FPB_BV_01());
+ }
+
+ if(PICS_GN_GBC_FWD) {
+ execute(TC_GEONW_CAP_FPB_BV_02());
+ }
+
+ }
+
+} // End of module ItsGeoNetworking_TestControl
diff --git a/ItsGeoNetworking_TpFunctions.ttcn b/ItsGeoNetworking_TpFunctions.ttcn
new file mode 100644
index 0000000000000000000000000000000000000000..ccb186c0a2bfb1aa5f189d82c17dcb80fc145f19
--- /dev/null
+++ b/ItsGeoNetworking_TpFunctions.ttcn
@@ -0,0 +1,17107 @@
+/**
+ * @author ETSI / STF405 / STF449 / STF484 / STF525
+ * @version $Url: https://oldforge.etsi.org/svn/ITS/tags/20170222_STF527_Final/ttcn/AtsGeoNetworking/ItsGeoNetworking_TpFunctions.ttcn $
+ * $Id: ItsGeoNetworking_TpFunctions.ttcn,v 1.5 2019/08/05 15:18:56 dte Exp $
+ * @desc GeoNetworking TP Functions
+ * @copyright ETSI Copyright Notification
+ * No part may be reproduced except as authorized by written permission.
+ * The copyright and the foregoing restriction extend to reproduction in all media.
+ * All rights reserved.
+ *
+ */
+module ItsGeoNetworking_TpFunctions {
+
+ // Libcommon
+ import from LibCommon_BasicTypesAndValues all;
+ import from LibCommon_DataStrings all;
+ import from LibCommon_Time all;
+ import from LibCommon_VerdictControl all;
+ import from LibCommon_Sync all;
+
+ // LibItsCommon
+ import from LibItsCommon_Functions all;
+
+ // LibItsGeoNetworking
+ import from LibItsGeoNetworking_TestSystem all;
+ import from LibItsGeoNetworking_Functions all;
+ import from LibItsGeoNetworking_Templates all;
+ import from LibItsGeoNetworking_TypesAndValues all;
+ import from LibItsGeoNetworking_Pics all;
+ import from LibItsGeoNetworking_Pixits all;
+
+ // 6.2.1
+ group geoFormatingAndDataValidity {
+
+ // 6.2.1.1
+ group geoFdvBasicHeader {
+
+ /**
+ * @desc TP Function for TC_GEONW_FDV_BAH_BV_01
+ */
+ function f_GEONW_FDV_BAH_BV_01() runs on ItsGeoNetworking {
+
+ // Local variables
+
+ // Test control
+ if (not PICS_GN_BASIC_HEADER) {
+ log("*** " & testcasename() & ": PICS_GN_BASIC_HEADER required for executing the TC ***");
+ setverdict(inconc);
+ stop;
+ }
+
+ // Test component configuration
+ f_cf01Up();
+
+ // Test adapter configuration
+
+ // Preamble
+ f_prNeighbour();
+ f_selfOrClientSyncAndVerdict(c_prDone, e_success);
+
+ // Test Body
+ if(not f_utTriggerEvent(m_generateGeoBroadcastMessage(f_getArea(c_area1)))) {
+ log("*** " & testcasename() & ": INCONC: Trigger failed ***");
+ f_selfOrClientSyncAndVerdict(c_tbDone, e_timeout);
+ }
+ tc_ac.start;
+ alt {
+ [] geoNetworkingPort.receive(mw_geoNwInd(mw_geoNwPdu(mw_geoNwBroadcastPacket(?, ?), -, f_getDefaultHopLimit()))) {
+ tc_ac.stop;
+ log("*** " & testcasename() & ": PASS: Basic Header correctly formatted ***");
+ f_selfOrClientSyncAndVerdict(c_tbDone, e_success);
+ }
+ [] tc_ac.timeout {
+ log("*** " & testcasename() & ": INCONC: Expected message not received ***");
+ f_selfOrClientSyncAndVerdict(c_tbDone, e_timeout);
+ }
+ }
+
+ // Postamble
+ f_poNeighbour();
+ f_cf01Down();
+
+ } // End of function f_GEONW_FDV_BAH_BV_01
+
+ /**
+ * @desc TP Function for TC_GEONW_FDV_BAH_BI_02
+ */
+ function f_GEONW_FDV_BAH_BI_02() runs on ItsGeoNetworking {
+ // Local variables
+ var LongPosVector v_longPosVectorNodeB;
+ var template (value) GeoNetworkingPdu v_gnPacket;
+
+ // Test control
+ if (not PICS_GN_BASIC_HEADER) {
+ log("*** " & testcasename() & ": PICS_GN_BASIC_HEADER required for executing the TC ***");
+ setverdict(inconc);
+ stop;
+ }
+
+ // Test component configuration
+ f_cf01Up();
+ v_longPosVectorNodeB := f_getPosition(c_compNodeB);
+
+ // Test adapter configuration
+
+ // Preamble
+ f_prNeighbour();
+ v_gnPacket := m_geoNwPdu(m_geoNwShbPacket(v_longPosVectorNodeB));
+
+ f_sendGeoNetMessage(valueof(m_geoNwReq_linkLayerBroadcast(v_gnPacket)));
+
+ f_sleep(PX_TAC);
+
+ if(0 < lengthof(vc_utInds)) {
+ log("*** " & testcasename() & ": PASS: GN was transmitted to upper layer ***");
+ //flush received upper indications
+ 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.version := valueof(v_gnPacket.basicHeader.version) + 1;
+
+ f_sendGeoNetMessage(valueof(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 discarded and not transmitted to upper layer ***");
+ f_selfOrClientSyncAndVerdict(c_tbDone, e_success);
+ }
+
+ // Postamble
+ f_poNeighbour();
+ f_cf01Down();
+
+ } // End of function f_GEONW_FDV_BAH_BI_02
+
+ } // end geoFdvBasicHeader
+
+ // 6.2.1.2
+ group geoFdvCommonHeader {
+
+ /**
+ * @desc TP Function for TC_GEONW_FDV_COH_BV_01
+ */
+ function f_GEONW_FDV_COH_BV_01() runs on ItsGeoNetworking {
+
+ // Local variables
+ var LongPosVector v_longPosVectorIut;
+
+ // Test control
+ if (not PICS_GN_COMMON_HEADER) {
+ log("*** " & testcasename() & ": PICS_GN_COMMON_HEADER required for executing the TC ***");
+ setverdict(inconc);
+ stop;
+ }
+
+ // Test component configuration
+ f_cf01Up();
+ v_longPosVectorIut := f_getPosition(c_compIut);
+
+ // Test adapter configuration
+
+ // Preamble
+ f_prNeighbour();
+ f_acTriggerEvent(m_startPassBeaconing(m_beaconHeader(v_longPosVectorIut).beaconHeader));
+ f_selfOrClientSyncAndVerdict(c_prDone, e_success);
+
+ // Test Body
+ tc_ac.start;
+ alt {
+ [] geoNetworkingPort.receive(mw_geoNwInd(mw_geoNwPdu(mw_geoNwBeaconPacket(?)))) {
+ tc_ac.stop;
+ log("*** " & testcasename() & ": PASS: Common Header correclty formatted ***");
+ f_selfOrClientSyncAndVerdict(c_tbDone, e_success);
+ }
+ [] tc_ac.timeout {
+ log("*** " & testcasename() & ": INCONC: Expected message not received ***");
+ f_selfOrClientSyncAndVerdict(c_tbDone, e_timeout);
+ }
+ }
+
+ f_acTriggerEvent(m_stopPassBeaconing);
+
+ // Postamble
+ f_poNeighbour();
+ f_cf01Down();
+
+ } // End of function f_GEONW_FDV_COH_BV_01
+
+ /**
+ * @desc TP Function for TC_GEONW_FDV_COH_BV_02
+ */
+ function f_GEONW_FDV_COH_BV_02() runs on ItsGeoNetworking {
+
+ // Local variables
+ var GeoNetworkingInd v_geoNwInd;
+ var octetstring v_payload := char2oct("PAYLOAD");
+
+ // Test control
+ if (not PICS_GN_COMMON_HEADER) {
+ log("*** " & testcasename() & ": PICS_GN_COMMON_HEADER required for executing the TC ***");
+ setverdict(inconc);
+ stop;
+ }
+
+ // Test component configuration
+ f_cf01Up();
+
+ // Test adapter configuration
+
+ // Preamble
+ f_prNeighbour();
+ if ( not f_utTriggerEvent(m_generateShbMessageWithPayload(v_payload)) ) {
+ log("*** " & testcasename() & ": INCONC: Trigger failed ***");
+ f_selfOrClientSyncAndVerdict(c_prDone, e_timeout);
+ }
+ f_selfOrClientSyncAndVerdict(c_prDone, e_success);
+
+ // Test Body
+ tc_ac.start;
+ alt {
+ [] geoNetworkingPort.receive(mw_geoNwInd(mw_geoNwPdu(mw_geoNwShbPacket))) -> value v_geoNwInd {
+ tc_ac.stop;
+ if(ispresent(v_geoNwInd.msgIn.gnPacket.packet.payload)) {
+ if(v_geoNwInd.msgIn.gnPacket.packet.commonHeader.plLength == lengthof(v_geoNwInd.msgIn.gnPacket.packet.payload)) {
+ log("*** " & testcasename() & ": PASS: PL field correctly indicates payload size ***");
+ f_selfOrClientSyncAndVerdict(c_tbDone, e_success);
+ }
+ else {
+ log("*** " & testcasename() & ": FAIL: PL does correctly not indicate payload size ("
+ & int2str(v_geoNwInd.msgIn.gnPacket.packet.commonHeader.plLength)
+ & " != "
+ & int2str(lengthof(v_geoNwInd.msgIn.gnPacket.packet.payload))
+ & ")***");
+ f_selfOrClientSyncAndVerdict(c_tbDone, e_error);
+ }
+ }
+ else {
+ if(v_geoNwInd.msgIn.gnPacket.packet.commonHeader.plLength == 0) {
+ log("*** " & testcasename() & ": PASS: PL field correctly indicates empty payload ***");
+ f_selfOrClientSyncAndVerdict(c_tbDone, e_success);
+ }
+ else {
+ log("*** " & testcasename() & ": FAIL: PL does not indicate empty payload ***");
+ f_selfOrClientSyncAndVerdict(c_tbDone, e_error);
+ }
+ }
+ }
+ [] tc_ac.timeout {
+ log("*** " & testcasename() & ": INCONC: Expected message not received ***");
+ f_selfOrClientSyncAndVerdict(c_tbDone, e_timeout);
+ }
+ }
+
+ // Postamble
+ f_poNeighbour();
+ f_cf01Down();
+
+ } // End of function f_GEONW_FDV_COH_BV_02
+
+ /**
+ * @desc TP Function for TC_GEONW_FDV_COH_BV_03
+ */
+ function f_GEONW_FDV_COH_BV_03(
+ in template (present) UInt8 p_hopLimit := f_getDefaultHopLimit(),
+ in template (present) Bit8 p_flags := f_isMobile()
+ ) runs on ItsGeoNetworking {
+
+ // Local variables
+ var LongPosVector v_longPosVectorIut;
+
+ // Test control
+ if (not PICS_GN_COMMON_HEADER) {
+ log("*** " & testcasename() & ": PICS_GN_COMMON_HEADER required for executing the TC ***");
+ setverdict(inconc);
+ stop;
+ }
+
+ // Test component configuration
+ f_cf01Up();
+ v_longPosVectorIut := f_getPosition(c_compIut);
+
+ // Test adapter configuration
+
+ // Preamble
+ f_prNeighbour();
+ f_selfOrClientSyncAndVerdict(c_prDone, e_success);
+
+ // Test Body
+ if(not f_utTriggerEvent(m_generateGeoBroadcastMessage(f_getArea(c_area1)))) {
+ log("*** " & testcasename() & ": INCONC: Trigger failed ***");
+ f_selfOrClientSyncAndVerdict(c_tbDone, e_timeout);
+ }
+
+ tc_ac.start;
+ alt {
+
+ [] geoNetworkingPort.receive(mw_geoNwInd(mw_geoNwPdu(mw_geoNwBroadcastPacketWithHlAndFlags(mw_longPosVectorPosition(v_longPosVectorIut), ?, p_hopLimit, p_flags)))) {
+ tc_ac.stop;
+ log("*** " & testcasename() & ": PASS: Correct GeoNetworking Common Header received ***");
+ f_selfOrClientSyncAndVerdict(c_tbDone, e_success);
+ }
+ [] a_receiveGeoBroadcast(mw_longPosVectorPosition(v_longPosVectorIut), ?) {
+ tc_ac.stop;
+ log("*** " & testcasename() & ": FAIL: Incorrect GeoNetworking Common Header received ***");
+ f_selfOrClientSyncAndVerdict(c_tbDone, e_error);
+ }
+
+ [] tc_ac.timeout {
+ log("*** " & testcasename() & ": INCONC: Expected message not received ***");
+ f_selfOrClientSyncAndVerdict(c_tbDone, e_timeout);
+ }
+ }
+
+ // Postamble
+ f_poNeighbour();
+ f_cf01Down();
+
+ } // End of function f_GEONW_FDV_COH_BV_03
+
+ group GEONW_FDV_COH_BO_04 {
+
+ /**
+ * @desc TP Function for TC_GEONW_FDV_COH_BO_04
+ */
+ function f_GEONW_FDV_COH_BO_04() runs on ItsMtc {
+
+ // Local variables
+ var ItsGeoNetworking v_nodeB;
+ var ItsGeoNetworking v_nodeD;
+
+ // Test control
+ if (not PICS_GN_COMMON_HEADER) {
+ log("*** " & testcasename() & ": PICS_GN_COMMON_HEADER 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_FDV_COH_BO_04_nodeB());
+ v_nodeD.start(f_GEONW_FDV_COH_BO_04_nodeD());
+
+ // Synchronization
+ f_serverSync2ClientsAndStop({c_prDone, c_tbDone});
+
+ // Cleanup
+ f_cf02Down();
+
+ } // End of function f_GEONW_FDV_COH_BV_04
+
+ /**
+ * @desc Behavior function for NodeB (TC_GEONW_FDV_COH_BV_04)
+ */
+ function f_GEONW_FDV_COH_BO_04_nodeB() runs on ItsGeoNetworking {
+
+ // Local variables
+ var LongPosVector v_longPosVectorNodeB := f_getPosition(c_compNodeB);
+ var UInt8 v_hopLimit := f_getDefaultHopLimit();
+
+ // Preamble
+ f_prNeighbour();
+ f_selfOrClientSyncAndVerdict(c_prDone, e_success);
+
+ // Test Body
+ f_sendGeoNetMessage(
+ valueof(m_geoNwReq_linkLayerBroadcast(
+ m_geoNwPdu(
+ m_geoNwTsbPacket(
+ vc_localSeqNumber,
+ v_longPosVectorNodeB,
+ v_hopLimit-1
+ ),
+ -,
+ v_hopLimit
+ )
+ )
+ ));
+
+ tc_noac.start;
+ alt {
+ [] geoNetworkingPort.receive(
+ mw_geoNwInd(
+ mw_geoNwPdu(
+ mw_geoNwTsbPacket(
+ ?,
+ mw_longPosVectorPosition(v_longPosVectorNodeB)
+ )
+ )
+ )
+ ) {
+ tc_noac.stop;
+ log("*** " & testcasename() & ": FAIL: TSB packet was not discarded ***");
+ f_selfOrClientSyncAndVerdict(c_tbDone, e_error);
+ }
+ [] tc_noac.timeout {
+ log("*** " & testcasename() & ": PASS: TSB was correctly discarded ***");
+ f_selfOrClientSyncAndVerdict(c_tbDone, e_success);
+ }
+ }
+
+ // Postamble
+ f_poNeighbour();
+
+ } // End of function f_GEONW_FDV_COH_BO_04_nodeB
+
+ /**
+ * @desc Behavior function for NodeD (TC_GEONW_FDV_COH_BV_04)
+ */
+ function f_GEONW_FDV_COH_BO_04_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 {
+ [] geoNetworkingPort.receive(
+ mw_geoNwInd(
+ mw_geoNwPdu(
+ mw_geoNwTsbPacket(
+ ?,
+ mw_longPosVectorPosition(v_longPosVectorNodeB)
+ )
+ )
+ )
+ ) {
+ tc_noac.stop;
+ log("*** " & testcasename() & ": FAIL: TSB packet was not discarded ***");
+ f_selfOrClientSyncAndVerdict(c_tbDone, e_error);
+ }
+ [] tc_noac.timeout {
+ log("*** " & testcasename() & ": PASS: TSB was correctly discarded ***");
+ f_selfOrClientSyncAndVerdict(c_tbDone, e_success);
+ }
+ }
+
+ // Postamble
+ f_poNeighbour();
+
+ } // End of function f_GEONW_FDV_COH_BO_04_nodeD
+
+ } // end GEONW_FDV_COH_BO_04
+
+ } // end geoFdvCommonHeader
+
+ // 6.2.1.3
+ group geoFdvBeacon {
+
+ /**
+ * @desc TP Function for TC_GEONW_FDV_BEA_BV_01
+ */
+ function f_GEONW_FDV_BEA_BV_01() runs on ItsGeoNetworking {
+
+ // Local variables
+ var LongPosVector v_longPosVectorIut;
+
+ // Test control
+ if (not PICS_GN_BEACON_SRC) {
+ log("*** " & testcasename() & ": PICS_GN_BEACON_SRC required for executing the TC ***");
+ setverdict(inconc);
+ stop;
+ }
+
+ // Test component configuration
+ f_cf01Up();
+ v_longPosVectorIut := f_getPosition(c_compIut);
+
+ // Test adapter configuration
+
+ // Preamble
+ f_prNeighbour();
+ f_acTriggerEvent(m_startPassBeaconing(m_beaconHeader(v_longPosVectorIut).beaconHeader));
+ f_selfOrClientSyncAndVerdict(c_prDone, e_success);
+
+ // Test Body
+ tc_ac.start;
+ alt {
+ [] geoNetworkingPort.receive(mw_geoNwInd(mw_geoNwPdu(mw_geoNwBeaconPacket(mw_longPosVectorPosition(v_longPosVectorIut), e_any)))) {
+ tc_ac.stop;
+ log("*** " & testcasename() & ": PASS: Common Header correclty formatted ***");
+ f_selfOrClientSyncAndVerdict(c_tbDone, e_success);
+ }
+ [] tc_ac.timeout {
+ log("*** " & testcasename() & ": INCONC: Expected message not received ***");
+ f_selfOrClientSyncAndVerdict(c_tbDone, e_timeout);
+ }
+ }
+
+ // Postamble
+ f_poNeighbour();
+ f_cf01Down();
+
+ } // End of function f_GEONW_FDV_BEA_BV_01
+
+ /**
+ * @desc TP Function for TC_GEONW_FDV_BEA_BV_02
+ */
+ function f_GEONW_FDV_BEA_BV_02() runs on ItsGeoNetworking {
+
+ // Local variables
+ var LongPosVector v_longPosVectorIut;
+
+ // Test control
+ if (not PICS_GN_BEACON_SRC) {
+ log("*** " & testcasename() & ": PICS_GN_BEACON_SRC required for executing the TC ***");
+ setverdict(inconc);
+ stop;
+ }
+
+ // Test component configuration
+ f_cf01Up();
+ v_longPosVectorIut := f_getPosition(c_compIut);
+
+ // Test adapter configuration
+
+ // Preamble
+ f_prNeighbour();
+ f_acTriggerEvent(m_startPassBeaconing(m_beaconHeader(v_longPosVectorIut).beaconHeader));
+ f_selfOrClientSyncAndVerdict(c_prDone, e_success);
+
+ // Test Body
+ tc_ac.start;
+ alt {
+ [] geoNetworkingPort.receive(mw_geoNwInd(mw_geoNwPdu(mw_geoNwBeaconPacket(
+ mw_longPosVectorAny(f_getIutGnLocalAddress()))))) {
+ tc_ac.stop;
+ log("*** " & testcasename() & ": PASS: GN address correctly received ***");
+ f_selfOrClientSyncAndVerdict(c_tbDone, e_success);
+ }
+ [] tc_ac.timeout {
+ log("*** " & testcasename() & ": INCONC: Expected message not received ***");
+ f_selfOrClientSyncAndVerdict(c_tbDone, e_timeout);
+ }
+ }
+
+ // Postamble
+ f_poNeighbour();
+ f_cf01Down();
+
+ } // End of function f_GEONW_FDV_BEA_BV_02
+
+ /**
+ * @desc TP Function for TC_GEONW_FDV_BEA_BV_03
+ */
+ function f_GEONW_FDV_BEA_BV_03() runs on ItsGeoNetworking {
+
+ // Local variables
+ var LongPosVector v_longPosVectorIut;
+
+ // Test control
+ if (not PICS_GN_BEACON_SRC) {
+ log("*** " & testcasename() & ": PICS_GN_BEACON_SRC required for executing the TC ***");
+ setverdict(inconc);
+ stop;
+ }
+
+ // Test component configuration
+ f_cf01Up();
+ v_longPosVectorIut := f_getPosition(c_compIut);
+
+ // Test adapter configuration
+
+ // Preamble
+ f_prNeighbour();
+ f_acTriggerEvent(m_startPassBeaconing(m_beaconHeader(v_longPosVectorIut).beaconHeader));
+ f_selfOrClientSyncAndVerdict(c_prDone, e_success);
+
+ // Test Body
+ tc_ac.start;
+ alt {
+ [] geoNetworkingPort.receive(mw_geoNwInd(mw_geoNwPdu(mw_geoNwBeaconPacket(mw_longPosVectorPosition(v_longPosVectorIut))))) {
+ tc_ac.stop;
+ log("*** " & testcasename() & ": PASS: Position equaling GN-MNGT primitive value received ***");
+ f_selfOrClientSyncAndVerdict(c_tbDone, e_success);
+ }
+ [] tc_ac.timeout {
+ log("*** " & testcasename() & ": INCONC: Expected message not received ***");
+ f_selfOrClientSyncAndVerdict(c_tbDone, e_timeout);
+ }
+ }
+
+ // Postamble
+ f_poNeighbour();
+ f_cf01Down();
+
+ } // End of function f_GEONW_FDV_BEA_BV_03
+
+ /**
+ * @desc TP Function for TC_GEONW_FDV_BEA_BV_04
+ */
+ function f_GEONW_FDV_BEA_BV_04() runs on ItsGeoNetworking {
+
+ // Local variables
+ var LongPosVector v_longPosVectorIut;
+
+ // Test control
+ if (not PICS_GN_BEACON_SRC) {
+ log("*** " & testcasename() & ": PICS_GN_BEACON_SRC required for executing the TC ***");
+ setverdict(inconc);
+ stop;
+ }
+
+ // Test component configuration
+ f_cf01Up();
+ v_longPosVectorIut := f_getPosition(c_compIut);
+
+ // Test adapter configuration
+
+ // Preamble
+ f_prNeighbour();
+ f_acTriggerEvent(m_startPassBeaconing(m_beaconHeader(v_longPosVectorIut).beaconHeader));
+ f_selfOrClientSyncAndVerdict(c_prDone, e_success);
+
+ // Test Body
+ tc_ac.start;
+ alt {
+ [] geoNetworkingPort.receive(mw_geoNwInd(mw_geoNwPdu(mw_geoNwBeaconPacket(mw_longPosVectorPosition(v_longPosVectorIut))))) {
+ tc_ac.stop;
+ log("*** " & testcasename() & ": PASS: Timestamp equaling GN-MNGT primitive value received ***");
+ f_selfOrClientSyncAndVerdict(c_tbDone, e_success);
+ }
+ [] tc_ac.timeout {
+ log("*** " & testcasename() & ": INCONC: Expected message not received ***");
+ f_selfOrClientSyncAndVerdict(c_tbDone, e_timeout);
+ }
+ }
+
+ // Postamble
+ f_poNeighbour();
+ f_cf01Down();
+
+ } // End of function f_GEONW_FDV_BEA_BV_04
+
+ } // end geoFdvBeacon
+
+ // 6.2.1.4
+ group geoFdvGeoUnicast {
+
+ /**
+ * @desc TP Function for TC_GEONW_FDV_GUC_BV_01
+ */
+ function f_GEONW_FDV_GUC_BV_01() runs on ItsGeoNetworking {
+
+ // Local variables
+ var LongPosVector v_longPosVectorNodeB;
+ var LongPosVector v_longPosVectorIut;
+
+ // Test control
+ if (not PICS_GN_GUC_SRC) {
+ log("*** " & testcasename() & ": PICS_GN_GUC_SRC required for executing the TC ***");
+ setverdict(inconc);
+ stop;
+ }
+
+ // Test component configuration
+ f_cf01Up();
+
+ // Test adapter configuration
+
+ // Preamble
+ v_longPosVectorNodeB := f_getPosition(c_compNodeB);
+ v_longPosVectorIut := f_getPosition(c_compIut);
+ f_prNeighbour();
+ f_selfOrClientSyncAndVerdict(c_prDone, e_success);
+
+ // Test Body
+ if ( not f_utTriggerEvent(m_generateGeoUnicastMessage(v_longPosVectorNodeB.gnAddr)) ) {
+ log("*** " & testcasename() & ": INCONC: Trigger failed ***");
+ f_selfOrClientSyncAndVerdict(c_tbDone, e_timeout);
+ }
+
+ tc_ac.start;
+ alt {
+ [] geoNetworkingPort.receive(
+ mw_geoNwInd(
+ mw_geoNwPdu(
+ mw_geoNwUnicastPacketWithSourcePv(
+ mw_shortPosVectorPosition(f_longPosVector2ShortPosVector(v_longPosVectorNodeB)), // DEPV
+ ?, // sequence number
+ mw_longPosVectorPosition(v_longPosVectorIut) //SOPV
+ )
+ )
+ )
+ ) {
+ tc_ac.stop;
+
+ log("*** " & testcasename() & ": PASS: Fields of the received GUC message correctly set ***");
+ f_selfOrClientSyncAndVerdict(c_tbDone, e_success);
+ }
+ [] tc_ac.timeout {
+ log("*** " & testcasename() & ": INCONC: GUC message not received ***");
+ f_selfOrClientSyncAndVerdict(c_tbDone, e_timeout);
+ }
+ }
+
+ // Postamble
+ f_poNeighbour();
+ f_cf01Down();
+
+ } // End of function f_GEONW_FDV_GUC_BV_01
+
+ } // end geoFdvGeoUnicast
+
+ // 6.2.1.5
+ group geoFdvGeoBroadcast {
+
+ /**
+ * @desc TP Function for TC_GEONW_FDV_GBC_BV_01
+ */
+ function f_GEONW_FDV_GBC_BV_01() runs on ItsGeoNetworking {
+
+ // Local variables
+ var LongPosVector v_longPosVectorNodeB;
+ var LongPosVector v_longPosVectorIut;
+ var octetstring v_payload := char2oct("PAYLOAD");
+
+ // Test control
+ if (not PICS_GN_GBC_SRC) {
+ log("*** " & testcasename() & ": PICS_GN_GBC_SRC required for executing the TC ***");
+ setverdict(inconc);
+ stop;
+ }
+
+ // Test component configuration
+ f_cf01Up();
+
+ // Test adapter configuration
+
+ // Preamble
+ v_longPosVectorIut := f_getPosition(c_compIut);
+ f_prNeighbour();
+ f_selfOrClientSyncAndVerdict(c_prDone, e_success);
+
+ // Test Body
+ if ( not f_utTriggerEvent(m_generateGeoBroadcastMessageWithPayload(f_getArea(c_area1), v_payload)) ) {
+ log("*** " & testcasename() & ": INCONC: Trigger failed ***");
+ f_selfOrClientSyncAndVerdict(c_tbDone, e_timeout);
+ }
+ tc_ac.start;
+ alt {
+ [] geoNetworkingPort.receive(
+ f_receiveGeoNetMessageWithPayload(
+ mw_geoNwInd(
+ mw_geoNwPdu(
+ mw_geoNwBroadcastPacket(
+ mw_longPosVectorPosition(v_longPosVectorIut), // SOPV
+ ? // sequence number
+ )
+ )
+ ),
+ ?
+ )
+ ) {
+ tc_ac.stop;
+ log("*** " & testcasename() & ": PASS: Fields of the received GBC message correctly set ***");
+ f_selfOrClientSyncAndVerdict(c_tbDone, e_success);
+ }
+ [] tc_ac.timeout {
+ log("*** " & testcasename() & ": FAIL: GBC message not received ***");
+ f_selfOrClientSyncAndVerdict(c_tbDone, e_timeout);
+ }
+ }
+
+ // Postamble
+ f_poNeighbour();
+ f_cf01Down();
+
+ } // End of function f_GEONW_FDV_GBC_BV_01
+
+ } // end geoFdvGeoBroadcast
+
+ // 6.2.1.6
+ group geoFdvGeoAnycast {
+
+ /**
+ * @desc TP Function for TC_GEONW_FDV_GAC_BV_01
+ */
+ function f_GEONW_FDV_GAC_BV_01() runs on ItsGeoNetworking {
+
+ // Local variables
+ var LongPosVector v_longPosVectorIut;
+ var octetstring v_payload := char2oct("PAYLOAD");
+
+ // 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_cf01Up();
+
+ // Test adapter configuration
+
+ // Preamble
+ v_longPosVectorIut := f_getPosition(c_compIut);
+ f_prNeighbour();
+ f_selfOrClientSyncAndVerdict(c_prDone, e_success);
+
+ // Test Body
+ if ( not f_utTriggerEvent(m_generateGeoAnycastMessageWithPayload(f_getArea(c_area1), v_payload)) ) {
+ log("*** " & testcasename() & ": INCONC: Trigger failed ***");
+ f_selfOrClientSyncAndVerdict(c_tbDone, e_timeout);
+ }
+ tc_ac.start;
+ alt {
+ [] geoNetworkingPort.receive(
+ f_receiveGeoNetMessageWithPayload(
+ mw_geoNwInd(
+ mw_geoNwPdu(
+ mw_geoNwAnycastPacket(
+ mw_longPosVectorPosition(v_longPosVectorIut), // SOPV
+ ? // sequence number
+ )
+ )
+ ),
+ ?
+ )
+ ) {
+ tc_ac.stop;
+ log("*** " & testcasename() & ": PASS: Fields of the received GAC message correctly set ***");
+ f_selfOrClientSyncAndVerdict(c_tbDone, e_success);
+ }
+ [] tc_ac.timeout {
+ log("*** " & testcasename() & ": INCONC: GAC message not received ***");
+ f_selfOrClientSyncAndVerdict(c_tbDone, e_timeout);
+ }
+ }
+
+ // Postamble
+ f_poNeighbour();
+ f_cf01Down();
+
+ } // End of function f_GEONW_FDV_GAC_BV_01
+
+ } // end geoFdvGeoAnycast
+
+ // 6.2.1.7
+ group geoFdvSingleHopBroadcast {
+
+ /**
+ * @desc TP Function for TC_GEONW_FDV_SHB_BV_01
+ */
+ function f_GEONW_FDV_SHB_BV_01() runs on ItsGeoNetworking {
+
+ // Local variables
+ var LongPosVector v_longPosVectorIut;
+
+ // Test control
+ if (not PICS_GN_SHB_SRC) {
+ log("*** " & testcasename() & ": PICS_GN_SHB_SRC required for executing the TC ***");
+ setverdict(inconc);
+ stop;
+ }
+
+ // Test component configuration
+ f_cf01Up();
+
+ // Test adapter configuration
+
+ // Preamble
+ v_longPosVectorIut := f_getPosition(c_compIut);
+ f_prNeighbour();
+ f_selfOrClientSyncAndVerdict(c_prDone, e_success);
+
+ // Test Body
+ if ( not f_utTriggerEvent(m_generateShbMessage) ) {
+ log("*** " & testcasename() & ": INCONC: Trigger failed ***");
+ f_selfOrClientSyncAndVerdict(c_tbDone, e_timeout);
+ }
+ tc_ac.start;
+ alt {
+ [] geoNetworkingPort.receive(
+ mw_geoNwInd(
+ mw_geoNwPdu(
+ mw_geoNwShbPacket(
+ mw_longPosVectorPosition(v_longPosVectorIut), // SOPV
+ 1 //MHL
+ )
+ )
+ )
+ ) {
+ tc_ac.stop;
+ log("*** " & testcasename() & ": PASS: Fields of the received SHB message correctly set ***");
+ f_selfOrClientSyncAndVerdict(c_tbDone, e_success);
+ }
+ [] tc_ac.timeout {
+ log("*** " & testcasename() & ": INCONC: SHB message not received ***");
+ f_selfOrClientSyncAndVerdict(c_tbDone, e_timeout);
+ }
+ }
+
+ // Postamble
+ f_poNeighbour();
+ f_cf01Down();
+
+ } // End of function f_GEONW_FDV_SHB_BV_01
+
+ } // end geoFdvSingleHopBroadcast
+
+ // 6.2.1.8
+ group geoFdvTopologicallyScopedBroadcast {
+
+ /**
+ * @desc TP Function for TC_GEONW_FDV_TSB_BV_01
+ */
+ function f_GEONW_FDV_TSB_BV_01() runs on ItsGeoNetworking {
+
+ // Local variables
+ var LongPosVector v_longPosVectorIut;
+
+ // Test control
+ if (not PICS_GN_TSB_SRC) {
+ log("*** " & testcasename() & ": PICS_GN_TSB_SRC required for executing the TC ***");
+ setverdict(inconc);
+ stop;
+ }
+
+ // Test component configuration
+ f_cf01Up();
+
+ // Test adapter configuration
+
+ // Preamble
+ v_longPosVectorIut := f_getPosition(c_compIut);
+ f_prNeighbour();
+ f_selfOrClientSyncAndVerdict(c_prDone, e_success);
+
+ // Test Body
+ if ( not f_utTriggerEvent(m_generateTsbMessage) ) {
+ log("*** " & testcasename() & ": INCONC: Trigger failed ***");
+ f_selfOrClientSyncAndVerdict(c_tbDone, e_timeout);
+ }
+ tc_ac.start;
+ alt {
+ [] geoNetworkingPort.receive(
+ mw_geoNwInd(
+ mw_geoNwPdu(
+ mw_geoNwTsbPacket(
+ ?, // sequence number
+ mw_longPosVectorPosition(v_longPosVectorIut) // SOPV
+ )
+ )
+ )
+ ) {
+ tc_ac.stop;
+ log("*** " & testcasename() & ": PASS: message received with correct common and extended headers ***");
+ f_selfOrClientSyncAndVerdict(c_tbDone, e_success);
+ }
+ [] tc_ac.timeout {
+ log("*** " & testcasename() & ": INCONC: TSB message not received ***");
+ f_selfOrClientSyncAndVerdict(c_tbDone, e_timeout);
+ }
+ }
+
+ // Postamble
+ f_poNeighbour();
+ f_cf01Down();
+
+ } // End of function f_GEONW_FDV_TSB_BV_01
+
+ } // end geoFdvTopologicallyScopedBroadcast
+
+ } // end geoFormatingAndDataValidity
+
+ // 6.2.2
+ group geoProtocolOperation {
+
+ // 6.2.2.1
+ group geoLocationTable {
+
+ /**
+ * @desc TP Function for TC_GEONW_PON_LOT_BV_01
+ */
+ function f_GEONW_PON_LOT_BV_01() runs on ItsGeoNetworking {
+
+ // Local variables
+ var LongPosVector v_longPosVectorNodeB;
+
+ // Test control
+ if (not PICS_GN_GUC_SRC or not PICS_GN_BEACON_DST) {
+ log("*** " & testcasename() & ": PICS_GN_GUC_SRC and PICS_GN_BEACON_DST required for executing the TC ***");
+ setverdict(inconc);
+ stop;
+ }
+
+ // Test component configuration
+ f_cf01Up();
+ v_longPosVectorNodeB := f_getPosition(c_compNodeB);
+
+ // Test adapter configuration
+
+ // Preamble
+ f_prNeighbour();
+ f_selfOrClientSyncAndVerdict(c_prDone, e_success);
+
+ // Test Body
+ if ( not f_utTriggerEvent(m_generateGeoUnicastMessage(v_longPosVectorNodeB.gnAddr)) ) {
+ log("*** " & testcasename() & ": INCONC: Trigger failed ***");
+ f_selfOrClientSyncAndVerdict(c_tbDone, e_timeout);
+ }
+
+ tc_ac.start;
+ alt {
+ [] a_receiveGeoUnicastWithDestination(mw_shortPosVectorPosition(f_longPosVector2ShortPosVector(v_longPosVectorNodeB))) {
+ tc_ac.stop;
+ log("*** " & testcasename() & ": PASS: GUC packet received correctly ***");
+ f_selfOrClientSyncAndVerdict(c_tbDone, e_success);
+ }
+ [] a_receiveGeoUnicastWithDestination(?) {
+ tc_ac.stop;
+ log("*** " & testcasename() & ": FAIL: GUC packet has some inconsistence ***");
+ f_selfOrClientSyncAndVerdict(c_tbDone, e_error);
+ }
+ [] a_receiveAnyLsRequest() {
+ tc_ac.stop;
+ log("*** " & testcasename() & ": FAIL: Received Location Service Request ***");
+ f_selfOrClientSyncAndVerdict(c_tbDone, e_error);
+ }
+ [] tc_ac.timeout {
+ log("*** " & testcasename() & ": TIMEOUT: Expected message not received ***");
+ f_selfOrClientSyncAndVerdict(c_tbDone, e_timeout);
+ }
+ }
+
+ // Postamble
+ f_poNeighbour();
+ f_cf01Down();
+
+ } // End of function f_GEONW_PON_LOT_BV_01
+
+ /**
+ * @desc TP Function for TC_GEONW_PON_LOT_BV_02
+ */
+ function f_GEONW_PON_LOT_BV_02() runs on ItsGeoNetworking {
+
+ // Local variables
+ var LongPosVector v_longPosVectorNodeA;
+ var LongPosVector v_longPosVectorNodeB;
+ var LongPosVector v_longPosVectorIut;
+ var GN_Address v_gnAddressNodeA;
+ var boolean v_lsRequestReceived := false;
+
+ // Test control
+ if (not PICS_GN_LS_REQ_SRC or not PICS_GN_LS_REP_DST) {
+ log("*** " & testcasename() & ": PICS_GN_LS_REQ_SRC AND PICS_GN_LS_REP_DST required for executing the TC ***");
+ setverdict(inconc);
+ stop;
+ }
+
+ // Test component configuration
+ f_cf01Up();
+ v_longPosVectorNodeA := f_getPosition(c_compNodeA);
+ v_gnAddressNodeA := v_longPosVectorNodeA.gnAddr;
+
+ // Test adapter configuration
+
+ // Preamble
+ f_prNeighbour();
+
+ 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_receiveLsRequestAndReply(
+ ?, v_gnAddressNodeA.mid,
+ v_longPosVectorNodeA
+ ) {
+ v_lsRequestReceived := true;
+ log("*** " & testcasename() & ": Pre-conditions: Received and answered Location Service Request ***");
+ repeat;
+ }
+ [] a_receiveGeoUnicastWithDestination(mw_shortPosVectorPosition(f_longPosVector2ShortPosVector(v_longPosVectorNodeA))) {
+ tc_ac.stop;
+ if(v_lsRequestReceived == true) {
+ log("*** " & testcasename() & ": Pre-conditions: First GUC message received correctly ***");
+ }
+ else {
+ log("*** " & testcasename() & ": Pre-conditions: GUC packet received without LS Request ***");
+ f_selfOrClientSyncAndVerdict(c_prDone, e_error);
+ }
+ }
+ [] tc_ac.timeout {
+ log("*** " & testcasename() & ": Pre-conditions: Initial conditions not satisfied. ***");
+ f_selfOrClientSyncAndVerdict(c_prDone, e_timeout);
+ }
+ }
+ f_selfOrClientSyncAndVerdict(c_prDone, e_success);
+
+ // Test Body
+ if ( not f_utTriggerEvent(m_generateGeoUnicastMessage(v_longPosVectorNodeA.gnAddr)) ) {
+ log("*** " & testcasename() & ": INCONC: Trigger failed ***");
+ f_selfOrClientSyncAndVerdict(c_tbDone, e_timeout);
+ }
+ tc_ac.start;
+ alt {
+ [] a_receiveLsRequest(?, v_gnAddressNodeA.mid, v_longPosVectorIut) {
+ tc_ac.stop;
+ log("*** " & testcasename() & ": FAIL: Received Location Service Request ***");
+ f_selfOrClientSyncAndVerdict(c_tbDone, e_error);
+ }
+ [] a_receiveGeoUnicastWithDestination(mw_shortPosVectorPosition(f_longPosVector2ShortPosVector(v_longPosVectorNodeA))) {
+ tc_ac.stop;
+ log("*** " & testcasename() & ": PASS: Received second GUC packet without LS Request ***");
+ f_selfOrClientSyncAndVerdict(c_tbDone, e_success);
+
+ }
+ [] tc_ac.timeout {
+ log("*** " & testcasename() & ": INCONC: Expected message not received ***");
+ f_selfOrClientSyncAndVerdict(c_tbDone, e_timeout);
+ }
+ }
+
+ // Postamble
+ f_poNeighbour();
+ f_cf01Down();
+
+ } // End of function f_GEONW_PON_LOT_BV_02
+
+ group GEONW_PON_LOT_BV_03 {
+
+ /**
+ * @desc TP Function for TC_GEONW_PON_LOT_BV_03_01
+ */
+ function f_GEONW_PON_LOT_BV_03_01() runs on ItsGeoNetworking {
+
+ // Local variables
+ var LongPosVector v_longPosVectorNode := f_TP_GEONW_PON_LOT_BV_03_pre_1(c_compNodeB);
+
+ // Test control
+ if (not PICS_GN_BEACON_DST) {
+ log("*** " & testcasename() & ": PICS_GN_BEACON_DST required for executing the TC ***");
+ setverdict(inconc);
+ stop;
+ }
+
+ f_TP_GEONW_PON_LOT_BV_03_pre_2(
+ m_geoNwBeaconPacket(
+ v_longPosVectorNode
+ )
+ );
+
+ f_TP_GEONW_PON_LOT_BV_03_main(v_longPosVectorNode);
+
+ } // End of function f_GEONW_PON_LOT_BV_03_01
+
+ /**
+ * @desc TP Function for TC_GEONW_PON_LOT_BV_03_02
+ */
+ function f_GEONW_PON_LOT_BV_03_02() runs on ItsGeoNetworking {
+
+ // Local variables
+ var LongPosVector v_longPosVectorNode := f_TP_GEONW_PON_LOT_BV_03_pre_1(c_compNodeA);
+
+ // Test control
+ if (not PICS_GN_GUC_DST) {
+ log("*** " & testcasename() & ": PICS_GN_GUC_DST required for executing the TC ***");
+ setverdict(inconc);
+ stop;
+ }
+
+ f_TP_GEONW_PON_LOT_BV_03_pre_2(
+ m_geoNwUnicastPacket(
+ v_longPosVectorNode,
+ f_getIutShortPosVector(),
+ vc_localSeqNumber
+ )
+ );
+
+ f_TP_GEONW_PON_LOT_BV_03_main(v_longPosVectorNode);
+
+ } // End of function f_GEONW_PON_LOT_BV_03_02
+
+ /**
+ * @desc TP Function for TC_GEONW_PON_LOT_BV_03_03
+ */
+ function f_GEONW_PON_LOT_BV_03_03() runs on ItsGeoNetworking {
+
+ // Local variables
+ var LongPosVector v_longPosVectorNode := f_TP_GEONW_PON_LOT_BV_03_pre_1(c_compNodeA);
+
+ // Test control
+ if (not PICS_GN_GAC_DST) {
+ log("*** " & testcasename() & ": PICS_GN_GAC_DST required for executing the TC ***");
+ setverdict(inconc);
+ stop;
+ }
+
+ f_TP_GEONW_PON_LOT_BV_03_pre_2(
+ m_geoNwAnycastPacket(
+ v_longPosVectorNode,
+ vc_localSeqNumber,
+ f_getGeoAnycastArea(c_area1)
+ )
+ );
+
+ f_TP_GEONW_PON_LOT_BV_03_main(v_longPosVectorNode);
+
+ } // End of function f_GEONW_PON_LOT_BV_03_03
+
+ /**
+ * @desc TP Function for TC_GEONW_PON_LOT_BV_03_04
+ */
+ function f_GEONW_PON_LOT_BV_03_04() runs on ItsGeoNetworking {
+
+ // Local variables
+ var LongPosVector v_longPosVectorNode := f_TP_GEONW_PON_LOT_BV_03_pre_1(c_compNodeA);
+
+ // Test control
+ if (not PICS_GN_GBC_DST) {
+ log("*** " & testcasename() & ": PICS_GN_GBC_DST required for executing the TC ***");
+ setverdict(inconc);
+ stop;
+ }
+
+ f_TP_GEONW_PON_LOT_BV_03_pre_2(
+ m_geoNwBroadcastPacket(
+ v_longPosVectorNode,
+ vc_localSeqNumber,
+ f_getGeoBroadcastArea(c_area1)
+ )
+ );
+
+ f_TP_GEONW_PON_LOT_BV_03_main(v_longPosVectorNode);
+
+ } // End of function f_GEONW_PON_LOT_BV_03_04
+
+ /**
+ * @desc TP Function for TC_GEONW_PON_LOT_BV_03_05
+ */
+ function f_GEONW_PON_LOT_BV_03_05() runs on ItsGeoNetworking {
+
+ // Local variables
+ var LongPosVector v_longPosVectorNode := f_TP_GEONW_PON_LOT_BV_03_pre_1(c_compNodeA);
+
+ // Test control
+ if (not PICS_GN_TSB_DST) {
+ log("*** " & testcasename() & ": PICS_GN_TSB_DST required for executing the TC ***");
+ setverdict(inconc);
+ stop;
+ }
+
+ f_TP_GEONW_PON_LOT_BV_03_pre_2(
+ m_geoNwTsbPacket(
+ vc_localSeqNumber,
+ v_longPosVectorNode
+ )
+ );
+
+ f_TP_GEONW_PON_LOT_BV_03_main(v_longPosVectorNode);
+
+ } // End of function f_GEONW_PON_LOT_BV_03_05
+
+ /**
+ * @desc TP Function for TC_GEONW_PON_LOT_BV_03_06
+ */
+ function f_GEONW_PON_LOT_BV_03_06() runs on ItsGeoNetworking {
+
+ // Local variables
+ var LongPosVector v_longPosVectorNode := f_TP_GEONW_PON_LOT_BV_03_pre_1(c_compNodeB);
+
+ // Test control
+ if (not PICS_GN_SHB_DST) {
+ log("*** " & testcasename() & ": PICS_GN_SHB_DST required for executing the TC ***");
+ setverdict(inconc);
+ stop;
+ }
+
+ f_TP_GEONW_PON_LOT_BV_03_pre_2(
+ m_geoNwShbPacket(
+ v_longPosVectorNode
+ )
+ );
+
+ f_TP_GEONW_PON_LOT_BV_03_main(v_longPosVectorNode);
+
+ } // End of function f_GEONW_PON_LOT_BV_03_06
+
+ /**
+ * @desc TP Function for TC_GEONW_PON_LOT_BV_03_07
+ */
+ function f_GEONW_PON_LOT_BV_03_07() runs on ItsGeoNetworking {
+
+ // Local variables
+ var LongPosVector v_longPosVectorNode := f_TP_GEONW_PON_LOT_BV_03_pre_1(c_compNodeA);
+
+ // Test control
+ if (not PICS_GN_LS_REQ_DST) {
+ log("*** " & testcasename() & ": PICS_GN_LS_REQ_DST required for executing the TC ***");
+ setverdict(inconc);
+ stop;
+ }
+
+ activate(a_receiveAnyLsReply());
+
+ f_TP_GEONW_PON_LOT_BV_03_pre_2(
+ m_geoNwLsRequestPacket(
+ v_longPosVectorNode,
+ vc_localSeqNumber,
+ f_getIutGnLocalAddress()
+ )
+ );
+
+ f_TP_GEONW_PON_LOT_BV_03_main(v_longPosVectorNode);
+
+ } // End of function f_GEONW_PON_LOT_BV_03_07
+
+ /**
+ * @desc TP Function for TC_GEONW_PON_LOT_BV_03_08
+ */
+ function f_GEONW_PON_LOT_BV_03_08() runs on ItsGeoNetworking {
+
+ // Local variables
+ var LongPosVector v_longPosVectorNode := f_TP_GEONW_PON_LOT_BV_03_pre_1(c_compNodeA);
+
+ // Test control
+ if (not PICS_GN_LS_REP_DST) {
+ log("*** " & testcasename() & ": PICS_GN_LS_REP_DST required for executing the TC ***");
+ setverdict(inconc);
+ stop;
+ }
+
+ f_TP_GEONW_PON_LOT_BV_03_pre_2(
+ m_geoNwLsReplyPacket(
+ v_longPosVectorNode,
+ f_getIutShortPosVector(),
+ vc_localSeqNumber
+ )
+ );
+
+ f_TP_GEONW_PON_LOT_BV_03_main(v_longPosVectorNode);
+
+ } // End of function f_GEONW_PON_LOT_BV_03_08
+
+ /**
+ * @desc Function including first preamble part (TC_GEONW_PON_LOT_BV_03)
+ */
+ function f_TP_GEONW_PON_LOT_BV_03_pre_1(in charstring p_nodeName) runs on ItsGeoNetworking return LongPosVector {
+
+ // Local variables
+ var LongPosVector v_longPosVectorNode;
+
+ // Test control
+
+ // Test component configuration
+ f_cf01Up();
+ v_longPosVectorNode := f_getPosition(p_nodeName);
+
+ // Test adapter configuration
+
+ // Preamble part I
+ if(p_nodeName == c_compNodeA) {
+ f_prNeighbour();
+ }
+ else {
+ f_prNonNeighbour();
+ }
+
+ return v_longPosVectorNode;
+ } // End of function f_TP_GEONW_PON_LOT_BV_03_pre_1
+
+ /**
+ * @desc Function including second preamble part (TC_GEONW_PON_LOT_BV_03)
+ */
+ function f_TP_GEONW_PON_LOT_BV_03_pre_2(in template (value) GnNonSecuredPacket p_packet) runs on ItsGeoNetworking {
+
+ //preamble part II
+ f_sendGeoNetMessage(
+ valueof(m_geoNwReq_linkLayerBroadcast(m_geoNwPdu(p_packet, -, c_hopLimit1)))
+ );
+ f_selfOrClientSyncAndVerdict(c_prDone, e_success);
+ } // End of function f_TP_GEONW_PON_LOT_BV_03_pre_2
+
+ /**
+ * @desc Function including test body and postamble part (TC_GEONW_PON_LOT_BV_03)
+ */
+ function f_TP_GEONW_PON_LOT_BV_03_main(in template (value) LongPosVector p_longPosVectorNode) runs on ItsGeoNetworking {
+
+ // Test Body
+ if ( not f_utTriggerEvent(m_generateGeoUnicastMessage(valueof(p_longPosVectorNode.gnAddr))) ) {
+ log("*** " & testcasename() & ": INCONC: Trigger failed ***");
+ f_selfOrClientSyncAndVerdict(c_tbDone, e_timeout);
+ }
+
+ tc_ac.start;
+ alt {
+ [] a_receiveAnyLsRequest() {
+ tc_ac.stop;
+ log("*** " & testcasename() & ": FAIL: Received Location Service Request ***");
+ f_selfOrClientSyncAndVerdict(c_tbDone, e_error);
+ }
+ [] a_receiveGeoUnicastWithDestination(mw_shortPosVectorPosition(f_longPosVector2ShortPosVector(valueof(p_longPosVectorNode)))) {
+ tc_ac.stop;
+ log("*** " & testcasename() & ": PASS: GUC packet received correctly ***");
+ f_selfOrClientSyncAndVerdict(c_tbDone, e_success);
+ }
+ [] tc_ac.timeout {
+ log("*** " & testcasename() & ": INCONC: Expected message not received ***");
+ f_selfOrClientSyncAndVerdict(c_tbDone, e_timeout);
+ }
+ }
+
+ // Postamble
+ f_poNeighbour();
+ f_cf01Down();
+
+ } // End of function f_TP_GEONW_PON_LOT_BV_03_main
+
+ } //end GEONW_PON_LOT_BV_03
+
+ /**
+ * @desc TP Function for TC_GEONW_PON_LOT_BV_04
+ */
+ function f_GEONW_PON_LOT_BV_04() runs on ItsGeoNetworking {
+
+ // Local variables
+ var LongPosVector v_longPosVectorNodeB;
+ var LongPosVector v_longPosVectorIut;
+
+ // 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();
+ v_longPosVectorNodeB := f_getPosition(c_compNodeB);
+
+ // Preamble
+ f_prDefault(); // NodeB will send Beacon only once
+ f_sendGeoNetMessage(valueof(m_geoNwReq_linkLayerBroadcast(m_geoNwPdu(m_geoNwBeaconPacket(v_longPosVectorNodeB), -, c_hopLimit1))));
+ f_selfOrClientSyncAndVerdict(c_prDone, e_success);
+
+ // Test Body
+ f_sleep(f_getLifetimeLocTableEntry() + PX_T_DELTA);
+ if ( not f_utTriggerEvent(m_generateGeoUnicastMessage(v_longPosVectorNodeB.gnAddr)) ) {
+ log("*** " & testcasename() & ": INCONC: Trigger failed ***");
+ f_selfOrClientSyncAndVerdict(c_tbDone, e_timeout);
+ }
+
+ tc_ac.start;
+ alt {
+ [] a_receiveLsRequest(?, v_longPosVectorNodeB.gnAddr.mid, v_longPosVectorIut ) {
+ log("*** " & testcasename() & ": PASS: LS Request received correctly ***");
+ f_selfOrClientSyncAndVerdict(c_tbDone, e_success);
+ }
+ [] tc_ac.timeout {
+ log("*** " & testcasename() & ": INCONC: LS Request not received ***");
+ f_selfOrClientSyncAndVerdict(c_tbDone, e_timeout);
+ }
+ }
+
+ // Postamble
+ f_poDefault();
+ f_cf01Down();
+
+ } // End of function f_GEONW_PON_LOT_BV_04
+
+ group GEONW_PON_LOT_BV_05 {
+
+ /**
+ * @desc TP Function for TC_GEONW_PON_LOT_BV_05_01
+ */
+ function f_GEONW_PON_LOT_BV_05_01() runs on ItsGeoNetworking {
+
+ // Local variables
+ var LongPosVector v_longPosVectorNodeB;
+ var LongPosVector v_obsoleteLongPosVectorNodeB;
+
+ // Test control
+ if (not PICS_GN_GUC_DST) {
+ log("*** " & testcasename() & ": PICS_GN_GUC_DST required for executing the TC ***");
+ setverdict(inconc);
+ stop;
+ }
+
+ f_TP_GEONW_PON_LOT_BV_05_pre_1(v_longPosVectorNodeB, v_obsoleteLongPosVectorNodeB);
+
+ f_TP_GEONW_PON_LOT_BV_05_pre_2(
+ m_geoNwUnicastPacket(
+ v_obsoleteLongPosVectorNodeB,
+ f_getIutShortPosVector(),
+ vc_localSeqNumber
+ )
+ );
+
+ f_TP_GEONW_PON_LOT_BV_05_main(v_longPosVectorNodeB, v_obsoleteLongPosVectorNodeB);
+
+ } // End of function f_GEONW_PON_LOT_BV_05_01
+
+ /**
+ * @desc TP Function for TC_GEONW_PON_LOT_BV_05_02
+ */
+ function f_GEONW_PON_LOT_BV_05_02() runs on ItsGeoNetworking {
+
+ // Local variables
+ var LongPosVector v_longPosVectorNodeB;
+ var LongPosVector v_obsoleteLongPosVectorNodeB;
+
+ // Test control
+ if (not PICS_GN_GAC_DST) {
+ log("*** " & testcasename() & ": PICS_GN_GAC_DST required for executing the TC ***");
+ setverdict(inconc);
+ stop;
+ }
+
+ f_TP_GEONW_PON_LOT_BV_05_pre_1(v_longPosVectorNodeB, v_obsoleteLongPosVectorNodeB);
+
+ f_TP_GEONW_PON_LOT_BV_05_pre_2(
+ m_geoNwAnycastPacket(
+ v_obsoleteLongPosVectorNodeB,
+ vc_localSeqNumber,
+ f_getGeoAnycastArea(c_area1)
+ )
+ );
+
+ f_TP_GEONW_PON_LOT_BV_05_main(v_longPosVectorNodeB, v_obsoleteLongPosVectorNodeB);
+
+ } // End of function f_GEONW_PON_LOT_BV_05_02
+
+ /**
+ * @desc TP Function for TC_GEONW_PON_LOT_BV_05_03
+ */
+ function f_GEONW_PON_LOT_BV_05_03() runs on ItsGeoNetworking {
+
+ // Local variables
+ var LongPosVector v_longPosVectorNodeB;
+ var LongPosVector v_obsoleteLongPosVectorNodeB;
+
+ // Test control
+ if (not PICS_GN_GBC_DST) {
+ log("*** " & testcasename() & ": PICS_GN_GBC_DST required for executing the TC ***");
+ setverdict(inconc);
+ stop;
+ }
+
+ f_TP_GEONW_PON_LOT_BV_05_pre_1(v_longPosVectorNodeB, v_obsoleteLongPosVectorNodeB);
+
+ f_TP_GEONW_PON_LOT_BV_05_pre_2(
+ m_geoNwBroadcastPacket(
+ v_obsoleteLongPosVectorNodeB,
+ vc_localSeqNumber,
+ f_getGeoBroadcastArea(c_area1)
+ )
+ );
+
+ f_TP_GEONW_PON_LOT_BV_05_main(v_longPosVectorNodeB, v_obsoleteLongPosVectorNodeB);
+
+ } // End of function f_GEONW_PON_LOT_BV_05_03
+
+ /**
+ * @desc TP Function for TC_GEONW_PON_LOT_BV_05_04
+ */
+ function f_GEONW_PON_LOT_BV_05_04() runs on ItsGeoNetworking {
+
+ // Local variables
+ var LongPosVector v_longPosVectorNodeB;
+ var LongPosVector v_obsoleteLongPosVectorNodeB;
+
+ // Test control
+ if (not PICS_GN_TSB_DST) {
+ log("*** " & testcasename() & ": PICS_GN_TSB_DST required for executing the TC ***");
+ setverdict(inconc);
+ stop;
+ }
+
+ f_TP_GEONW_PON_LOT_BV_05_pre_1(v_longPosVectorNodeB, v_obsoleteLongPosVectorNodeB);
+
+ f_TP_GEONW_PON_LOT_BV_05_pre_2(
+ m_geoNwTsbPacket(
+ vc_localSeqNumber,
+ v_obsoleteLongPosVectorNodeB
+ )
+ );
+
+ f_TP_GEONW_PON_LOT_BV_05_main(v_longPosVectorNodeB, v_obsoleteLongPosVectorNodeB);
+
+ } // End of function f_GEONW_PON_LOT_BV_05_04
+
+ /**
+ * @desc TP Function for TC_GEONW_PON_LOT_BV_05_05
+ */
+ function f_GEONW_PON_LOT_BV_05_05() runs on ItsGeoNetworking {
+
+ // Local variables
+ var LongPosVector v_longPosVectorNodeB;
+ var LongPosVector v_obsoleteLongPosVectorNodeB;
+
+ // Test control
+ if (not PICS_GN_SHB_DST) {
+ log("*** " & testcasename() & ": PICS_GN_SHB_DST required for executing the TC ***");
+ setverdict(inconc);
+ stop;
+ }
+
+ f_TP_GEONW_PON_LOT_BV_05_pre_1(v_longPosVectorNodeB, v_obsoleteLongPosVectorNodeB);
+
+ f_TP_GEONW_PON_LOT_BV_05_pre_2(
+ m_geoNwShbPacket(
+ v_obsoleteLongPosVectorNodeB
+ )
+ );
+
+ f_TP_GEONW_PON_LOT_BV_05_main(v_longPosVectorNodeB, v_obsoleteLongPosVectorNodeB);
+
+ } // End of function f_GEONW_PON_LOT_BV_05_05
+
+ /**
+ * @desc TP Function for TC_GEONW_PON_LOT_BV_05_06
+ */
+ function f_GEONW_PON_LOT_BV_05_06() runs on ItsGeoNetworking {
+
+ // Local variables
+ var LongPosVector v_longPosVectorNodeB;
+ var LongPosVector v_obsoleteLongPosVectorNodeB;
+
+ // Test control
+ if (not PICS_GN_LS_REQ_DST) {
+ log("*** " & testcasename() & ": PICS_GN_LS_REQ_DST required for executing the TC ***");
+ setverdict(inconc);
+ stop;
+ }
+
+ f_TP_GEONW_PON_LOT_BV_05_pre_1(v_longPosVectorNodeB, v_obsoleteLongPosVectorNodeB);
+
+ activate(a_receiveAnyLsReply());
+
+ f_TP_GEONW_PON_LOT_BV_05_pre_2(
+ m_geoNwLsRequestPacket(
+ v_obsoleteLongPosVectorNodeB,
+ vc_localSeqNumber,
+ f_getIutGnLocalAddress()
+ )
+ );
+
+ f_TP_GEONW_PON_LOT_BV_05_main(v_longPosVectorNodeB, v_obsoleteLongPosVectorNodeB);
+
+ } // End of function f_GEONW_PON_LOT_BV_05_06
+
+ /**
+ * @desc TP Function for TC_GEONW_PON_LOT_BV_05_07
+ */
+ function f_GEONW_PON_LOT_BV_05_07() runs on ItsGeoNetworking {
+
+ // Local variables
+ var LongPosVector v_longPosVectorNodeB;
+ var LongPosVector v_obsoleteLongPosVectorNodeB;
+
+ // Test control
+ if (not PICS_GN_LS_REQ_DST) {
+ log("*** " & testcasename() & ": PICS_GN_LS_REQ_DST required for executing the TC ***");
+ setverdict(inconc);
+ stop;
+ }
+
+ f_TP_GEONW_PON_LOT_BV_05_pre_1(v_longPosVectorNodeB, v_obsoleteLongPosVectorNodeB);
+
+ f_TP_GEONW_PON_LOT_BV_05_pre_2(
+ m_geoNwLsReplyPacket(
+ v_obsoleteLongPosVectorNodeB,
+ f_getIutShortPosVector(),
+ vc_localSeqNumber
+ )
+ );
+
+ f_TP_GEONW_PON_LOT_BV_05_main(v_longPosVectorNodeB, v_obsoleteLongPosVectorNodeB);
+
+ } // End of function f_GEONW_PON_LOT_BV_05_07
+
+ /**
+ * @desc Function including first preamble part (TC_GEONW_PON_LOT_BV_05)
+ */
+ function f_TP_GEONW_PON_LOT_BV_05_pre_1(out LongPosVector p_longPosVectorNodeB, out LongPosVector p_obsoleteLongPosVectorNodeB) runs on ItsGeoNetworking {
+
+ // Local variables
+
+ // Test control
+
+ // Test component configuration
+ f_cf01Up();
+ p_longPosVectorNodeB := f_getPosition(c_compNodeB);
+ p_obsoleteLongPosVectorNodeB := p_longPosVectorNodeB;
+ p_obsoleteLongPosVectorNodeB.timestamp_ := p_obsoleteLongPosVectorNodeB.timestamp_ - 1000;
+ p_obsoleteLongPosVectorNodeB.latitude := p_obsoleteLongPosVectorNodeB.latitude - (PX_POS_DELTA * 3);
+
+ // Test adapter configuration
+
+ // Preamble
+ f_prDefault();
+
+ // Act as a neighbor and send one beacon
+ f_sendGeoNetMessage(valueof(m_geoNwReq_linkLayerBroadcast(m_geoNwPdu(m_geoNwBeaconPacket(p_longPosVectorNodeB), -, c_hopLimit1))));
+ } // End of function f_TP_GEONW_PON_LOT_BV_05_pre_1
+
+ /**
+ * @desc Function including second preamble part (TC_GEONW_PON_LOT_BV_05)
+ */
+ function f_TP_GEONW_PON_LOT_BV_05_pre_2(in template (value) GnNonSecuredPacket p_packet) runs on ItsGeoNetworking {
+
+ //preamble part II
+ f_sendGeoNetMessage(
+ valueof(m_geoNwReq_linkLayerBroadcast(m_geoNwPdu(p_packet)))
+ );
+ f_selfOrClientSyncAndVerdict(c_prDone, e_success);
+ } // End of function f_TP_GEONW_PON_LOT_BV_05_pre_2
+
+ /**
+ * @desc Function including test body and postamble part (TC_GEONW_PON_LOT_BV_05)
+ */
+ function f_TP_GEONW_PON_LOT_BV_05_main(in template (value) LongPosVector p_longPosVectorNodeB, in template (value) LongPosVector p_obsoleteLongPosVectorNodeB) runs on ItsGeoNetworking {
+
+ // Test Body
+ if ( not f_utTriggerEvent(m_generateGeoUnicastMessage(valueof(p_longPosVectorNodeB.gnAddr)))) {
+ log("*** " & testcasename() & ": INCONC: Trigger failed ***");
+ f_selfOrClientSyncAndVerdict(c_tbDone, e_timeout);
+ }
+
+ tc_ac.start;
+ alt {
+ [] a_receiveAnyLsRequest() {
+ tc_ac.stop;
+ log("*** " & testcasename() & ": FAIL: Received Location Service Request ***");
+ f_selfOrClientSyncAndVerdict(c_tbDone, e_error);
+ }
+ [] a_receiveGeoUnicastWithDestination(mw_shortPosVectorPosition(f_longPosVector2ShortPosVector(valueof(p_obsoleteLongPosVectorNodeB)))) {
+ tc_ac.stop;
+ log("*** " & testcasename() & ": FAIL: GN packet received with obsolete Destination Position Vector ***");
+ f_selfOrClientSyncAndVerdict(c_tbDone, e_error);
+ }
+ [] a_receiveGeoUnicastWithDestination(mw_shortPosVectorPosition(f_longPosVector2ShortPosVector(valueof(p_longPosVectorNodeB)))) {
+ tc_ac.stop;
+ log("*** " & testcasename() & ": PASS: GN packet packet received correctly ***");
+ f_selfOrClientSyncAndVerdict(c_tbDone, e_success);
+ }
+ [] tc_ac.timeout {
+ log("*** " & testcasename() & ": INCONC: Expected message not received ***");
+ f_selfOrClientSyncAndVerdict(c_tbDone, e_timeout);
+ }
+ }
+
+ // Postamble
+ f_poDefault();
+ f_cf01Down();
+
+ } // End of function f_TP_GEONW_PON_LOT_BV_05_main
+
+ } // end group GEONW_PON_LOT_BV_05
+
+ } // end geoLocationTable
+
+ // 6.2.2.2
+ group geoLocalPositionVector {
+
+ /**
+ * @desc TP Function for TC_GEONW_PON_LPV_BV_01
+ */
+ function f_GEONW_PON_LPV_BV_01() runs on ItsGeoNetworking {
+
+ // Local variables
+ var LongPosVector v_longPosVectorIut;
+ var template LongPosVector v_previouslongPosVectorIut;
+ var GeoNetworkingInd v_geoNwInd;
+
+ // Test control
+ if (not PICS_GN_BEACON_SRC) {
+ log("*** " & testcasename() & ": PICS_GN_BEACON_SRC required for executing the TC ***");
+ setverdict(inconc);
+ stop;
+ }
+
+ // Test component configuration
+ f_cf01Up();//FIXME ac change position, not used by C2C
+ v_longPosVectorIut := f_getPosition(c_compIut);
+ v_previouslongPosVectorIut := v_longPosVectorIut;
+ v_previouslongPosVectorIut.timestamp_ := ?;
+
+ // Test adapter configuration
+
+ // Preamble
+ f_prNeighbour();
+ f_acTriggerEvent(m_startPassBeaconing(m_beaconHeader(v_longPosVectorIut).beaconHeader));
+ tc_ac.start;
+ alt {
+ [] geoNetworkingPort.receive(mw_geoNwInd(mw_geoNwPdu(
+ mw_geoNwBeaconPacket(
+ mw_longPosVectorAny(v_longPosVectorIut.gnAddr)
+ )
+ ))) -> value v_geoNwInd {
+ tc_ac.stop;
+ log("*** " & testcasename() & ": Pre-conditions: Beacon received ***");
+ v_longPosVectorIut := v_geoNwInd.msgIn.gnPacket.packet.extendedHeader.beaconHeader.srcPosVector;
+ }
+ [] tc_ac.timeout {
+ log("*** " & testcasename() & ": Pre-conditions: Expected message not received ***");
+ f_selfOrClientSyncAndVerdict(c_prDone, e_timeout);
+ }
+ }
+ f_utChangePosition();
+ f_selfOrClientSyncAndVerdict(c_prDone, e_success);
+
+ // Test Body
+ geoNetworkingPort.clear;
+ tc_ac.start;
+ alt {
+ [] geoNetworkingPort.receive(mw_geoNwInd(mw_geoNwPdu(
+ mw_geoNwBeaconPacket(
+ mw_longPosVectorAny(v_longPosVectorIut.gnAddr)
+ )
+ ))) -> value v_geoNwInd {
+ tc_ac.stop;
+ //check if the position vector has changed
+ if (match(v_geoNwInd.msgIn.gnPacket.packet.extendedHeader.beaconHeader.srcPosVector, v_previouslongPosVectorIut)) {
+ log("*** " & testcasename() & ": FAIL: Sender Postion Vector not correctly updated ***");
+ f_selfOrClientSyncAndVerdict(c_tbDone, e_error);
+ }
+ else {
+ log("*** " & testcasename() & ": PASS: Sender Postion Vector correctly updated ***");
+ f_selfOrClientSyncAndVerdict(c_tbDone, e_success);
+ }
+ }
+ [] tc_ac.timeout {
+ log("*** " & testcasename() & ": INCONC: Expected message not received ***");
+ f_selfOrClientSyncAndVerdict(c_tbDone, e_timeout);
+ }
+ }
+ f_acTriggerEvent(m_stopPassBeaconing);
+
+ // Postamble
+ f_poNeighbour();
+ f_cf01Down();
+
+ } // End of function f_GEONW_PON_LPV_BV_01
+
+ } // end geoLocalPositionVector
+
+ // 6.2.2.3
+ group geoSequenceNumber {
+
+ /**
+ * @desc TP Function for TC_GEONW_PON_SQN_BV_01
+ */
+ function f_GEONW_PON_SQN_BV_01() runs on ItsGeoNetworking {
+
+ // Local variables
+ var UInt16 v_expectedSequenceNumber := 0;
+ var LongPosVector v_longPosVectorIut;
+
+ // Test control
+ if (not PICS_GN_GBC_SRC) {
+ log("*** " & testcasename() & ": PICS_GN_GBC_SRC required for executing the TC ***");
+ setverdict(inconc);
+ stop;
+ }
+
+ // Test component configuration
+ f_cf01Up();
+ v_longPosVectorIut := f_getPosition(c_compIut);
+
+ // Test adapter configuration
+
+ // Preamble
+ f_prNeighbour();
+ f_selfOrClientSyncAndVerdict(c_prDone, e_success);
+
+ // Test Body
+ if ( not f_utTriggerEvent(m_generateGeoBroadcastMessage(f_getArea(c_area1))) ) {
+ log("*** " & testcasename() & ": INCONC: Trigger failed ***");
+ f_selfOrClientSyncAndVerdict(c_tbDone, e_timeout);
+ }
+
+ tc_ac.start;
+ alt {
+ [] a_receiveGeoBroadcast(
+ mw_longPosVectorPosition(v_longPosVectorIut),
+ v_expectedSequenceNumber) {
+ tc_ac.stop;
+ log("*** " & testcasename() & ": PASS: GBC packet received correctly ***");
+ f_selfOrClientSyncAndVerdict(c_tbDone, e_success);
+ }
+ [] a_receiveGeoBroadcast(
+ mw_longPosVectorPosition(v_longPosVectorIut),
+ v_expectedSequenceNumber) {
+ tc_ac.stop;
+ log("*** " & testcasename() & ": FAIL: GBC packet received with incorrect sequence number ***");
+ f_selfOrClientSyncAndVerdict(c_tbDone, e_error);
+ }
+ [] tc_ac.timeout {
+ log("*** " & testcasename() & ": INCONC: Expected message not received ***");
+ f_selfOrClientSyncAndVerdict(c_tbDone, e_timeout);
+ }
+ }
+
+ // Postamble
+ f_poNeighbour();
+ f_cf01Down();
+
+ } // End of function f_GEONW_PON_SQN_BV_01
+
+ /**
+ * @desc TP Function for TC_GEONW_PON_SQN_BV_02
+ */
+ function f_GEONW_PON_SQN_BV_02() runs on ItsGeoNetworking {
+
+ // Local variables
+ var UInt16 v_expectedSequenceNumber := 0;
+ var integer v_nbReceivedPackets := 0;
+ var GeoNetworkingInd v_geoNwInd;
+ var LongPosVector v_longPosVectorIut;
+
+ // Test control
+ if (not PICS_GN_GBC_SRC) {
+ log("*** " & testcasename() & ": PICS_GN_GBC_SRC required for executing the TC ***");
+ setverdict(inconc);
+ stop;
+ }
+
+ // Test component configuration
+ f_cf01Up();
+ v_longPosVectorIut := f_getPosition(c_compIut);
+
+ // Test adapter configuration
+
+ // Preamble
+ f_prNeighbour();
+ f_sleep(10.0);
+ // receive first packet
+ if ( not f_utTriggerEvent(m_generateGeoBroadcastMessage(f_getArea(c_area1))) ) {
+ log("*** " & testcasename() & ": INCONC: Trigger failed ***");
+ f_selfOrClientSyncAndVerdict(c_prDone, e_timeout);
+ }
+ tc_ac.start;
+ alt {
+
+ [] geoNetworkingPort.receive(mw_geoNwInd(mw_geoNwPdu(mw_geoNwBroadcastPacket(
+ mw_longPosVectorPosition(v_longPosVectorIut),
+ ?
+ )))) -> value v_geoNwInd {
+ tc_ac.stop;
+ log("*** " & testcasename() & ": Pre-conditions: First GUC packet received ***");
+ v_expectedSequenceNumber := v_geoNwInd.msgIn.gnPacket.packet.extendedHeader.geoBroadcastHeader.seqNumber + 1;
+ }
+ [] tc_ac.timeout {
+ log("*** " & testcasename() & ": Pre-conditions: Expected message not received ***");
+ f_selfOrClientSyncAndVerdict(c_prDone, e_timeout);
+ }
+ }
+ f_selfOrClientSyncAndVerdict(c_prDone, e_success);
+
+ // Test Body
+ if ( not f_utTriggerEvent(m_generateGeoBroadcastMessage(f_getArea(c_area1))) ) {
+ log("*** " & testcasename() & ": INCONC: Trigger failed ***");
+ f_selfOrClientSyncAndVerdict(c_tbDone, e_timeout);
+ }
+ tc_ac.start;
+ alt {
+ [] a_receiveGeoBroadcast(
+ mw_longPosVectorPosition(v_longPosVectorIut),
+ v_expectedSequenceNumber) {
+ tc_ac.stop;
+ v_nbReceivedPackets := v_nbReceivedPackets + 1;
+ if(v_nbReceivedPackets >= vc_multipleMessagesCount) {
+ log("*** " & testcasename() & ": PASS: GBC packets received with correct sequence numbers ***");
+ f_selfOrClientSyncAndVerdict(c_tbDone, e_success);
+ }
+ else {
+ v_expectedSequenceNumber := v_expectedSequenceNumber + 1;
+ if ( not f_utTriggerEvent(m_generateGeoBroadcastMessage(f_getArea(c_area1))) ) {
+ log("*** " & testcasename() & ": INCONC: Trigger failed ***");
+ f_selfOrClientSyncAndVerdict(c_tbDone, e_timeout);
+ }
+ tc_ac.start;
+ repeat;
+ }
+ }
+ [] a_receiveGeoBroadcast(
+ mw_longPosVectorPosition(v_longPosVectorIut),
+ ?) {
+ tc_ac.stop;
+ log("*** " & testcasename() & ": FAIL: GBC packet received with incorrect sequence number ***");
+ f_selfOrClientSyncAndVerdict(c_tbDone, e_error);
+ }
+ [] tc_ac.timeout {
+ log("*** " & testcasename() & ": INCONC: Expected message not received ***");
+ f_selfOrClientSyncAndVerdict(c_tbDone, e_timeout);
+ }
+ }
+
+ // Postamble
+ f_poNeighbour();
+ f_cf01Down();
+
+ } // End of function f_GEONW_PON_SQN_BV_02
+
+ } // end geoSequenceNumber
+
+ // 6.2.2.4
+ group geoLocationService {
+
+ /**
+ * @desc TP Function for TC_GEONW_PON_LOS_BV_01
+ */
+ function f_GEONW_PON_LOS_BV_01() runs on ItsGeoNetworking {
+
+ // Local variables
+ var LongPosVector v_longPosVectorIut;
+ var GN_Address v_gnAddressNodeA;
+
+ // 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();
+ v_gnAddressNodeA := f_getPosition(c_compNodeA).gnAddr;
+
+ // Test adapter configuration
+
+ // Preamble
+ f_prNeighbour();
+ f_selfOrClientSyncAndVerdict(c_prDone, e_success);
+
+ // Test Body
+ if ( not f_utTriggerEvent(m_generateGeoUnicastMessage(v_gnAddressNodeA)) ) {
+ log("*** " & testcasename() & ": INCONC: Trigger failed ***");
+ f_selfOrClientSyncAndVerdict(c_tbDone, e_timeout);
+ }
+
+ tc_ac.start;
+ alt {
+ [] a_receiveLsRequest(
+ ?,
+ v_gnAddressNodeA.mid,
+ v_longPosVectorIut
+ ) {
+ tc_ac.stop;
+ log("*** " & testcasename() & ": PASS: LS Request received correctly ***");
+ f_selfOrClientSyncAndVerdict(c_tbDone, e_success);
+ }
+ [] a_receiveAnyLsRequest() {
+ tc_ac.stop;
+ log("*** " & testcasename() & ": FAIL: LS Request does not contain GN Address of nodeA ***");
+ f_selfOrClientSyncAndVerdict(c_tbDone, e_error);
+ }
+ [] tc_ac.timeout {
+ log("*** " & testcasename() & ": INCONC: Expected message not received ***");
+ f_selfOrClientSyncAndVerdict(c_tbDone, e_timeout);
+ }
+ }
+
+ // Postamble
+ f_poNeighbour();
+ f_cf01Down();
+
+ } // End of function f_GEONW_PON_LOS_BV_01
+
+ /**
+ * @desc TP Function for TC_GEONW_PON_LOS_BV_02
+ */
+ function f_GEONW_PON_LOS_BV_02() runs on ItsGeoNetworking {
+
+ // Local variables
+ var LongPosVector v_longPosVectorIut;
+ var GN_Address v_gnAddressNodeA;
+
+ // 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();
+ v_gnAddressNodeA := f_getPosition(c_compNodeA).gnAddr;
+
+ // Test adapter configuration
+
+ // Preamble
+ f_prNeighbour();
+ if ( not f_utTriggerEvent(m_generateGeoUnicastMessage(v_gnAddressNodeA)) ) {
+ log("*** " & testcasename() & ": INCONC: Trigger failed ***");
+ f_selfOrClientSyncAndVerdict(c_prDone, e_timeout);
+ }
+ tc_ac.start;
+ alt {
+ [] a_receiveLsRequest(?, v_gnAddressNodeA.mid, v_longPosVectorIut) {
+ tc_ac.stop;
+ //start retransmission timer
+ tc_ac.start(f_getLsRetransmitTimer() - f_getDeltaTimer());
+ }
+ }
+ f_selfOrClientSyncAndVerdict(c_prDone, e_success);
+
+ // Test Body
+ if ( not f_utTriggerEvent(m_generateGeoUnicastMessage(v_gnAddressNodeA)) ) {
+ log("*** " & testcasename() & ": INCONC: Trigger failed ***");
+ f_selfOrClientSyncAndVerdict(c_tbDone, e_timeout);
+ }
+
+ alt {
+ [] a_receiveLsRequest(?, v_gnAddressNodeA.mid, v_longPosVectorIut) {
+ tc_ac.stop;
+ log("*** " & testcasename() & ": Second LS_REQUEST received ***");
+ f_selfOrClientSyncAndVerdict(c_tbDone, e_error);
+ }
+ [] tc_ac.timeout {
+ log("*** " & testcasename() & ": No second LS_REQUEST received ***");
+ f_selfOrClientSyncAndVerdict(c_tbDone, e_success);
+ }
+ }
+
+ // Postamble
+ f_poNeighbour();
+ f_cf01Down();
+
+ } // End of function f_GEONW_PON_LOS_BV_02
+
+ /**
+ * @desc TP Function for TC_GEONW_PON_LOS_BV_03
+ */
+ function f_GEONW_PON_LOS_BV_03() runs on ItsGeoNetworking {
+
+ // Local variables
+ var LongPosVector v_longPosVectorNodeA;
+ var LongPosVector v_longPosVectorIut;
+ var GeoNetworkingInd v_geoNetInd;
+
+ // Test control
+ if (not PICS_GN_LS_REQ_SRC or not PICS_GN_LS_REP_DST) {
+ log("*** " & testcasename() & ": PICS_GN_LS_REQ_SRC AND PICS_GN_LS_REP_DST required for executing the TC ***");
+ setverdict(inconc);
+ stop;
+ }
+
+ // Test component configuration
+ f_cf01Up();
+ v_longPosVectorNodeA := f_getPosition(c_compNodeA);
+
+ // Test adapter configuration
+
+ // Preamble
+ f_prNeighbour();
+ 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) {
+ tc_ac.stop;
+ }
+ }
+ f_selfOrClientSyncAndVerdict(c_prDone, e_success);
+
+ // Test Body
+ f_sendGeoNetMessage(
+ valueof(m_geoNwReq_linkLayerBroadcast(
+ m_geoNwPdu(
+ m_geoNwLsReplyPacket(
+ v_longPosVectorNodeA,
+ f_longPosVector2ShortPosVector(v_longPosVectorIut),
+ vc_localSeqNumber
+ )
+ )
+ )
+ ));
+
+ tc_ac.start;
+ alt {
+
+ [] geoNetworkingPort.receive(
+ mw_geoNwInd(
+ mw_geoNwPdu(
+ mw_geoNwUnicastPacket(
+ mw_shortPosVectorPosition(f_longPosVector2ShortPosVector(v_longPosVectorNodeA)),
+ ?
+ )
+ )
+ )
+ ) -> value v_geoNetInd {
+ tc_ac.stop;
+ //we only check that the lifetime is less than the default lifetime due to
+ //we do not know exactly the time passed at IUT
+ if (f_getLifetimeValue(v_geoNetInd.msgIn.basicHeader.lifeTime) v_maxNbrRetrans) {
+ //first LS request is not counted as a retransmission
+ log("*** " & testcasename() & ": LS_REQUEST retransmitted more than itsGnLocationServiceMaxRetrans times ***");
+ f_selfOrClientSyncAndVerdict(c_tbDone, e_error);
+ }
+ else {
+ tc_ac.start;
+ repeat;
+ }
+ }
+ [] tc_ac.timeout {
+ if(v_nbLsReceived == (v_maxNbrRetrans)) {
+ //first LS request is not counted as a retransmission
+ log("*** " & testcasename() & ": LS_REQUEST retransmitted itsGnLocationServiceMaxRetrans times ***");
+ f_selfOrClientSyncAndVerdict(c_tbDone, e_success);
+ }
+ else {
+ log("*** " & testcasename() & ": LS_REQUEST retransmitted less than itsGnLocationServiceMaxRetrans times ***");
+ f_selfOrClientSyncAndVerdict(c_tbDone, e_error);
+ }
+ }
+ }
+
+ // Postamble
+ f_poNeighbour();
+ f_cf01Down();
+
+ } // End of function f_GEONW_PON_LOS_BV_07
+
+ /**
+ * @desc TP Function for TC_GEONW_PON_LOS_BV_08
+ */
+ function f_GEONW_PON_LOS_BV_08() runs on ItsGeoNetworking {
+
+ // Local variables
+ var LongPosVector v_longPosVectorNodeA;
+ var LongPosVector v_longPosVectorIut;
+ var GN_Address v_iutGnAddress;
+ var UInt16 v_seqNbr := vc_localSeqNumber;
+ var FncRetCode v_ret := e_error;
+
+ // Test control
+ if (not PICS_GN_LS_REQ_DST) {
+ log("*** " & testcasename() & ": PICS_GN_LS_REQ_DST required for executing the TC ***");
+ setverdict(inconc);
+ stop;
+ }
+
+ // Test component configuration
+ f_cf01Up();
+ v_longPosVectorNodeA := f_getPosition(c_compNodeA);
+ v_iutGnAddress := f_getPosition(c_compIut).gnAddr;
+
+ // Test adapter configuration
+
+ // Preamble
+ f_prNeighbour();
+ f_selfOrClientSyncAndVerdict(c_prDone, e_success);
+
+ // Test Body
+ v_ret := f_processLocationService(v_longPosVectorNodeA, v_seqNbr, v_iutGnAddress, v_longPosVectorIut);
+ if (v_ret == e_success) {
+ log("*** " & testcasename() & ": LS_REPLY packet received correctly ***");
+ f_selfOrClientSyncAndVerdict(c_tbDone, e_success);
+ }
+ else {
+ log("*** " & testcasename() & ": LS_REPLY packet not received correctly ***");
+ f_selfOrClientSyncAndVerdict(c_tbDone, e_error);
+ }
+
+ // Postamble
+ f_poNeighbour();
+ f_cf01Down();
+
+ } // End of function f_GEONW_PON_LOS_BV_08
+
+ group GEONW_PON_LOS_BO_09 {
+
+ /**
+ * @desc TP Function for TC_GEONW_PON_LOS_BO_09
+ */
+ function f_GEONW_PON_LOS_BO_09() runs on ItsMtc {
+
+ // Local variables
+ var ItsGeoNetworking v_nodeB;
+ var ItsGeoNetworking v_nodeD;
+
+ // Test control
+ if (not PICS_GN_LS_REQ_DST) {
+ log("*** " & testcasename() & ": PICS_GN_LS_REQ_DST 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_LOS_BO_09_nodeB());
+ v_nodeD.start(f_GEONW_PON_LOS_BO_09_nodeD());
+
+ // Synchronization
+ f_serverSync2ClientsAndStop({c_prDone, c_tbDone});
+
+ // Cleanup
+ f_cf02Down();
+
+ } // End of function f_GEONW_PON_LOS_BO_09
+
+ /**
+ * @desc Behavior function for NodeB (TC_GEONW_PON_LOS_BO_09)
+ */
+ function f_GEONW_PON_LOS_BO_09_nodeB() runs on ItsGeoNetworking {
+
+ // Local variables
+ var LongPosVector v_longPosVectorNodeB := f_getPosition(c_compNodeB);
+ var LongPosVector v_longPosVectorIut := f_getPosition(c_compIut);
+ var FncRetCode v_ret := e_error;
+
+ // Preamble
+ f_prNeighbour();
+ v_ret := f_processLocationService(
+ v_longPosVectorNodeB,
+ vc_localSeqNumber,
+ v_longPosVectorIut.gnAddr,
+ v_longPosVectorIut);
+ if (v_ret == e_error) {
+ f_selfOrClientSyncAndVerdict(c_prDone, e_timeout);
+ }
+ else {
+ f_selfOrClientSyncAndVerdict(c_prDone, e_success);
+ }
+
+ // Test Body
+ tc_noac.start;
+ alt {
+ [] geoNetworkingPort.receive(
+ mw_geoNwInd(
+ mw_geoNwPdu(
+ mw_geoNwLsReplyPacket(
+ mw_longPosVectorPosition(v_longPosVectorIut),
+ mw_shortPosVectorPosition(f_longPosVector2ShortPosVector(v_longPosVectorNodeB))
+ )
+ )
+ )
+ ) {
+ tc_noac.stop;
+ log("*** " & testcasename() & ": FAIL: LS_REQUEST has not been discarded ***");
+ f_selfOrClientSyncAndVerdict(c_tbDone, e_error);
+ }
+ [] tc_noac.timeout {
+ log("*** " & testcasename() & ": PASS: LS_REQUEST discarded ***");
+ f_selfOrClientSyncAndVerdict(c_tbDone, e_success);
+ }
+ }
+
+ // Postamble
+ f_poNeighbour();
+
+ } // End of function f_GEONW_PON_LOS_BO_09_nodeB
+
+ /**
+ * @desc Behavior function for NodeD (TC_GEONW_PON_LOS_BO_09)
+ */
+ function f_GEONW_PON_LOS_BO_09_nodeD() runs on ItsGeoNetworking {
+
+ // Local variables
+ var LongPosVector v_longPosVectorNodeB := f_getPosition(c_compNodeB);
+ var LongPosVector v_longPosVectorIut := f_getPosition(c_compIut);
+ var GN_Address v_iutGnAddress := f_getPosition(c_compIut).gnAddr;
+
+ // Preamble
+ f_prNeighbour();
+ f_selfOrClientSyncAndVerdict(c_prDone, e_success);
+
+ // Test Body
+ f_sendGeoNetMessage(
+ valueof(m_geoNwReq_linkLayerBroadcast(
+ m_geoNwPdu(
+ m_geoNwLsRequestPacket(
+ v_longPosVectorNodeB,
+ vc_localSeqNumber,
+ v_iutGnAddress
+ )
+ )
+ )
+ ));
+
+ tc_noac.start;
+ alt {
+ [] geoNetworkingPort.receive(
+ mw_geoNwInd(
+ mw_geoNwPdu(
+ mw_geoNwLsReplyPacket(
+ mw_longPosVectorPosition(v_longPosVectorIut),
+ mw_shortPosVectorPosition(f_longPosVector2ShortPosVector(v_longPosVectorNodeB))
+ )
+ )
+ )
+ ) {
+ tc_noac.stop;
+ log("*** " & testcasename() & ": FAIL: LS_REQUEST has not been discarded ***");
+ f_selfOrClientSyncAndVerdict(c_tbDone, e_error);
+ }
+ [] tc_noac.timeout {
+ log("*** " & testcasename() & ": PASS: LS_REQUEST discarded ***");
+ f_selfOrClientSyncAndVerdict(c_tbDone, e_success);
+ }
+ }
+
+ // Postamble
+ f_poNeighbour();
+
+ } // End of function f_GEONW_PON_LOS_BO_09_nodeD
+
+ } // end GEONW_PON_LOS_BO_09
+
+ group GEONW_PON_LOS_BV_10 {
+
+ /**
+ * @desc TP Function for TC_GEONW_PON_LOS_BV_10
+ */
+ function f_GEONW_PON_LOS_BV_10() runs on ItsMtc {
+
+ // Local variables
+ var ItsGeoNetworking v_nodeB;
+ var ItsGeoNetworking v_nodeC;
+
+ // Test control
+ if (not PICS_GN_LS_FWD) {
+ log("*** " & testcasename() & ": PICS_GN_LS_FWD required for executing the TC ***");
+ setverdict(inconc);
+ stop;
+ }
+
+ // Test component configuration
+ f_cf03Up();
+
+ // Preamble
+
+ // Start components
+ v_nodeB := f_getComponent(c_compNodeB);
+ v_nodeC := f_getComponent(c_compNodeC);
+ v_nodeB.start(f_GEONW_PON_LOS_BV_10_nodeB());
+ v_nodeC.start(f_GEONW_PON_LOS_BV_10_nodeC());
+
+ // Synchronization
+ f_serverSync2ClientsAndStop({c_prDone, c_tbDone});
+
+ // Cleanup
+ f_cf03Down();
+
+ } // End of function f_GEONW_PON_LOS_BV_10
+
+ /**
+ * @desc Behavior function for NodeB (TC_GEONW_PON_LOS_BV_10)
+ */
+ function f_GEONW_PON_LOS_BV_10_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
+ tc_ac.start;
+ alt {
+ [] geoNetworkingPort.receive(
+ mw_geoNwInd(
+ mw_geoNwPdu(
+ mw_geoNwLsRequestPacket(
+ ?,
+ v_longPosVectorNodeB.gnAddr.mid
+ ),
+ -,
+ c_defaultHopLimit - 1
+ )
+ )
+ ) {
+ tc_ac.stop;
+ log("*** " & testcasename() & ": PASS: Re-broadcasted LS Request received with HL field decreased by 1 ***");
+ f_selfOrClientSyncAndVerdict(c_tbDone, e_success);
+ }
+ [] tc_ac.timeout {
+ log("*** " & testcasename() & ": FAIL: LS Request was not re-broadcasted ***");
+ f_selfOrClientSyncAndVerdict(c_tbDone, e_error);
+ }
+ }
+
+ // Postamble
+ f_poNeighbour();
+
+ } // End of function f_GEONW_PON_LOS_BV_10_nodeB
+
+ /**
+ * @desc Behavior function for NodeC (TC_GEONW_PON_LOS_BV_10)
+ */
+ function f_GEONW_PON_LOS_BV_10_nodeC() runs on ItsGeoNetworking {
+
+ // Local variables
+
+ // Preamble
+ f_prNeighbour();
+ f_selfOrClientSyncAndVerdict(c_prDone, e_success);
+
+ // Test Body
+ f_sendGeoNetMessage(
+ valueof(m_geoNwReq_linkLayerBroadcast(
+ m_geoNwPdu(
+ m_geoNwLsRequestPacket(
+ f_getPosition(c_compNodeA),
+ vc_localSeqNumber,
+ f_getPosition(c_compNodeB).gnAddr
+ ),
+ -,
+ c_defaultHopLimit
+ )
+ )
+ ));
+ f_selfOrClientSyncAndVerdict(c_tbDone, e_success);
+
+ // Postamble
+ f_poNeighbour();
+
+ } // End of function f_GEONW_PON_LOS_BV_10_nodeC
+
+ } // end GEONW_PON_LOS_BV_10
+
+ group GEONW_PON_LOS_BV_11 {
+
+ /**
+ * @desc TP Function for TC_GEONW_PON_LOS_BV_11
+ */
+ function f_GEONW_PON_LOS_BV_11() runs on ItsMtc {
+
+ // Local variables
+ var ItsGeoNetworking v_nodeB;
+ var ItsGeoNetworking v_nodeC;
+
+ // Test control
+ if (not PICS_GN_LS_FWD) {
+ log("*** " & testcasename() & ": PICS_GN_LS_FWD required for executing the TC ***");
+ setverdict(inconc);
+ stop;
+ }
+
+ // Test component configuration
+ f_cf03Up();
+
+ // Preamble
+
+ // Start components
+ v_nodeB := f_getComponent(c_compNodeB);
+ v_nodeC := f_getComponent(c_compNodeC);
+ v_nodeB.start(f_GEONW_PON_LOS_BV_11_nodeB());
+ v_nodeC.start(f_GEONW_PON_LOS_BV_11_nodeC());
+
+ // Synchronization
+ f_serverSync2ClientsAndStop({c_prDone, c_tbDone});
+
+ // Cleanup
+ f_cf03Down();
+
+ } // End of function f_GEONW_PON_LOS_BV_11
+
+ /**
+ * @desc Behavior function for NodeB (TC_GEONW_PON_LOS_BV_11)
+ */
+ function f_GEONW_PON_LOS_BV_11_nodeB() runs on ItsGeoNetworking {
+
+ // Local variables
+ var LongPosVector v_longPosVectorNodeA := f_getPosition(c_compNodeA);
+ var LongPosVector v_longPosVectorNodeB := f_getPosition(c_compNodeB);
+
+ // Preamble
+ f_prNeighbour();
+ f_selfOrClientSyncAndVerdict(c_prDone, e_success);
+
+ // Test Body
+ tc_ac.start;
+ alt {
+ [] geoNetworkingPort.receive(
+ mw_geoNwInd(
+ mw_geoNwPdu(
+ mw_geoNwLsReplyPacket(
+ mw_longPosVectorPosition(v_longPosVectorNodeA),
+ mw_shortPosVectorPosition(f_longPosVector2ShortPosVector(v_longPosVectorNodeB))
+ ),
+ -,
+ c_defaultHopLimit - 1
+ )
+ )
+ ) {
+ log("*** " & testcasename() & ": PASS: Forwarded LS Reply received ***");
+ f_selfOrClientSyncAndVerdict(c_tbDone, e_success);
+ }
+ [] tc_ac.timeout {
+ log("*** " & testcasename() & ": FAIL: LS Reply was not forwarded ***");
+ f_selfOrClientSyncAndVerdict(c_tbDone, e_error);
+ }
+ }
+
+ // Postamble
+ f_poNeighbour();
+
+ } // End of function f_GEONW_PON_LOS_BV_11_nodeB
+
+ /**
+ * @desc Behavior function for NodeC (TC_GEONW_PON_LOS_BV_11)
+ */
+ function f_GEONW_PON_LOS_BV_11_nodeC() runs on ItsGeoNetworking {
+
+ // Local variables
+
+ // Preamble
+ f_prNeighbour();
+
+ f_selfOrClientSyncAndVerdict(c_prDone, e_success);
+
+ // Test Body
+ f_sendGeoNetMessage(
+ valueof(m_geoNwReq_linkLayerBroadcast(
+ m_geoNwPdu(
+ m_geoNwLsReplyPacket(
+ f_getPosition(c_compNodeA),
+ f_longPosVector2ShortPosVector(f_getPosition(c_compNodeB)),
+ vc_localSeqNumber
+ ),
+ -,
+ c_defaultHopLimit
+ )
+ )
+ ));
+ f_selfOrClientSyncAndVerdict(c_tbDone, e_success);
+
+ // Postamble
+ f_poNeighbour();
+
+ } // End of function f_GEONW_PON_LOS_BV_11_nodeC
+
+ } // end GEONW_PON_LOS_BV_11
+
+ /**
+ * @desc TP Function for TC_GEONW_PON_LOS_BV_12
+ */
+ function f_GEONW_PON_LOS_BV_12() runs on ItsGeoNetworking {
+
+ // Local variables
+ var LongPosVector v_longPosVectorNodeA;
+ var LongPosVector v_longPosVectorIut;
+ var UInt16 v_seqNbr := vc_localSeqNumber;
+
+ // 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();
+ v_longPosVectorNodeA := f_getPosition(c_compNodeA);
+
+ // Test adapter configuration
+
+ // Preamble
+ f_prNeighbour();
+ 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) {
+ tc_ac.stop;
+ f_selfOrClientSyncAndVerdict(c_tbDone, e_success);
+ }
+ [] tc_ac.timeout {
+ log("*** " & testcasename() & ": INCONC: Pre-conditions: LS Request not received ***");
+ f_selfOrClientSyncAndVerdict(c_prDone, e_timeout);
+ }
+ }
+
+ // Test Body
+ f_sendGeoNetMessage(
+ valueof(m_geoNwReq_linkLayerBroadcast(
+ m_geoNwPdu(
+ m_geoNwUnicastPacket(
+ v_longPosVectorNodeA,
+ f_longPosVector2ShortPosVector(v_longPosVectorIut),
+ vc_localSeqNumber
+ )
+ )
+ )
+ ));
+
+ tc_ac.start;
+ alt {
+ [] a_receiveGeoUnicastWithDestination(mw_shortPosVectorPosition(f_longPosVector2ShortPosVector(v_longPosVectorNodeA))) {
+ tc_ac.stop;
+ log("*** " & testcasename() & ": PASS: GUC packet received correctly ***");
+ 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();
+ f_cf01Down();
+
+ } // End of function f_GEONW_PON_LOS_BV_12
+
+ /**
+ * @desc TP Function for TC_GEONW_PON_LOS_BV_13
+ */
+ function f_GEONW_PON_LOS_BV_13() runs on ItsGeoNetworking {
+
+ // Local variables
+ var LongPosVector v_longPosVectorNodeA;
+ var LongPosVector v_longPosVectorIut;
+ var integer v_lt1 := f_getLsMaxRetrans()*float2int(f_getLsRetransmitTimer());
+ var integer v_lt2 := float2int(int2float(v_lt1)/2.0);
+ var octetstring v_payload1 := char2oct("PAYLOAD_1");
+ var octetstring v_payload2 := char2oct("PAYLOAD_2");
+ var boolean v_msg1Received := false;
+
+ // 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();
+ v_longPosVectorNodeA := f_getPosition(c_compNodeA);
+
+ // Test adapter configuration
+
+ // Preamble
+ f_prNeighbour();
+
+ if ( not f_utTriggerEvent(m_generateGeoUnicastMessageWithLifetimeWithPayload(v_longPosVectorNodeA.gnAddr, v_lt2*1000, v_payload2)) ) {
+ log("*** " & testcasename() & ": INCONC: Trigger failed ***");
+ f_selfOrClientSyncAndVerdict(c_prDone, e_timeout);
+ }
+ if ( not f_utTriggerEvent(m_generateGeoUnicastMessageWithLifetimeWithPayload(v_longPosVectorNodeA.gnAddr, v_lt1*1000, v_payload1)) ) {
+ log("*** " & testcasename() & ": INCONC: Trigger failed ***");
+ f_selfOrClientSyncAndVerdict(c_prDone, e_timeout);
+ }
+
+ tc_ac.start;
+ alt {
+ [] a_receiveLsRequest(?, v_longPosVectorNodeA.gnAddr.mid, v_longPosVectorIut) {
+ tc_ac.stop;
+ f_selfOrClientSyncAndVerdict(c_prDone, e_success);
+ }
+
+ [] tc_ac.timeout {
+ log("*** " & testcasename() & ": INCONC: Pre-conditions: LS Request not received ***");
+ f_selfOrClientSyncAndVerdict(c_prDone, e_timeout);
+ }
+ }
+ f_selfOrClientSyncAndVerdict(c_prDone, e_success);
+
+ // Test Body
+ //Send LS-REPLY after LT2 expiry
+ f_sleepIgnoreDef(int2float(v_lt2));
+
+ f_sendGeoNetMessage(
+ valueof(m_geoNwReq_linkLayerBroadcast(
+ m_geoNwPdu(
+ m_geoNwLsReplyPacket(
+ v_longPosVectorNodeA,
+ f_longPosVector2ShortPosVector(v_longPosVectorIut),
+ vc_localSeqNumber
+ )
+ )
+ )
+ ));
+
+ tc_ac.start;
+ alt {
+ [] a_receiveLsRequest(?, v_longPosVectorNodeA.gnAddr.mid, v_longPosVectorIut) {
+ log("*** " & testcasename() & ": INFO: LS Request retransmission ignored ***");
+ repeat;
+ }
+ [] geoNetworkingPort.receive(
+ f_receiveGeoNetMessageWithPayload(
+ mw_geoNwInd(
+ mw_geoNwPdu(
+ mw_geoNwUnicastPacket(
+ mw_shortPosVectorPosition(f_longPosVector2ShortPosVector(v_longPosVectorNodeA)),
+ ?
+ )
+ )
+ ),
+ v_payload1
+ )
+ ) {
+ v_msg1Received := true;
+ repeat;
+ }
+ [] geoNetworkingPort.receive(
+ f_receiveGeoNetMessageWithPayload(
+ mw_geoNwInd(
+ mw_geoNwPdu(
+ mw_geoNwUnicastPacket(
+ mw_shortPosVectorPosition(f_longPosVector2ShortPosVector(v_longPosVectorNodeA)),
+ ?
+ )
+ )
+ ),
+ v_payload2
+ )
+ ) {
+ tc_ac.stop;
+ log("*** " & testcasename() & ": FAIL: message with elapsed lifetime received ***");
+ f_selfOrClientSyncAndVerdict(c_tbDone, e_error);
+ }
+ [] tc_ac.timeout {
+ if(v_msg1Received == true) {
+ log("*** " & testcasename() & ": PASS: message with running lifetime received ***");
+ f_selfOrClientSyncAndVerdict(c_tbDone, e_success);
+ }
+ else {
+ log("*** " & testcasename() & ": FAIL: message with running lifetime not received ***");
+ f_selfOrClientSyncAndVerdict(c_tbDone, e_error);
+ }
+ }
+ }
+
+ // Postamble
+ f_poNeighbour();
+ f_cf01Down();
+
+ } // End of function f_GEONW_PON_LOS_BV_13
+
+ /**
+ * @desc TP Function for TC_GEONW_PON_LOS_BV_13
+ */
+ function f_GEONW_PON_LOS_BV_14() runs on ItsGeoNetworking {
+
+ // Local variables
+ var LongPosVector v_longPosVectorNodeA;
+ var LongPosVector v_longPosVectorIut;
+ var integer v_maxNbrRetrans := f_getLsMaxRetrans();
+ var integer v_nbLsReceived := 0;
+ var UInt16 v_LT1;
+
+ // 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();
+ v_longPosVectorNodeA := f_getPosition(c_compNodeA);
+
+ // Test adapter configuration
+
+ // Preamble
+ f_prNeighbour();
+ v_LT1 := float2int(int2float(v_maxNbrRetrans + 2) * f_getLsRetransmitTimer() * 1000.0);
+ if ( not f_utTriggerEvent(m_generateGeoUnicastMessageWithLifetime(v_longPosVectorNodeA.gnAddr,v_LT1)) ) {
+ log("*** " & testcasename() & ": INCONC: Trigger failed ***");
+ f_selfOrClientSyncAndVerdict(c_prDone, e_timeout);
+ }
+
+ tc_wait.start(int2float(v_LT1));
+ tc_ac.start;
+ alt {
+ [] a_receiveLsRequest(?, v_longPosVectorNodeA.gnAddr.mid, v_longPosVectorIut) {
+ tc_ac.stop;
+ f_selfOrClientSyncAndVerdict(c_prDone, e_success);
+ }
+ [] tc_ac.timeout {
+ log("*** " & testcasename() & ": Pre-conditions: Expected message not received ***");
+ f_selfOrClientSyncAndVerdict(c_prDone, e_timeout);
+ }
+ }
+
+ tc_ac.start;
+ alt {
+ [] a_receiveLsRequest(?, v_longPosVectorNodeA.gnAddr.mid, v_longPosVectorIut) {
+ tc_ac.stop;
+ v_nbLsReceived := v_nbLsReceived + 1;
+ if(v_nbLsReceived > v_maxNbrRetrans) {
+ //first LS request is not counted as a retransmission
+ log("*** " & testcasename() & ": Pre-conditions: LS_REQUEST retransmitted more than itsGnLocationServiceMaxRetrans times ***");
+ f_selfOrClientSyncAndVerdict(c_prDone, e_error);
+ }
+ else {
+ tc_ac.start;
+ repeat;
+ }
+ }
+ [] tc_ac.timeout {
+ if(v_nbLsReceived == (v_maxNbrRetrans)) {
+ //first LS request is not counted as a retransmission
+ log("*** " & testcasename() & ": Pre-conditions: LS_REQUEST retransmitted itsGnLocationServiceMaxRetrans times ***");
+ f_selfOrClientSyncAndVerdict(c_prDone, e_success);
+ }
+ else {
+ log("*** " & testcasename() & ": Pre-conditions: LS_REQUEST retransmitted less than itsGnLocationServiceMaxRetrans times ***");
+ f_selfOrClientSyncAndVerdict(c_prDone, e_error);
+ }
+ }
+ }
+
+ // Test Body
+ if (tc_wait.running) {
+ f_sendGeoNetMessage(
+ valueof(m_geoNwReq_linkLayerBroadcast(
+ m_geoNwPdu(
+ m_geoNwUnicastPacket(
+ v_longPosVectorNodeA,
+ f_longPosVector2ShortPosVector(v_longPosVectorIut),
+ vc_localSeqNumber
+ )
+ )
+ )
+ ));
+ tc_wait.stop;
+
+ tc_noac.start;
+ alt {
+ // no check for ItsNodeA address as no other trigger for messages exists
+ [] geoNetworkingPort.receive {
+ tc_noac.stop;
+ log("*** " & testcasename() & ": FAIL: Unexpected message received ***");
+ f_selfOrClientSyncAndVerdict(c_tbDone, e_error);
+ }
+ [] tc_noac.timeout {
+ log("*** " & testcasename() & ": PASS: No message was sent ***");
+ f_selfOrClientSyncAndVerdict(c_tbDone, e_success);
+ }
+ }
+ }
+ else {
+ log("*** " & testcasename() & ": FAIL: LT1 expired ***");
+ f_selfOrClientSyncAndVerdict(c_tbDone, e_error);
+ }
+
+ // Postamble
+ f_poNeighbour();
+ f_cf01Down();
+
+ } // End of function f_GEONW_PON_LOS_BV_14
+
+ /**
+ * @desc TP Function for TC_GEONW_PON_LOS_BV_15
+ */
+ function f_GEONW_PON_LOS_BV_15() runs on ItsGeoNetworking {
+
+ // Local variables
+ var LongPosVector v_longPosVectorNodeA;
+ var LongPosVector v_longPosVectorNodeB;
+ var LongPosVector v_longPosVectorIut;
+
+ // 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();
+ v_longPosVectorNodeA := f_getPosition(c_compNodeA);
+ v_longPosVectorNodeB := f_getPosition(c_compNodeB);
+
+ // Test adapter configuration
+
+ // Preamble
+ f_prNeighbour();
+ 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) {
+ tc_ac.stop;
+ f_selfOrClientSyncAndVerdict(c_tbDone, e_success);
+ }
+ [] tc_ac.timeout {
+ log("*** " & testcasename() & ": INCONC: Pre-conditions: LS Request not received ***");
+ f_selfOrClientSyncAndVerdict(c_prDone, e_timeout);
+ }
+ }
+
+ // Test Body
+ f_sendGeoNetMessage(
+ valueof(m_geoNwReq_linkLayerBroadcast(
+ m_geoNwPdu(
+ m_geoNwUnicastPacket(
+ v_longPosVectorNodeA,
+ f_longPosVector2ShortPosVector(v_longPosVectorNodeB),
+ vc_localSeqNumber
+ )
+ )
+ )
+ ));
+
+ tc_ac.start;
+ alt {
+ [] a_receiveGeoUnicastWithDestination(mw_shortPosVectorPosition(f_longPosVector2ShortPosVector(v_longPosVectorNodeA))) {
+ tc_ac.stop;
+ log("*** " & testcasename() & ": PASS: GUC packet received correctly ***");
+ 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();
+ f_cf01Down();
+
+ } // End of function f_GEONW_PON_LOS_BV_15
+
+ /**
+ * @desc TP Function for TC_GEONW_PON_LOS_BV_16
+ */
+ function f_GEONW_PON_LOS_BV_16() runs on ItsGeoNetworking {
+
+ // Local variables
+ var LongPosVector v_longPosVectorNodeA;
+ var LongPosVector v_longPosVectorNodeB;
+ var LongPosVector v_longPosVectorIut;
+
+ // 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();
+ v_longPosVectorNodeA := f_getPosition(c_compNodeA);
+ v_longPosVectorNodeB := f_getPosition(c_compNodeB);
+
+ // Test adapter configuration
+
+ // Preamble
+ f_prNeighbour();
+ 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) {
+ tc_ac.stop;
+ f_selfOrClientSyncAndVerdict(c_tbDone, e_success);
+ }
+ [] tc_ac.timeout {
+ log("*** " & testcasename() & ": INCONC: Pre-conditions: LS Request not received ***");
+ f_selfOrClientSyncAndVerdict(c_prDone, e_timeout);
+ }
+ }
+
+ // Test Body
+ f_sendGeoNetMessage(
+ valueof(m_geoNwReq_linkLayerBroadcast(
+ m_geoNwPdu(
+ m_geoNwUnicastPacket(
+ v_longPosVectorNodeA,
+ f_longPosVector2ShortPosVector(v_longPosVectorIut),
+ vc_localSeqNumber
+ )
+ )
+ )
+ ));
+
+ tc_noac.start;
+ alt {
+ [] a_receiveLsRequest(?, v_longPosVectorNodeA.gnAddr.mid, v_longPosVectorIut) {
+ tc_noac.stop;
+ log("*** " & testcasename() & ": FAIL: LS Request retransmitted ***");
+ f_selfOrClientSyncAndVerdict(c_tbDone, e_error);
+ }
+ [] a_receiveGeoUnicastWithDestination(mw_shortPosVectorPosition(f_longPosVector2ShortPosVector(v_longPosVectorNodeA))) {
+ log("*** " & testcasename() & ": INFO: GUC packet received ***");
+ repeat;
+ }
+ [] tc_noac.timeout {
+ log("*** " & testcasename() & ": PASS: LS Request not retransmitted ***");
+ f_selfOrClientSyncAndVerdict(c_tbDone, e_success);
+ }
+ }
+
+ // Postamble
+ f_poNeighbour();
+ f_cf01Down();
+
+ } // End of function f_GEONW_PON_LOS_BV_16
+
+ /**
+ * @desc TP Function for TC_GEONW_PON_LOS_BV_17
+ */
+ function f_GEONW_PON_LOS_BV_17() runs on ItsGeoNetworking {
+
+ // Local variables
+ var LongPosVector v_longPosVectorNodeA;
+ var LongPosVector v_longPosVectorNodeB;
+ var LongPosVector v_longPosVectorIut;
+
+ // 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();
+ v_longPosVectorNodeA := f_getPosition(c_compNodeA);
+ v_longPosVectorNodeB := f_getPosition(c_compNodeB);
+
+ // Test adapter configuration
+
+ // Preamble
+ f_prNeighbour();
+ 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) {
+ tc_ac.stop;
+ f_selfOrClientSyncAndVerdict(c_tbDone, e_success);
+ }
+ [] tc_ac.timeout {
+ log("*** " & testcasename() & ": INCONC: Pre-conditions: LS Request not received ***");
+ f_selfOrClientSyncAndVerdict(c_prDone, e_timeout);
+ }
+ }
+
+ // Test Body
+ f_sendGeoNetMessage(
+ valueof(m_geoNwReq_linkLayerBroadcast(
+ m_geoNwPdu(
+ m_geoNwUnicastPacket(
+ v_longPosVectorNodeA,
+ f_longPosVector2ShortPosVector(v_longPosVectorNodeB),
+ vc_localSeqNumber
+ )
+ )
+ )
+ ));
+
+ tc_noac.start;
+ alt {
+ [] a_receiveLsRequest(?, v_longPosVectorNodeA.gnAddr.mid, v_longPosVectorIut) {
+ tc_noac.stop;
+ log("*** " & testcasename() & ": FAIL: LS Request retransmitted ***");
+ f_selfOrClientSyncAndVerdict(c_tbDone, e_error);
+ }
+ [] a_receiveGeoUnicastWithDestination(mw_shortPosVectorPosition(f_longPosVector2ShortPosVector(v_longPosVectorNodeA))) {
+ log("*** " & testcasename() & ": INFO: GUC packet received ***");
+ repeat;
+ }
+ [] tc_noac.timeout {
+ log("*** " & testcasename() & ": PASS: LS Request not retransmitted ***");
+ f_selfOrClientSyncAndVerdict(c_tbDone, e_success);
+ }
+ }
+
+ // Postamble
+ f_poNeighbour();
+ f_cf01Down();
+
+ } // End of function f_GEONW_PON_LOS_BV_17
+
+ } // end geoLocationService
+
+ // 6.2.2.5
+ group geoForwardingPacketBuffer {
+
+ group GEONW_PON_FPB_BV_01 {
+
+ /**
+ * @desc TP Function for TC_GEONW_PON_FPB_BV_01
+ */
+ function f_GEONW_PON_FPB_BV_01() runs on ItsMtc {
+
+ // Local variables
+ var ItsGeoNetworking v_nodeB;
+ var ItsGeoNetworking v_nodeC;
+
+ // Test control
+ if (not PICS_GN_GUC_SRC) {
+ log("*** " & testcasename() & ": PICS_GN_GUC_SRC required for executing the TC ***");
+ setverdict(inconc);
+ stop;
+ }
+
+ // Test component configuration
+ f_cf03Up();
+
+ // Preamble
+
+ // Start components
+ v_nodeB := f_getComponent(c_compNodeB);
+ v_nodeC := f_getComponent(c_compNodeC);
+ v_nodeB.start(f_GEONW_PON_FPB_BV_01_nodeB());
+ v_nodeC.start(f_GEONW_PON_FPB_BV_01_nodeC());
+
+ // Synchronization
+ f_serverSync2ClientsAndStop({c_prDone, c_tbDone});
+
+ // Cleanup
+ f_cf03Down();
+
+ } // End of function f_GEONW_PON_FPB_BV_01
+
+ /**
+ * @desc Behavior function for NodeB (TC_GEONW_PON_FPB_BV_01)
+ */
+ function f_GEONW_PON_FPB_BV_01_nodeB() runs on ItsGeoNetworking {
+
+ // Local variables
+ var LongPosVector v_longPosVectorNodeA := f_getPosition(c_compNodeA);
+
+ // Preamble
+ f_prDefault(); // NodeB is not yet a neighbour
+ f_selfOrClientSyncAndVerdict(c_prDone, e_success);
+
+ // Test Body
+ f_sleepIgnoreDef(1.0);
+ f_startBeingNeighbour();
+
+ tc_ac.start;
+ alt {
+ [] a_receiveAnyLsRequest() {
+ tc_ac.stop;
+ log("*** " & testcasename() & ": INCONC: Received Location Service Request ***");
+ f_selfOrClientSyncAndVerdict(c_tbDone, e_timeout);
+ }
+ [] geoNetworkingPort.receive(mw_geoNwInd(mw_geoNwPdu(mw_geoNwUnicastPacket(
+ mw_shortPosVectorPosition(f_longPosVector2ShortPosVector(v_longPosVectorNodeA)),
+ ?)))) {
+ tc_ac.stop;
+ log("*** " & testcasename() & ": PASS: packet correctly forwarded ***");
+ f_selfOrClientSyncAndVerdict(c_tbDone, e_success);
+ }
+ [] tc_ac.timeout {
+ log("*** " & testcasename() & ": INCONC: Expected message not received ***");
+ f_selfOrClientSyncAndVerdict(c_tbDone, e_timeout);
+ }
+ }
+
+ // Postamble
+ f_poNeighbour();
+
+ } // End of function f_GEONW_PON_FPB_BV_01_nodeB
+
+ /**
+ * @desc Behavior function for NodeC (TC_GEONW_PON_FPB_BV_01)
+ */
+ function f_GEONW_PON_FPB_BV_01_nodeC() runs on ItsGeoNetworking {
+
+ // Local variables
+ var LongPosVector v_longPosVectorNodeA := f_getPosition(c_compNodeA);
+ var LongPosVector v_longPosVectorIut := f_getPosition(c_compIut);
+
+ // Preamble
+ f_prNeighbour();
+
+ // Make sure IUT has LocE for NodeA by sending unsolicited LS_REPLY
+ f_sendGeoNetMessage(valueof(m_geoNwReq_linkLayerBroadcast(m_geoNwPdu(
+ m_geoNwLsReplyPacket(
+ v_longPosVectorNodeA,
+ f_longPosVector2ShortPosVector(v_longPosVectorIut),
+ vc_localSeqNumber
+ )
+ ))));
+
+ f_selfOrClientSyncAndVerdict(c_prDone, e_success);
+
+ // Test Body
+ // /!\ This pre-condition has impact on test body
+ if ( not f_utTriggerEvent(m_generateGeoUnicastMessage(v_longPosVectorNodeA.gnAddr)) ) {
+ log("*** " & testcasename() & ": INCONC: Trigger failed ***");
+ f_selfOrClientSyncAndVerdict(c_tbDone, e_timeout);
+ }
+ tc_noac.start;
+ alt {
+ [] geoNetworkingPort.receive(mw_geoNwInd(mw_geoNwPdu(?))) {
+ tc_noac.stop;
+ log("*** " & testcasename() & ": FAIL: GUC packet received ***");
+ f_selfOrClientSyncAndVerdict(c_tbDone, e_error);
+ }
+ [] tc_noac.timeout {
+ log("*** " & testcasename() & ": PASS: No message received ***");
+ f_selfOrClientSyncAndVerdict(c_tbDone, e_success);
+ }
+ }
+
+ // Postamble
+ f_poNeighbour();
+
+ } // End of function f_GEONW_PON_FPB_BV_01_nodeC
+
+ } // end GEONW_PON_FPB_BV_01
+
+ group GEONW_PON_FPB_BV_02 {
+
+ /**
+ * @desc TP Function for TC_GEONW_PON_FPB_BV_02
+ */
+ function f_GEONW_PON_FPB_BV_02() runs on ItsMtc {
+
+ // Local variables
+ var ItsGeoNetworking v_nodeB;
+ var ItsGeoNetworking v_nodeC;
+ var UInt16 c_sequenceNumberC := f_getInitialSequenceNumber();
+
+ // Test control
+ if (not PICS_GN_GUC_SRC) {
+ log("*** " & testcasename() & ": PICS_GN_GUC_SRC required for executing the TC ***");
+ setverdict(inconc);
+ stop;
+ }
+
+ // Test component configuration
+ f_cf03Up();
+
+ // Preamble
+
+ // Start components
+ v_nodeB := f_getComponent(c_compNodeB);
+ v_nodeC := f_getComponent(c_compNodeC);
+ v_nodeB.start(f_GEONW_PON_FPB_BV_02_nodeB(c_sequenceNumberC));
+ v_nodeC.start(f_GEONW_PON_FPB_BV_02_nodeC(c_sequenceNumberC));
+
+ // Synchronization
+ f_serverSync2ClientsAndStop({c_prDone, c_tbDone});
+
+ // Cleanup
+ f_cf03Down();
+
+ } // End of function f_GEONW_PON_FPB_BV_02
+
+ /**
+ * @desc Behavior function for NodeB (TC_GEONW_PON_FPB_BV_02)
+ */
+ function f_GEONW_PON_FPB_BV_02_nodeB(in UInt16 p_sequenceNumberC) runs on ItsGeoNetworking {
+
+ // Local variables
+ var LongPosVector v_longPosVectorNodeA := f_getPosition(c_compNodeA);
+
+ // Preamble
+ f_prDefault(); // NodeB is not yet a neighbour
+ vc_localSeqNumber := p_sequenceNumberC;
+ f_selfOrClientSyncAndVerdict(c_prDone, e_success);
+
+ // Test Body
+ f_sleep(1.0);
+ f_startBeingNeighbour();
+
+ tc_ac.start;
+ alt {
+ [] geoNetworkingPort.receive(
+ mw_geoNwInd(
+ mw_geoNwPdu(
+ mw_geoNwUnicastPacket(
+ mw_shortPosVectorPosition(f_longPosVector2ShortPosVector(v_longPosVectorNodeA)),
+ vc_localSeqNumber
+ ),
+ -,
+ c_defaultHopLimit - 1
+ )
+ )
+ ) {
+ 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 of function f_GEONW_PON_FPB_BV_02_nodeB
+
+ /**
+ * @desc Behavior function for NodeC (TC_GEONW_PON_FPB_BV_02)
+ */
+ function f_GEONW_PON_FPB_BV_02_nodeC(in UInt16 p_sequenceNumberC) runs on ItsGeoNetworking {
+
+ // Local variables
+ var LongPosVector v_longPosVectorNodeA := f_getPosition(c_compNodeA);
+ var LongPosVector v_longPosVectorNodeC := f_getPosition(c_compNodeC);
+
+ // Preamble
+ f_prNeighbour();
+ vc_localSeqNumber := p_sequenceNumberC;
+
+ f_sendGeoNetMessage(
+ valueof(m_geoNwReq_linkLayerBroadcast(
+ m_geoNwPdu(
+ m_geoNwUnicastPacket(
+ v_longPosVectorNodeC,
+ f_longPosVector2ShortPosVector(v_longPosVectorNodeA),
+ vc_localSeqNumber
+ ),
+ -,
+ c_defaultHopLimit
+ )
+ )
+ ));
+
+ f_selfOrClientSyncAndVerdict(c_prDone, e_success);
+
+ // Test Body
+ f_selfOrClientSyncAndVerdict(c_tbDone, e_success);
+
+ // Postamble
+ f_poNeighbour();
+
+ } // End of function f_GEONW_PON_FPB_BV_02_nodeC
+
+ } // end GEONW_PON_FPB_BV_02
+
+ group GEONW_PON_FPB_BV_03 {
+
+ /**
+ * @desc TP Function for TC_GEONW_PON_FPB_BV_03
+ */
+ function f_GEONW_PON_FPB_BV_03() runs on ItsMtc {
+
+ // Local variables
+ var ItsGeoNetworking v_nodeB;
+ var ItsGeoNetworking v_nodeC;
+ var UInt16 c_sequenceNumberC := f_getInitialSequenceNumber();
+ const integer c_messageCount := 2;
+
+ // Test control
+ if (not PICS_GN_GUC_SRC) {
+ log("*** " & testcasename() & ": PICS_GN_GUC_SRC required for executing the TC ***");
+ setverdict(inconc);
+ stop;
+ }
+
+ // Test component configuration
+ f_cf03Up();
+
+ // Preamble
+
+ // Start components
+ v_nodeB := f_getComponent(c_compNodeB);
+ v_nodeC := f_getComponent(c_compNodeC);
+ v_nodeB.start(f_GEONW_PON_FPB_BV_03_nodeB(c_sequenceNumberC, c_messageCount));
+ v_nodeC.start(f_GEONW_PON_FPB_BV_03_nodeC(c_sequenceNumberC, c_messageCount));
+
+ // Synchronization
+ f_serverSync2ClientsAndStop({c_prDone, c_tbDone});
+
+ // Cleanup
+ f_cf03Down();
+
+ } // End of function f_GEONW_PON_FPB_BV_03
+
+ /**
+ * @desc Behavior function for NodeB (TC_GEONW_PON_FPB_BV_03)
+ */
+ function f_GEONW_PON_FPB_BV_03_nodeB(in UInt16 p_sequenceNumberC, in integer p_messageCount) runs on ItsGeoNetworking {
+
+ // Local variables
+ var LongPosVector v_longPosVectorNodeA := f_getPosition(c_compNodeA);
+ var UInt16 v_expectedSequenceNumber := p_sequenceNumberC;
+ var integer v_nbReceivedPackets := 0;
+
+ // Preamble
+ f_prDefault(); // NodeB is not yet a neighbour
+ vc_multipleMessagesCount := p_messageCount;
+ f_selfOrClientSyncAndVerdict(c_prDone, e_success);
+
+ // Test Body
+ f_sleep(1.0);
+ f_startBeingNeighbour();
+
+ tc_ac.start;
+ alt {
+ [] a_receiveGeoUnicast(
+ mw_shortPosVectorPosition(f_longPosVector2ShortPosVector(v_longPosVectorNodeA)),
+ v_expectedSequenceNumber) {
+ tc_ac.stop;
+ v_nbReceivedPackets := v_nbReceivedPackets + 1;
+ if(v_nbReceivedPackets >= vc_multipleMessagesCount) {
+ log("*** " & testcasename() & ": PASS: GUC packets received in correct order ***");
+ f_selfOrClientSyncAndVerdict(c_tbDone, e_success);
+ }
+ else {
+ v_expectedSequenceNumber := v_expectedSequenceNumber + 1;
+ tc_ac.start;
+ repeat;
+ }
+ }
+ [] a_receiveGeoUnicast(
+ mw_shortPosVectorPosition(f_longPosVector2ShortPosVector(v_longPosVectorNodeA)),
+ ?) {
+ tc_ac.stop;
+ log("*** " & testcasename() & ": FAIL: GUC packet received in incorrect order ***");
+ f_selfOrClientSyncAndVerdict(c_tbDone, e_error);
+ }
+ [] tc_ac.timeout {
+ log("*** " & testcasename() & ": INCONC: Expected message not received ***");
+ f_selfOrClientSyncAndVerdict(c_tbDone, e_timeout);
+ }
+ }
+
+ // Postamble
+ f_poNeighbour();
+
+ } // End of function f_GEONW_PON_FPB_BV_03_nodeB
+
+ /**
+ * @desc Behavior function for NodeC (TC_GEONW_PON_FPB_BV_03)
+ */
+ function f_GEONW_PON_FPB_BV_03_nodeC(in UInt16 p_sequenceNumberC, in integer p_messageCount) 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;
+ vc_multipleMessagesCount := p_messageCount;
+
+ for(i:=0; i < vc_multipleMessagesCount; i:=i+1) {
+ f_sendGeoNetMessage(
+ valueof(m_geoNwReq_linkLayerBroadcast(
+ m_geoNwPdu(
+ m_geoNwUnicastPacket(
+ v_longPosVectorNodeC,
+ f_longPosVector2ShortPosVector(v_longPosVectorNodeA),
+ vc_localSeqNumber
+ )
+ )
+ )
+ ));
+ }
+
+ f_selfOrClientSyncAndVerdict(c_prDone, e_success);
+
+ // Test Body
+ f_selfOrClientSyncAndVerdict(c_tbDone, e_success);
+
+ // Postamble
+ f_poNeighbour();
+
+ } // End of function f_GEONW_PON_FPB_BV_03_nodeC
+
+ } // end GEONW_PON_FPB_BV_03
+
+ group GEONW_PON_FPB_BV_04 {
+
+ /**
+ * @desc TP Function for TC_GEONW_PON_FPB_BV_04
+ */
+ function f_GEONW_PON_FPB_BV_04() runs on ItsMtc {
+
+ // Local variables
+ var ItsGeoNetworking v_nodeB;
+ var ItsGeoNetworking v_nodeC;
+ const UInt6 c_packetLifetime := 10; // 10s
+
+ // Test control
+ if (not PICS_GN_GUC_SRC) {
+ log("*** " & testcasename() & ": PICS_GN_GUC_SRC required for executing the TC ***");
+ setverdict(inconc);
+ stop;
+ }
+
+ // Test component configuration
+ f_cf03Up();
+
+ // Preamble
+
+ // Start components
+ v_nodeB := f_getComponent(c_compNodeB);
+ v_nodeC := f_getComponent(c_compNodeC);
+ v_nodeB.start(f_GEONW_PON_FPB_BV_04_nodeB(c_packetLifetime));
+ v_nodeC.start(f_GEONW_PON_FPB_BV_04_nodeC(c_packetLifetime));
+
+ // Synchronization
+ f_serverSync2ClientsAndStop({c_prDone, c_tbDone});
+
+ // Cleanup
+ f_cf03Down();
+
+ } // End of function f_GEONW_PON_FPB_BV_04
+
+ /**
+ * @desc Behavior function for NodeB (TC_GEONW_PON_FPB_BV_04)
+ */
+ function f_GEONW_PON_FPB_BV_04_nodeB(in UInt6 p_packetLifetime) runs on ItsGeoNetworking {
+
+ // Local variables
+ var LongPosVector v_longPosVectorNodeA := f_getPosition(c_compNodeA);
+
+ // Preamble
+ f_prDefault(); // NodeB is not yet a neighbour
+ f_selfOrClientSyncAndVerdict(c_prDone, e_success);
+
+ // Test Body
+ f_sleep(int2float(p_packetLifetime + 1));
+ f_startBeingNeighbour();
+
+ tc_noac.start;
+ alt {
+ [] a_receiveGeoUnicast(
+ mw_shortPosVectorPosition(f_longPosVector2ShortPosVector(v_longPosVectorNodeA)),
+ ?) {
+ tc_noac.stop;
+ log("*** " & testcasename() & ": FAIL: GUC packet received ***");
+ f_selfOrClientSyncAndVerdict(c_tbDone, e_error);
+ }
+ [] tc_noac.timeout {
+ log("*** " & testcasename() & ": PASS: No message received ***");
+ f_selfOrClientSyncAndVerdict(c_tbDone, e_success);
+ }
+ }
+
+ // Postamble
+ f_poNeighbour();
+
+ } // End of function f_GEONW_PON_FPB_BV_04_nodeB
+
+ /**
+ * @desc Behavior function for NodeC (TC_GEONW_PON_FPB_BV_04)
+ */
+ function f_GEONW_PON_FPB_BV_04_nodeC(in UInt6 p_packetLifetime) runs on ItsGeoNetworking {
+
+ // Local variables
+ var LongPosVector v_longPosVectorNodeA := f_getPosition(c_compNodeA);
+ var LongPosVector v_longPosVectorNodeC := f_getPosition(c_compNodeC);
+
+ // Preamble
+ f_prNeighbour();
+
+ f_sendGeoNetMessage(
+ valueof(m_geoNwReq_linkLayerBroadcast(
+ m_geoNwPdu(
+ m_geoNwUnicastPacket(
+ v_longPosVectorNodeC,
+ f_longPosVector2ShortPosVector(v_longPosVectorNodeA),
+ vc_localSeqNumber
+ ),
+ m_lifetimeBase1s(p_packetLifetime),
+ c_defaultHopLimit
+ )
+ )
+ ));
+
+ f_selfOrClientSyncAndVerdict(c_prDone, e_success);
+
+ // Test Body
+ f_selfOrClientSyncAndVerdict(c_tbDone, e_success);
+
+ // Postamble
+ f_poNeighbour();
+
+ } // End of function f_GEONW_PON_FPB_BV_04_nodeC
+
+ } // end GEONW_PON_FPB_BV_04
+
+ group GEONW_PON_FPB_BV_06 {
+
+ /**
+ * @desc TP Function for TC_GEONW_PON_FPB_BV_06
+ */
+ function f_GEONW_PON_FPB_BV_06() runs on ItsMtc {
+
+ // Local variables
+ var ItsGeoNetworking v_nodeB;
+ var ItsGeoNetworking v_nodeD;
+
+ // Test control
+
+ // 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_FPB_BV_06_nodeB());
+ v_nodeD.start(f_GEONW_PON_FPB_BV_06_nodeD());
+
+ // Synchronization
+ f_serverSync2ClientsAndStop({c_prDone, c_tbDone});
+
+ // Cleanup
+ f_cf02Down();
+
+ } // End of function f_GEONW_PON_FPB_BV_06
+
+ /**
+ * @desc Behavior function for NodeB (TC_GEONW_PON_FPB_BV_06)
+ */
+ function f_GEONW_PON_FPB_BV_06_nodeB() runs on ItsGeoNetworking {
+
+ // Local variables
+ var LongPosVector v_longPosVectorIut := f_getPosition(c_compIut);
+ var GeoNetworkingInd v_geoNetInd;
+
+ // Preamble
+ f_prDefault();
+ if (not f_utTriggerEvent(m_generateGeoBroadcastMessage(f_getArea(c_area1))) ) {
+ log("*** " & testcasename() & ": INCONC: Trigger failed ***");
+ f_selfOrClientSyncAndVerdict(c_prDone, e_timeout);
+ }
+ f_selfOrClientSyncAndVerdict(c_prDone, e_success);
+
+ // Test Body
+ f_sleep(1.0);
+ f_startBeingNeighbour();
+ tc_ac.start;
+ alt {
+ [] geoNetworkingPort.receive(mw_geoNwInd(mw_geoNwPdu(mw_geoNwBroadcastPacket(
+ mw_longPosVectorPosition(v_longPosVectorIut),
+ ?)))) -> value v_geoNetInd {
+ tc_ac.stop;
+ log("*** " & testcasename() & ": PASS: GBC packet received correctly ***");
+ 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 of function f_GEONW_PON_FPB_BV_06_nodeB
+
+ /**
+ * @desc Behavior function for NodeD (TC_GEONW_PON_FPB_BV_06)
+ */
+ function f_GEONW_PON_FPB_BV_06_nodeD() runs on ItsGeoNetworking {
+
+ // Local variables
+ var LongPosVector v_longPosVectorIut := f_getPosition(c_compIut);
+ var GeoNetworkingInd v_geoNetInd;
+
+ // Preamble
+ f_prDefault();
+ f_selfOrClientSyncAndVerdict(c_prDone, e_success);
+
+ // Test Body
+ tc_ac.start;
+ alt {
+ [] geoNetworkingPort.receive(mw_geoNwInd(mw_geoNwPdu(mw_geoNwBroadcastPacket(
+ mw_longPosVectorPosition(v_longPosVectorIut),
+ ?)))) -> value v_geoNetInd {
+ tc_ac.stop;
+ log("*** " & testcasename() & ": PASS: GBC packet received correctly ***");
+ f_selfOrClientSyncAndVerdict(c_tbDone, e_success);
+ }
+ [] tc_ac.timeout {
+ log("*** " & testcasename() & ": FAIL: Expected message not received ***");
+ f_selfOrClientSyncAndVerdict(c_tbDone, e_error);
+ }
+ }
+
+ // Postamble
+ f_poDefault();
+
+ } // End of function f_GEONW_PON_FPB_BV_06_nodeD
+
+ } // end GEONW_PON_FPB_BV_06
+
+ group GEONW_PON_FPB_BV_07 {
+
+ /**
+ * @desc TP Function for TC_GEONW_PON_FPB_BV_07
+ */
+ function f_GEONW_PON_FPB_BV_07() runs on ItsMtc {
+
+ // Local variables
+ var ItsGeoNetworking v_nodeB;
+ var ItsGeoNetworking v_nodeD;
+ const integer v_messageCount := 2;
+
+ // Test control
+
+ // 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_FPB_BV_07_nodeB(v_messageCount));
+ v_nodeD.start(f_GEONW_PON_FPB_BV_07_nodeD(v_messageCount));
+
+ // Synchronization
+ f_serverSync2ClientsAndStop({c_prDone, c_tbDone});
+
+ // Cleanup
+ f_cf02Down();
+
+ } // End of function f_GEONW_PON_FPB_BV_07
+
+ /**
+ * @desc Behavior function for NodeB (TC_GEONW_PON_FPB_BV_07)
+ */
+ function f_GEONW_PON_FPB_BV_07_nodeB(in integer p_messageCount) runs on ItsGeoNetworking {
+
+ // Local variables
+ var LongPosVector v_longPosVectorIut := f_getPosition(c_compIut);
+ var GeoNetworkingInd v_geoNetInd;
+ var template (present) UInt16 v_expectedSequenceNumber := ?;
+ var integer v_nbReceivedPackets := 0;
+ var integer i := 0;
+
+ // Preamble
+ f_prDefault();
+ vc_multipleMessagesCount := p_messageCount;
+ for(i:=0; i < vc_multipleMessagesCount; i:=i+1) {
+ if(not f_utTriggerEvent(m_generateGeoBroadcastMessage(f_getArea(c_area1))) ) {
+ log("*** " & testcasename() & ": INCONC: Trigger failed ***");
+ f_selfOrClientSyncAndVerdict(c_prDone, e_timeout);
+ }
+ }
+
+ tc_ac.start(1.0);
+ alt {
+ [] geoNetworkingPort.receive(mw_geoNwInd(mw_geoNwPdu(mw_geoNwBroadcastPacket(
+ mw_longPosVectorPosition(v_longPosVectorIut),
+ ?)))) {
+ tc_ac.stop;
+ log("*** " & testcasename() & ": INCONC: GBC packet not buffered ***");
+ f_selfOrClientSyncAndVerdict(c_prDone, e_error);
+ }
+ [] tc_ac.timeout {
+ log("*** " & testcasename() & ": PASS: GBC packet buffered ***");
+ f_selfOrClientSyncAndVerdict(c_prDone, e_success);
+ }
+ }
+
+ // Test Body
+ f_startBeingNeighbour();
+ tc_ac.start;
+ alt {
+ [] geoNetworkingPort.receive(mw_geoNwInd(mw_geoNwPdu(mw_geoNwBroadcastPacket(
+ mw_longPosVectorPosition(v_longPosVectorIut),
+ v_expectedSequenceNumber)))) -> value v_geoNetInd {
+ tc_ac.stop;
+ v_nbReceivedPackets := v_nbReceivedPackets + 1;
+ if(v_nbReceivedPackets >= vc_multipleMessagesCount) {
+ log("*** " & testcasename() & ": PASS: GBC packets received in correct order ***");
+ f_selfOrClientSyncAndVerdict(c_tbDone, e_success);
+ }
+ else {
+ v_expectedSequenceNumber := v_geoNetInd.msgIn.gnPacket.packet.extendedHeader.geoBroadcastHeader.seqNumber + 1;
+ tc_ac.start;
+ repeat;
+ }
+ }
+ [] geoNetworkingPort.receive(mw_geoNwInd(mw_geoNwPdu(mw_geoNwBroadcastPacket(
+ mw_longPosVectorPosition(v_longPosVectorIut),
+ ?)))) {
+ tc_ac.stop;
+ log("*** " & testcasename() & ": FAIL: GBC packet received in incorrect order ***");
+ f_selfOrClientSyncAndVerdict(c_tbDone, e_error);
+ }
+ [] tc_ac.timeout {
+ log("*** " & testcasename() & ": FAIL: Expected message not received ***");
+ f_selfOrClientSyncAndVerdict(c_tbDone, e_error);
+ }
+ }
+
+ // Postamble
+ f_poNeighbour();
+
+ } // End of function f_GEONW_PON_FPB_BV_07_nodeB
+
+ /**
+ * @desc Behavior function for NodeD (TC_GEONW_PON_FPB_BV_07)
+ */
+ function f_GEONW_PON_FPB_BV_07_nodeD(in integer p_messageCount) runs on ItsGeoNetworking {
+
+ // Local variables
+ var LongPosVector v_longPosVectorIut := f_getPosition(c_compIut);
+ var GeoNetworkingInd v_geoNetInd;
+ var template (present) UInt16 v_expectedSequenceNumber := ?;
+ var integer v_nbReceivedPackets := 0;
+
+ // Preamble
+ f_prDefault();
+ vc_multipleMessagesCount := p_messageCount;
+ f_selfOrClientSyncAndVerdict(c_prDone, e_success);
+
+ // Test Body
+ tc_ac.start;
+ alt {
+ [] geoNetworkingPort.receive(mw_geoNwInd(mw_geoNwPdu(mw_geoNwBroadcastPacket(
+ mw_longPosVectorPosition(v_longPosVectorIut),
+ v_expectedSequenceNumber)))) -> value v_geoNetInd {
+ tc_ac.stop;
+ v_nbReceivedPackets := v_nbReceivedPackets + 1;
+ if(v_nbReceivedPackets >= vc_multipleMessagesCount) {
+ log("*** " & testcasename() & ": PASS: GBC packets received in correct order ***");
+ f_selfOrClientSyncAndVerdict(c_tbDone, e_success);
+ }
+ else {
+ v_expectedSequenceNumber := v_geoNetInd.msgIn.gnPacket.packet.extendedHeader.geoBroadcastHeader.seqNumber + 1;
+ tc_ac.start;
+ repeat;
+ }
+ }
+ [] geoNetworkingPort.receive(mw_geoNwInd(mw_geoNwPdu(mw_geoNwBroadcastPacket(
+ mw_longPosVectorPosition(v_longPosVectorIut),
+ ?)))) {
+ tc_ac.stop;
+ log("*** " & testcasename() & ": FAIL: GBC packet received in incorrect order ***");
+ f_selfOrClientSyncAndVerdict(c_tbDone, e_error);
+ }
+ [] tc_ac.timeout {
+ log("*** " & testcasename() & ": FAIL: Expected message not received ***");
+ f_selfOrClientSyncAndVerdict(c_tbDone, e_error);
+ }
+ }
+
+ // Postamble
+ f_poDefault();
+
+ } // End of function f_GEONW_PON_FPB_BV_07_nodeD
+
+ } // end GEONW_PON_FPB_BV_07
+
+ group GEONW_PON_FPB_BV_08 {
+
+ /**
+ * @desc TP Function for TC_GEONW_PON_FPB_BV_08
+ */
+ function f_GEONW_PON_FPB_BV_08() runs on ItsMtc {
+
+ // Local variables
+ var ItsGeoNetworking v_nodeB;
+ var ItsGeoNetworking v_nodeD;
+
+ // Test control
+
+ // 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_FPB_BV_08_nodeB());
+ v_nodeD.start(f_GEONW_PON_FPB_BV_08_nodeD());
+
+ // Synchronization
+ f_serverSync2ClientsAndStop({c_prDone, c_tbDone});
+
+ // Cleanup
+ f_cf02Down();
+
+ } // End of function f_GEONW_PON_FPB_BV_08
+
+ /**
+ * @desc Behavior function for NodeB (TC_GEONW_PON_FPB_BV_08)
+ */
+ function f_GEONW_PON_FPB_BV_08_nodeB() runs on ItsGeoNetworking {
+
+ // Local variables
+ var LongPosVector v_longPosVectorIut := f_getPosition(c_compIut);
+
+ // Preamble
+ f_prDefault();
+ if(not f_utTriggerEvent(m_generateGeoBroadcastMessageWithLifetime(f_getArea(c_area1), c_lifetime )) ) {
+ log("*** " & testcasename() & ": INCONC: Trigger failed ***");
+ f_selfOrClientSyncAndVerdict(c_prDone, e_timeout);
+ }
+ if(not f_utTriggerEvent(m_generateGeoBroadcastMessageWithLifetime(f_getArea(c_area1), c_lifetime)) ) {
+ log("*** " & testcasename() & ": INCONC: Trigger failed ***");
+ f_selfOrClientSyncAndVerdict(c_prDone, e_timeout);
+ }
+ f_selfOrClientSyncAndVerdict(c_prDone, e_success);
+
+ // Test Body
+ f_sleep(int2float(c_defaultLifetime + 1));
+ f_startBeingNeighbour();
+
+ tc_noac.start;
+ alt {
+
+ [] geoNetworkingPort.receive(mw_geoNwInd(mw_geoNwPdu(mw_geoNwBroadcastPacket(
+ mw_longPosVectorPosition(v_longPosVectorIut),
+ ?)))) {
+ tc_noac.stop;
+ log("*** " & testcasename() & ": FAIL: GBC packet received ***");
+ f_selfOrClientSyncAndVerdict(c_tbDone, e_error);
+ }
+ [] tc_noac.timeout {
+ log("*** " & testcasename() & ": PASS: No message received ***");
+ f_selfOrClientSyncAndVerdict(c_tbDone, e_success);
+ }
+ }
+
+ // Postamble
+ f_poNeighbour();
+
+ } // End of function f_GEONW_PON_FPB_BV_08_nodeB
+
+ /**
+ * @desc Behavior function for NodeD (TC_GEONW_PON_FPB_BV_08)
+ */
+ function f_GEONW_PON_FPB_BV_08_nodeD() runs on ItsGeoNetworking {
+
+ // Local variables
+ var LongPosVector v_longPosVectorIut := f_getPosition(c_compIut);
+
+ // Preamble
+ f_prDefault();
+ f_selfOrClientSyncAndVerdict(c_prDone, e_success);
+
+ // Test Body
+ f_sleep(int2float(c_defaultLifetime + 1));
+ f_startBeingNeighbour();
+
+ tc_noac.start;
+ alt {
+
+ [] geoNetworkingPort.receive(mw_geoNwInd(mw_geoNwPdu(mw_geoNwBroadcastPacket(
+ mw_longPosVectorPosition(v_longPosVectorIut),
+ ?)))) {
+ tc_noac.stop;
+ log("*** " & testcasename() & ": FAIL: GBC packet received ***");
+ f_selfOrClientSyncAndVerdict(c_tbDone, e_error);
+ }
+ [] tc_noac.timeout {
+ log("*** " & testcasename() & ": PASS: No message received ***");
+ f_selfOrClientSyncAndVerdict(c_tbDone, e_success);
+ }
+ }
+
+ // Postamble
+ f_poNeighbour();
+
+ } // End of function f_GEONW_PON_FPB_BV_08_nodeD
+
+ } // end GEONW_PON_FPB_BV_08
+
+ group GEONW_PON_FPB_BV_09 {
+
+ /**
+ * @desc TP Function for TC_GEONW_PON_FPB_BV_09
+ */
+ function f_GEONW_PON_FPB_BV_09() runs on ItsMtc {
+
+ // Local variables
+ var ItsGeoNetworking v_nodeB;
+ var ItsGeoNetworking v_nodeC;
+
+ // Test control
+ if (not PICS_GN_GUC_SRC) {
+ log("*** " & testcasename() & ": PICS_GN_GUC_SRC required for executing the TC ***");
+ setverdict(inconc);
+ stop;
+ }
+
+ // Test component configuration
+ f_cf03Up();
+
+ // Preamble
+
+ // Start components
+ v_nodeB := f_getComponent(c_compNodeB);
+ v_nodeC := f_getComponent(c_compNodeC);
+ v_nodeB.start(f_GEONW_PON_FPB_BV_09_nodeB());
+ v_nodeC.start(f_GEONW_PON_FPB_BV_09_nodeC());
+
+ // Synchronization
+ f_serverSync2ClientsAndStop({c_prDone, c_tbDone});
+
+ // Cleanup
+ f_cf03Down();
+
+ } // End of function f_GEONW_PON_FPB_BV_09
+
+ /**
+ * @desc Behavior function for NodeB (TC_GEONW_PON_FPB_BV_09)
+ */
+ function f_GEONW_PON_FPB_BV_09_nodeB() runs on ItsGeoNetworking {
+
+ // Local variables
+ var LongPosVector v_longPosVectorNodeA := f_getPosition(c_compNodeA);
+ var GeoNetworkingInd v_geoNetInd;
+
+ // Preamble
+ f_prNonNeighbour();
+ f_selfOrClientSyncAndVerdict(c_prDone, e_success);
+
+ // Test Body
+ f_sleep(1.0);
+ f_startBeingNeighbour();
+ tc_ac.start;
+ alt {
+ [] geoNetworkingPort.receive(mw_geoNwInd(mw_geoNwPdu(mw_geoNwUnicastPacket(
+ mw_shortPosVectorPosition(f_longPosVector2ShortPosVector(v_longPosVectorNodeA)),
+ ?)))) -> value v_geoNetInd {
+ tc_ac.stop;
+
+ //we only check that the lifetime is less than the default lifetime due to
+ //we do not know exactly the time passed at IUT
+ if (f_getLifetimeValue(v_geoNetInd.msgIn.basicHeader.lifeTime) < f_getMaxPacketLifeTime()) {
+ log("*** " & testcasename() & ": PASS: Lifetime was handled properly ***");
+ f_selfOrClientSyncAndVerdict(c_tbDone, e_success);
+ }
+ else {
+ log("*** " & testcasename() & ": FAIL: Lifetime was not handled properly ***");
+ f_selfOrClientSyncAndVerdict(c_tbDone, e_error);
+ }
+ }
+ [] tc_ac.timeout {
+ log("*** " & testcasename() & ": FAIL: Expected message not received ***");
+ f_selfOrClientSyncAndVerdict(c_tbDone, e_error);
+ }
+ }
+
+ // Postamble
+ f_poNeighbour();
+
+ } // End of function f_GEONW_PON_FPB_BV_09_nodeB
+
+ /**
+ * @desc Behavior function for NodeC (TC_GEONW_PON_FPB_BV_09)
+ */
+ function f_GEONW_PON_FPB_BV_09_nodeC() runs on ItsGeoNetworking {
+
+ // Local variables
+ var LongPosVector v_longPosVectorNodeA := f_getPosition(c_compNodeA);
+ var LongPosVector v_longPosVectorIut := f_getPosition(c_compIut);
+
+ // Preamble
+ f_prNeighbour();
+
+ // Make sure IUT has LocE for NodeA by sending unsolicited LS_REPLY
+ f_sendGeoNetMessage(valueof(m_geoNwReq_linkLayerBroadcast(m_geoNwPdu(
+ m_geoNwLsReplyPacket(
+ v_longPosVectorNodeA,
+ f_longPosVector2ShortPosVector(v_longPosVectorIut),
+ vc_localSeqNumber
+ )
+ ))));
+
+ if ( not f_utTriggerEvent(m_generateGeoUnicastMessage(v_longPosVectorNodeA.gnAddr)) ) {
+ log("*** " & testcasename() & ": INCONC: Trigger failed ***");
+ f_selfOrClientSyncAndVerdict(c_prDone, e_timeout);
+ }
+ f_selfOrClientSyncAndVerdict(c_prDone, e_success);
+
+ // Test Body
+ f_selfOrClientSyncAndVerdict(c_tbDone, e_success);
+
+ // Postamble
+ f_poNeighbour();
+
+ } // End of function f_GEONW_PON_FPB_BV_09_nodeC
+
+ } // end GEONW_PON_FPB_BV_09
+
+ group GEONW_PON_FPB_BV_10 {
+
+ /**
+ * @desc TP Function for TC_GEONW_PON_FPB_BV_10
+ */
+ function f_GEONW_PON_FPB_BV_10() runs on ItsMtc {
+
+ // Local variables
+ var ItsGeoNetworking v_nodeB;
+ var ItsGeoNetworking v_nodeD;
+
+ // Test control
+
+ // 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_FPB_BV_10_nodeB());
+ v_nodeD.start(f_GEONW_PON_FPB_BV_10_nodeD());
+
+ // Synchronization
+ f_serverSync2ClientsAndStop({c_prDone, c_tbDone});
+
+ // Cleanup
+ f_cf02Down();
+
+ } // End of function f_GEONW_PON_FPB_BV_10
+
+ /**
+ * @desc Behavior function for NodeB (TC_GEONW_PON_FPB_BV_10)
+ */
+ function f_GEONW_PON_FPB_BV_10_nodeB() runs on ItsGeoNetworking {
+
+ // Local variables
+ var LongPosVector v_longPosVectorIut := f_getPosition(c_compIut);
+ var GeoNetworkingInd v_geoNetInd;
+
+ // Preamble
+ f_prDefault();
+ if(not f_utTriggerEvent(m_generateGeoBroadcastMessage(f_getArea(c_area1))) ) {
+ log("*** " & testcasename() & ": INCONC: Trigger failed ***");
+ f_selfOrClientSyncAndVerdict(c_prDone, e_timeout);
+ }
+ f_selfOrClientSyncAndVerdict(c_prDone, e_success);
+
+ // Test Body
+ f_sleep(1.0);
+ f_startBeingNeighbour();
+ tc_ac.start;
+ alt {
+ [] geoNetworkingPort.receive(mw_geoNwInd(mw_geoNwPdu(mw_geoNwBroadcastPacket(
+ mw_longPosVectorPosition(v_longPosVectorIut),
+ ?)))) -> value v_geoNetInd {
+ tc_ac.stop;
+
+ //we only check that the lifetime is less than the default lifetime due to
+ //we do not know exactly the time passed at IUT
+ if (f_getLifetimeValue(v_geoNetInd.msgIn.basicHeader.lifeTime) < f_getMaxPacketLifeTime()) {
+ log("*** " & testcasename() & ": PASS: Lifetime was handled properly ***");
+ f_selfOrClientSyncAndVerdict(c_tbDone, e_success);
+ }
+ else {
+ log("*** " & testcasename() & ": FAIL: Lifetime was not handled properly ***");
+ f_selfOrClientSyncAndVerdict(c_tbDone, e_error);
+ }
+ }
+ [] tc_ac.timeout {
+ log("*** " & testcasename() & ": FAIL: Expected message not received ***");
+ f_selfOrClientSyncAndVerdict(c_tbDone, e_error);
+ }
+ }
+
+ // Postamble
+ f_poNeighbour();
+
+ } // End of function f_GEONW_PON_FPB_BV_10_nodeB
+
+ /**
+ * @desc Behavior function for NodeD (TC_GEONW_PON_FPB_BV_10)
+ */
+ function f_GEONW_PON_FPB_BV_10_nodeD() runs on ItsGeoNetworking {
+
+ // Local variables
+ var LongPosVector v_longPosVectorIut := f_getPosition(c_compIut);
+
+ // Preamble
+ f_prDefault();
+ f_selfOrClientSyncAndVerdict(c_prDone, e_success);
+
+ // Test Body
+ tc_ac.start;
+ alt {
+ [] geoNetworkingPort.receive(mw_geoNwInd(mw_geoNwPdu(mw_geoNwBroadcastPacket(
+ mw_longPosVectorPosition(v_longPosVectorIut),
+ ?)))) {
+ tc_ac.stop;
+ log("*** " & testcasename() & ": PASS: GBC packet received correctly ***");
+ f_selfOrClientSyncAndVerdict(c_tbDone, e_success);
+ }
+
+ [] tc_ac.timeout {
+ log("*** " & testcasename() & ": FAIL: Expected message not received ***");
+ f_selfOrClientSyncAndVerdict(c_tbDone, e_error);
+ }
+ }
+
+ // Postamble
+ f_poDefault();
+
+ } // End of function f_GEONW_PON_FPB_BV_10_nodeD
+
+ } // end GEONW_PON_FPB_BV_10
+
+ group GEONW_PON_FPB_BV_11 {
+
+ /**
+ * @desc TP Function for TC_GEONW_PON_FPB_BV_11_01
+ */
+ function f_GEONW_PON_FPB_BV_11_01() runs on ItsMtc {
+
+ // Local variables
+ var ItsGeoNetworking v_nodeB;
+ var ItsGeoNetworking v_nodeC;
+
+ // Test control
+ if (not PICS_GN_GUC_SRC) {
+ log("*** " & testcasename() & ": PICS_GN_GUC_SRC required for executing the TC ***");
+ setverdict(inconc);
+ stop;
+ }
+
+ // Test component configuration
+ f_cf03Up(c_compNodeC);
+
+ // Preamble
+
+ // Start components
+ v_nodeB := f_getComponent(c_compNodeB);
+ v_nodeC := f_getComponent(c_compNodeC);
+ v_nodeB.start(f_GEONW_PON_FPB_BV_11_01_nodeB());
+ v_nodeC.start(f_GEONW_PON_FPB_BV_11_01_nodeC());
+
+ // Synchronization
+ f_serverSync2ClientsAndStop({c_prDone, c_tbDone});
+
+ // Cleanup
+ f_cf03Down();
+
+ } // End of function f_GEONW_PON_FPB_BV_11_01
+
+ /**
+ * @desc Behavior function for NodeB (TC_GEONW_PON_FPB_BV_11_01)
+ */
+ function f_GEONW_PON_FPB_BV_11_01_nodeB() runs on ItsGeoNetworking {
+
+ // Local variablesa
+ var LongPosVector v_longPosVectorNodeA := f_getPosition(c_compNodeA);
+
+ // Preamble
+ f_prNonNeighbour();
+ f_selfOrClientSyncAndVerdict(c_prDone, e_success);
+
+ // Test Body
+ tc_ac.start;
+ alt {
+ [] geoNetworkingPort.receive(
+ mw_geoNwInd(
+ mw_geoNwPdu(
+ mw_geoNwUnicastPacket(
+ f_longPosVector2ShortPosVector(v_longPosVectorNodeA),
+ ?
+ )
+ )
+ )
+ ) {
+ tc_ac.stop;
+ log("*** " & testcasename() & ": PASS: Pre-conditions: TSB correctly broadcasted ***");
+ f_selfOrClientSyncAndVerdict(c_tbDone, e_success);
+ }
+ [] tc_ac.timeout {
+ log("*** " & testcasename() & ": FAIL: Pre-conditions: TSB not broadcasted ***");
+ f_selfOrClientSyncAndVerdict(c_tbDone, e_error);
+ }
+ }
+
+ // Postamble
+ f_poDefault();
+
+ } // End of function f_GEONW_PON_FPB_BV_11_01_nodeB
+
+ /**
+ * @desc Behavior function for NodeC (TC_GEONW_PON_FPB_BV_11_01)
+ */
+ function f_GEONW_PON_FPB_BV_11_01_nodeC() runs on ItsGeoNetworking {
+
+ // Local variables
+ var LongPosVector v_longPosVectorNodeA := f_getPosition(c_compNodeA);
+ var LongPosVector v_longPosVectorIut := f_getPosition(c_compIut);
+
+ // Preamble
+ f_prNonNeighbour();
+ // Make sure IUT has LocE for NodeA by sending unsolicited LS_REPLY
+ f_sendGeoNetMessage(valueof(m_geoNwReq_linkLayerBroadcast(m_geoNwPdu(
+ m_geoNwLsReplyPacket(
+ v_longPosVectorNodeA,
+ f_longPosVector2ShortPosVector(v_longPosVectorIut),
+ vc_localSeqNumber
+ )
+ ))));
+ f_selfOrClientSyncAndVerdict(c_prDone, e_success);
+
+ // Test Body
+ if(not f_utTriggerEvent(m_generateGeoUnicastMessageWithTrafficClass(
+ v_longPosVectorNodeA.gnAddr,
+ valueof(m_trafficClass(e_scfDisabled))))) {
+ log("*** " & testcasename() & ": INCONC: Trigger failed ***");
+ f_selfOrClientSyncAndVerdict(c_tbDone, e_timeout);
+ }
+ tc_ac.start;
+ alt {
+ [] geoNetworkingPort.receive(
+ mw_geoNwInd(
+ mw_geoNwPdu(
+ mw_geoNwUnicastPacket(
+ f_longPosVector2ShortPosVector(v_longPosVectorNodeA),
+ ?
+ )
+ )
+ )
+ ) {
+ tc_ac.stop;
+ log("*** " & testcasename() & ": PASS: Pre-conditions: TSB correctly broadcasted ***");
+ f_selfOrClientSyncAndVerdict(c_tbDone, e_success);
+ }
+ [] tc_ac.timeout {
+ log("*** " & testcasename() & ": FAIL: Pre-conditions: TSB not broadcasted ***");
+ f_selfOrClientSyncAndVerdict(c_tbDone, e_error);
+ }
+ }
+
+ // Postamble
+ f_poDefault();
+
+ } // End of function f_GEONW_PON_FPB_BV_11_01_nodeC
+
+ /**
+ * @desc TP Function for TC_GEONW_PON_FPB_BV_11_02
+ */
+ function f_GEONW_PON_FPB_BV_11_02() runs on ItsMtc {
+
+ // Local variables
+ var ItsGeoNetworking v_nodeB;
+ var ItsGeoNetworking v_nodeC;
+
+ // 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_cf03Up(c_compNodeC);
+
+ // Preamble
+
+ // Start components
+ v_nodeB := f_getComponent(c_compNodeB);
+ v_nodeC := f_getComponent(c_compNodeC);
+ v_nodeB.start(f_GEONW_PON_FPB_BV_11_02_nodeB());
+ v_nodeC.start(f_GEONW_PON_FPB_BV_11_02_nodeC());
+
+ // Synchronization
+ f_serverSync2ClientsAndStop({c_prDone, c_tbDone});
+
+ // Cleanup
+ f_cf03Down();
+
+ } // End of function f_GEONW_PON_FPB_BV_11_02
+
+ /**
+ * @desc Behavior function for NodeB (TC_GEONW_PON_FPB_BV_11_02)
+ */
+ function f_GEONW_PON_FPB_BV_11_02_nodeB() runs on ItsGeoNetworking {
+
+ // Local variables
+ var LongPosVector v_longPosVectorIut := f_getPosition(c_compIut);
+
+ // Preamble
+ f_prNonNeighbour();
+ f_selfOrClientSyncAndVerdict(c_prDone, e_success);
+
+ // Test Body
+ tc_ac.start;
+ alt {
+ [] geoNetworkingPort.receive(
+ mw_geoNwInd(
+ mw_geoNwPdu(
+ mw_geoNwAnycastPacket(
+ mw_longPosVectorPosition(v_longPosVectorIut),
+ ?
+ )
+ )
+ )
+ ) {
+ tc_ac.stop;
+ log("*** " & testcasename() & ": PASS: Pre-conditions: TSB correctly broadcasted ***");
+ f_selfOrClientSyncAndVerdict(c_tbDone, e_success);
+ }
+ [] tc_ac.timeout {
+ log("*** " & testcasename() & ": FAIL: Pre-conditions: TSB not broadcasted ***");
+ f_selfOrClientSyncAndVerdict(c_tbDone, e_error);
+ }
+ }
+
+ // Postamble
+ f_poDefault();
+
+ } // End of function f_GEONW_PON_FPB_BV_11_02_nodeB
+
+ /**
+ * @desc Behavior function for NodeC (TC_GEONW_PON_FPB_BV_11_02)
+ */
+ function f_GEONW_PON_FPB_BV_11_02_nodeC() runs on ItsGeoNetworking {
+
+ // Local variables
+ var LongPosVector v_longPosVectorIut := f_getPosition(c_compIut);
+
+ // Preamble
+ f_prNonNeighbour();
+ f_selfOrClientSyncAndVerdict(c_prDone, e_success);
+
+ // Test Body
+ if(not f_utTriggerEvent(m_generateGeoAnycastMessageWithTrafficClass(
+ f_getArea(c_area2),
+ valueof(m_trafficClass(e_scfDisabled))))) {
+ log("*** " & testcasename() & ": INCONC: Trigger failed ***");
+ f_selfOrClientSyncAndVerdict(c_tbDone, e_timeout);
+ }
+ tc_ac.start;
+ alt {
+ [] geoNetworkingPort.receive(
+ mw_geoNwInd(
+ mw_geoNwPdu(
+ mw_geoNwAnycastPacket(
+ mw_longPosVectorPosition(v_longPosVectorIut),
+ ?
+ )
+ )
+ )
+ ) {
+ tc_ac.stop;
+ log("*** " & testcasename() & ": PASS: Pre-conditions: TSB correctly broadcasted ***");
+ f_selfOrClientSyncAndVerdict(c_tbDone, e_success);
+ }
+ [] tc_ac.timeout {
+ log("*** " & testcasename() & ": FAIL: Pre-conditions: TSB not broadcasted ***");
+ f_selfOrClientSyncAndVerdict(c_tbDone, e_error);
+ }
+ }
+
+ // Postamble
+ f_poDefault();
+
+ } // End of function f_GEONW_PON_FPB_BV_11_02_nodeC
+
+ /**
+ * @desc TP Function for TC_GEONW_PON_FPB_BV_11_03
+ */
+ function f_GEONW_PON_FPB_BV_11_03() runs on ItsMtc {
+
+ // Local variables
+ var ItsGeoNetworking v_nodeB;
+ var ItsGeoNetworking v_nodeC;
+
+ // Test control
+ if (not PICS_GN_GBC_SRC) {
+ log("*** " & testcasename() & ": PICS_GN_GBC_SRC required for executing the TC ***");
+ setverdict(inconc);
+ stop;
+ }
+
+ // Test component configuration
+ f_cf03Up(c_compNodeC);
+
+ // Preamble
+
+ // Start components
+ v_nodeB := f_getComponent(c_compNodeB);
+ v_nodeC := f_getComponent(c_compNodeC);
+ v_nodeB.start(f_GEONW_PON_FPB_BV_11_03_nodeB());
+ v_nodeC.start(f_GEONW_PON_FPB_BV_11_03_nodeC());
+
+ // Synchronization
+ f_serverSync2ClientsAndStop({c_prDone, c_tbDone});
+
+ // Cleanup
+ f_cf03Down();
+
+ } // End of function f_GEONW_PON_FPB_BV_11_03
+
+ /**
+ * @desc Behavior function for NodeB (TC_GEONW_PON_FPB_BV_11_03)
+ */
+ function f_GEONW_PON_FPB_BV_11_03_nodeB() runs on ItsGeoNetworking {
+
+ // Local variables
+ var LongPosVector v_longPosVectorIut := f_getPosition(c_compIut);
+
+ // Preamble
+ f_prNonNeighbour();
+ f_selfOrClientSyncAndVerdict(c_prDone, e_success);
+
+ // Test Body
+ tc_ac.start;
+ alt {
+ [] geoNetworkingPort.receive(
+ mw_geoNwInd(
+ mw_geoNwPdu(
+ mw_geoNwBroadcastPacket(
+ mw_longPosVectorPosition(v_longPosVectorIut),
+ ?
+ )
+ )
+ )
+ ) {
+ tc_ac.stop;
+ log("*** " & testcasename() & ": PASS: Pre-conditions: TSB correctly broadcasted ***");
+ f_selfOrClientSyncAndVerdict(c_tbDone, e_success);
+ }
+ [] tc_ac.timeout {
+ log("*** " & testcasename() & ": FAIL: Pre-conditions: TSB not broadcasted ***");
+ f_selfOrClientSyncAndVerdict(c_tbDone, e_error);
+ }
+ }
+
+ // Postamble
+ f_poDefault();
+
+ } // End of function f_GEONW_PON_FPB_BV_11_03_nodeB
+
+ /**
+ * @desc Behavior function for NodeC (TC_GEONW_PON_FPB_BV_11_03)
+ */
+ function f_GEONW_PON_FPB_BV_11_03_nodeC() runs on ItsGeoNetworking {
+
+ // Local variables
+ var LongPosVector v_longPosVectorIut := f_getPosition(c_compIut);
+
+ // Preamble
+ f_prNonNeighbour();
+ f_selfOrClientSyncAndVerdict(c_prDone, e_success);
+
+ // Test Body
+ if(not f_utTriggerEvent(m_generateGeoBroadcastMessageWithTrafficClass(
+ f_getArea(c_area2),
+ valueof(m_trafficClass(e_scfDisabled))))) {
+ log("*** " & testcasename() & ": INCONC: Trigger failed ***");
+ f_selfOrClientSyncAndVerdict(c_tbDone, e_timeout);
+ }
+ tc_ac.start;
+ alt {
+ [] geoNetworkingPort.receive(
+ mw_geoNwInd(
+ mw_geoNwPdu(
+ mw_geoNwBroadcastPacket(
+ mw_longPosVectorPosition(v_longPosVectorIut),
+ ?
+ )
+ )
+ )
+ ) {
+ tc_ac.stop;
+ log("*** " & testcasename() & ": PASS: Pre-conditions: TSB correctly broadcasted ***");
+ f_selfOrClientSyncAndVerdict(c_tbDone, e_success);
+ }
+ [] tc_ac.timeout {
+ log("*** " & testcasename() & ": FAIL: Pre-conditions: TSB not broadcasted ***");
+ f_selfOrClientSyncAndVerdict(c_tbDone, e_error);
+ }
+ }
+
+ // Postamble
+ f_poDefault();
+
+ } // End of function f_GEONW_PON_FPB_BV_11_03_nodeC
+
+ /**
+ * @desc TP Function for TC_GEONW_PON_FPB_BV_11_04
+ */
+ function f_GEONW_PON_FPB_BV_11_04() runs on ItsMtc {
+
+ // Local variables
+ var ItsGeoNetworking v_nodeB;
+ var ItsGeoNetworking v_nodeC;
+
+ // Test control
+ if (not PICS_GN_TSB_SRC) {
+ log("*** " & testcasename() & ": PICS_GN_TSB_SRC required for executing the TC ***");
+ setverdict(inconc);
+ stop;
+ }
+
+ // Test component configuration
+ f_cf03Up(c_compNodeC);
+
+ // Preamble
+
+ // Start components
+ v_nodeB := f_getComponent(c_compNodeB);
+ v_nodeC := f_getComponent(c_compNodeC);
+ v_nodeB.start(f_GEONW_PON_FPB_BV_11_04_nodeB());
+ v_nodeC.start(f_GEONW_PON_FPB_BV_11_04_nodeC());
+
+ // Synchronization
+ f_serverSync2ClientsAndStop({c_prDone, c_tbDone});
+
+ // Cleanup
+ f_cf03Down();
+
+ } // End of function f_GEONW_PON_FPB_BV_11_04
+
+ /**
+ * @desc Behavior function for NodeB (TC_GEONW_PON_FPB_BV_11_04)
+ */
+ function f_GEONW_PON_FPB_BV_11_04_nodeB() runs on ItsGeoNetworking {
+
+ // Local variables
+ var LongPosVector v_longPosVectorIut := f_getPosition(c_compIut);
+
+ // Preamble
+ f_prNonNeighbour();
+ f_selfOrClientSyncAndVerdict(c_prDone, e_success);
+
+ // Test Body
+ tc_ac.start;
+ alt {
+ [] geoNetworkingPort.receive(
+ mw_geoNwInd(
+ mw_geoNwPdu(
+ mw_geoNwTsbPacket(
+ ?,
+ mw_longPosVectorPosition(v_longPosVectorIut)
+ )
+ )
+ )
+ ) {
+ tc_ac.stop;
+ log("*** " & testcasename() & ": PASS: Pre-conditions: TSB correctly broadcasted ***");
+ f_selfOrClientSyncAndVerdict(c_tbDone, e_success);
+ }
+ [] tc_ac.timeout {
+ log("*** " & testcasename() & ": FAIL: Pre-conditions: TSB not broadcasted ***");
+ f_selfOrClientSyncAndVerdict(c_tbDone, e_error);
+ }
+ }
+
+ // Postamble
+ f_poDefault();
+
+ } // End of function f_GEONW_PON_FPB_BV_11_04_nodeB
+
+ /**
+ * @desc Behavior function for NodeC (TC_GEONW_PON_FPB_BV_11_04)
+ */
+ function f_GEONW_PON_FPB_BV_11_04_nodeC() runs on ItsGeoNetworking {
+
+ // Local variables
+ var LongPosVector v_longPosVectorIut := f_getPosition(c_compIut);
+
+ // Preamble
+ f_prNonNeighbour();
+ f_selfOrClientSyncAndVerdict(c_prDone, e_success);
+
+ // Test Body
+ if(not f_utTriggerEvent(valueof(m_generateTsbMessageWithTrafficClass(valueof(m_trafficClass(e_scfDisabled)))))) {
+ log("*** " & testcasename() & ": INCONC: Trigger failed ***");
+ f_selfOrClientSyncAndVerdict(c_tbDone, e_timeout);
+ }
+ tc_ac.start;
+ alt {
+ [] geoNetworkingPort.receive(
+ mw_geoNwInd(
+ mw_geoNwPdu(
+ mw_geoNwTsbPacket(
+ ?,
+ mw_longPosVectorPosition(v_longPosVectorIut)
+ )
+ )
+ )
+ ) {
+ tc_ac.stop;
+ log("*** " & testcasename() & ": PASS: Pre-conditions: TSB correctly broadcasted ***");
+ f_selfOrClientSyncAndVerdict(c_tbDone, e_success);
+ }
+ [] tc_ac.timeout {
+ log("*** " & testcasename() & ": FAIL: Pre-conditions: TSB not broadcasted ***");
+ f_selfOrClientSyncAndVerdict(c_tbDone, e_error);
+ }
+ }
+
+ // Postamble
+ f_poDefault();
+
+ } // End of function f_GEONW_PON_FPB_BV_11_04_nodeC
+
+ /**
+ * @desc TP Function for TC_GEONW_PON_FPB_BV_11_05
+ */
+ function f_GEONW_PON_FPB_BV_11_05() runs on ItsMtc {
+
+ // Local variables
+ var ItsGeoNetworking v_nodeB;
+ var ItsGeoNetworking v_nodeC;
+
+ // Test control
+ if (not PICS_GN_TSB_SRC) {
+ log("*** " & testcasename() & ": PICS_GN_TSB_SRC required for executing the TC ***");
+ setverdict(inconc);
+ stop;
+ }
+
+ // Test component configuration
+ f_cf03Up(c_compNodeC);
+
+ // Preamble
+
+ // Start components
+ v_nodeB := f_getComponent(c_compNodeB);
+ v_nodeC := f_getComponent(c_compNodeC);
+ v_nodeB.start(f_GEONW_PON_FPB_BV_11_05_nodeB());
+ v_nodeC.start(f_GEONW_PON_FPB_BV_11_05_nodeC());
+
+ // Synchronization
+ f_serverSync2ClientsAndStop({c_prDone, c_tbDone});
+
+ // Cleanup
+ f_cf03Down();
+
+ } // End of function f_GEONW_PON_FPB_BV_11_05
+
+ /**
+ * @desc Behavior function for NodeB (TC_GEONW_PON_FPB_BV_11_05)
+ */
+ function f_GEONW_PON_FPB_BV_11_05_nodeB() runs on ItsGeoNetworking {
+
+ // Local variables
+ var LongPosVector v_longPosVectorIut := f_getPosition(c_compIut);
+
+ // Preamble
+ f_prNonNeighbour();
+ f_selfOrClientSyncAndVerdict(c_prDone, e_success);
+
+ // Test Body
+ tc_ac.start;
+ alt {
+ [] geoNetworkingPort.receive(
+ mw_geoNwInd(
+ mw_geoNwPdu(
+ mw_geoNwShbPacket(
+ mw_longPosVectorPosition(v_longPosVectorIut)
+ )
+ )
+ )
+ ) {
+ tc_ac.stop;
+ log("*** " & testcasename() & ": PASS: Pre-conditions: TSB correctly broadcasted ***");
+ f_selfOrClientSyncAndVerdict(c_tbDone, e_success);
+ }
+ [] tc_ac.timeout {
+ log("*** " & testcasename() & ": FAIL: Pre-conditions: TSB not broadcasted ***");
+ f_selfOrClientSyncAndVerdict(c_tbDone, e_error);
+ }
+ }
+
+ // Postamble
+ f_poDefault();
+
+ } // End of function f_GEONW_PON_FPB_BV_11_05_nodeB
+
+ /**
+ * @desc Behavior function for NodeC (TC_GEONW_PON_FPB_BV_11_05)
+ */
+ function f_GEONW_PON_FPB_BV_11_05_nodeC() runs on ItsGeoNetworking {
+
+ // Local variables
+ var LongPosVector v_longPosVectorIut := f_getPosition(c_compIut);
+
+ // Preamble
+ f_prNonNeighbour();
+ f_selfOrClientSyncAndVerdict(c_prDone, e_success);
+
+ // Test Body
+ if(not f_utTriggerEvent(valueof(m_generateShbMessageWithTrafficClass(valueof(m_trafficClass(e_scfDisabled)))))) {
+ log("*** " & testcasename() & ": INCONC: Trigger failed ***");
+ f_selfOrClientSyncAndVerdict(c_tbDone, e_timeout);
+ }
+ tc_ac.start;
+ alt {
+ [] geoNetworkingPort.receive(
+ mw_geoNwInd(
+ mw_geoNwPdu(
+ mw_geoNwShbPacket(
+ mw_longPosVectorPosition(v_longPosVectorIut)
+ )
+ )
+ )
+ ) {
+ tc_ac.stop;
+ log("*** " & testcasename() & ": PASS: Pre-conditions: TSB correctly broadcasted ***");
+ f_selfOrClientSyncAndVerdict(c_tbDone, e_success);
+ }
+ [] tc_ac.timeout {
+ log("*** " & testcasename() & ": FAIL: Pre-conditions: TSB not broadcasted ***");
+ f_selfOrClientSyncAndVerdict(c_tbDone, e_error);
+ }
+ }
+
+ // Postamble
+ f_poDefault();
+
+ } // End of function f_GEONW_PON_FPB_BV_11_05_nodeC
+
+ } // end GEONW_PON_FPB_BV_11
+
+ group GEONW_PON_FPB_BV_12 {
+
+ /**
+ * @desc TP Function for TC_GEONW_PON_FPB_BV_12_01
+ */
+ function f_GEONW_PON_FPB_BV_12_01() runs on ItsMtc {
+
+ // Local variables
+ var ItsGeoNetworking v_nodeB;
+ var ItsGeoNetworking v_nodeC;
+
+ // Test control
+ if (not PICS_GN_GUC_SRC) {
+ log("*** " & testcasename() & ": PICS_GN_GUC_SRC required for executing the TC ***");
+ setverdict(inconc);
+ stop;
+ }
+
+ // Test component configuration
+ f_cf03Up(c_compNodeC);
+
+ // Preamble
+
+ // Start components
+ v_nodeB := f_getComponent(c_compNodeB);
+ v_nodeC := f_getComponent(c_compNodeC);
+ v_nodeB.start(f_GEONW_PON_FPB_BV_12_01_nodeB());
+ v_nodeC.start(f_GEONW_PON_FPB_BV_12_01_nodeC());
+
+ // Synchronization
+ f_serverSync2ClientsAndStop({c_prDone, c_tbDone});
+
+ // Cleanup
+ f_cf03Down();
+
+ } // End of function f_GEONW_PON_FPB_BV_12_01
+
+ /**
+ * @desc Behavior function for NodeB (TC_GEONW_PON_FPB_BV_12_01)
+ */
+ function f_GEONW_PON_FPB_BV_12_01_nodeB() runs on ItsGeoNetworking {
+
+ // Local variablesa
+ var LongPosVector v_longPosVectorNodeA := f_getPosition(c_compNodeA);
+
+ // Preamble
+ f_prNonNeighbour();
+ f_selfOrClientSyncAndVerdict(c_prDone, e_success);
+
+ // Test Body
+ tc_ac.start;
+ alt {
+ [] geoNetworkingPort.receive(
+ mw_geoNwInd(
+ mw_geoNwPdu(
+ mw_geoNwUnicastPacket(
+ f_longPosVector2ShortPosVector(v_longPosVectorNodeA),
+ ?
+ )
+ )
+ )
+ ) {
+ tc_ac.stop;
+ log("*** " & testcasename() & ": PASS: Pre-conditions: TSB correctly broadcasted ***");
+ f_selfOrClientSyncAndVerdict(c_tbDone, e_success);
+ }
+ [] tc_ac.timeout {
+ log("*** " & testcasename() & ": FAIL: Pre-conditions: TSB not broadcasted ***");
+ f_selfOrClientSyncAndVerdict(c_tbDone, e_error);
+ }
+ }
+
+ // Postamble
+ f_poDefault();
+
+ } // End of function f_GEONW_PON_FPB_BV_12_01_nodeB
+
+ /**
+ * @desc Behavior function for NodeC (TC_GEONW_PON_FPB_BV_12_01)
+ */
+ function f_GEONW_PON_FPB_BV_12_01_nodeC() runs on ItsGeoNetworking {
+
+ // Local variables
+ var LongPosVector v_longPosVectorNodeA := f_getPosition(c_compNodeA);
+
+ // Preamble
+ f_prNonNeighbour();
+ f_selfOrClientSyncAndVerdict(c_prDone, e_success);
+
+ // Test Body
+ f_sendGeoNetMessage(
+ valueof(m_geoNwReq_withLinkLayerDestination(
+ m_geoNwPdu(
+ m_geoNwUnicastPacket(
+ f_getPosition(c_compNodeC),
+ f_longPosVector2ShortPosVector(f_getPosition(c_compNodeA)),
+ vc_localSeqNumber,
+ -,
+ m_trafficClass(e_scfDisabled)
+ ),
+ -,
+ c_defaultHopLimit
+ ),
+ -,
+ f_getIutMacAddress()
+ )
+ ));
+
+ tc_ac.start;
+ alt {
+ [] geoNetworkingPort.receive(
+ mw_geoNwInd(
+ mw_geoNwPdu(
+ mw_geoNwUnicastPacket(
+ f_longPosVector2ShortPosVector(v_longPosVectorNodeA),
+ ?
+ )
+ )
+ )
+ ) {
+ tc_ac.stop;
+ log("*** " & testcasename() & ": PASS: Pre-conditions: TSB correctly broadcasted ***");
+ f_selfOrClientSyncAndVerdict(c_tbDone, e_success);
+ }
+ [] tc_ac.timeout {
+ log("*** " & testcasename() & ": FAIL: Pre-conditions: TSB not broadcasted ***");
+ f_selfOrClientSyncAndVerdict(c_tbDone, e_error);
+ }
+ }
+
+ // Postamble
+ f_poDefault();
+
+ } // End of function f_GEONW_PON_FPB_BV_12_01_nodeC
+
+ /**
+ * @desc TP Function for TC_GEONW_PON_FPB_BV_12_02
+ */
+ function f_GEONW_PON_FPB_BV_12_02() runs on ItsMtc {
+
+ // Local variables
+ var ItsGeoNetworking v_nodeB;
+ var ItsGeoNetworking v_nodeC;
+
+ // 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_cf03Up(c_compNodeC);
+
+ // Preamble
+
+ // Start components
+ v_nodeB := f_getComponent(c_compNodeB);
+ v_nodeC := f_getComponent(c_compNodeC);
+ v_nodeB.start(f_GEONW_PON_FPB_BV_12_02_nodeB());
+ v_nodeC.start(f_GEONW_PON_FPB_BV_12_02_nodeC());
+
+ // Synchronization
+ f_serverSync2ClientsAndStop({c_prDone, c_tbDone});
+
+ // Cleanup
+ f_cf03Down();
+
+ } // End of function f_GEONW_PON_FPB_BV_12_02
+
+ /**
+ * @desc Behavior function for NodeB (TC_GEONW_PON_FPB_BV_12_02)
+ */
+ function f_GEONW_PON_FPB_BV_12_02_nodeB() runs on ItsGeoNetworking {
+
+ // Local variables
+ var LongPosVector v_longPosVectorNodeC := f_getPosition(c_compNodeC);
+
+ // Preamble
+ f_prNonNeighbour();
+ f_selfOrClientSyncAndVerdict(c_prDone, e_success);
+
+ // Test Body
+ tc_ac.start;
+ alt {
+ [] geoNetworkingPort.receive(
+ mw_geoNwInd(
+ mw_geoNwPdu(
+ mw_geoNwAnycastPacket(
+ mw_longPosVectorPosition(v_longPosVectorNodeC),
+ ?
+ )
+ )
+ )
+ ) {
+ tc_ac.stop;
+ log("*** " & testcasename() & ": PASS: Pre-conditions: TSB correctly broadcasted ***");
+ f_selfOrClientSyncAndVerdict(c_tbDone, e_success);
+ }
+ [] tc_ac.timeout {
+ log("*** " & testcasename() & ": FAIL: Pre-conditions: TSB not broadcasted ***");
+ f_selfOrClientSyncAndVerdict(c_tbDone, e_error);
+ }
+ }
+
+ // Postamble
+ f_poDefault();
+
+ } // End of function f_GEONW_PON_FPB_BV_11_02_nodeB
+
+ /**
+ * @desc Behavior function for NodeC (TC_GEONW_PON_FPB_BV_12_02)
+ */
+ function f_GEONW_PON_FPB_BV_12_02_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(
+ valueof(m_geoNwReq_linkLayerBroadcast(
+ m_geoNwPdu(
+ m_geoNwAnycastPacket(
+ v_longPosVectorNodeC,
+ vc_localSeqNumber,
+ f_getGeoAnycastArea(c_area2),
+ -,
+ m_trafficClass(e_scfDisabled)
+ )
+ )
+ )
+ ));
+
+ tc_ac.start;
+ alt {
+ [] geoNetworkingPort.receive(
+ mw_geoNwInd(
+ mw_geoNwPdu(
+ mw_geoNwAnycastPacket(
+ mw_longPosVectorPosition(v_longPosVectorNodeC),
+ ?
+ )
+ )
+ )
+ ) {
+ tc_ac.stop;
+ log("*** " & testcasename() & ": PASS: Pre-conditions: TSB correctly broadcasted ***");
+ f_selfOrClientSyncAndVerdict(c_tbDone, e_success);
+ }
+ [] tc_ac.timeout {
+ log("*** " & testcasename() & ": FAIL: Pre-conditions: TSB not broadcasted ***");
+ f_selfOrClientSyncAndVerdict(c_tbDone, e_error);
+ }
+ }
+
+ // Postamble
+ f_poDefault();
+
+ } // End of function f_GEONW_PON_FPB_BV_12_02_nodeC
+
+ /**
+ * @desc TP Function for TC_GEONW_PON_FPB_BV_12_02
+ */
+ function f_GEONW_PON_FPB_BV_12_03() runs on ItsMtc {
+
+ // Local variables
+ var ItsGeoNetworking v_nodeB;
+ var ItsGeoNetworking v_nodeC;
+
+ // Test control
+ if (not PICS_GN_GBC_SRC) {
+ log("*** " & testcasename() & ": PICS_GN_GBC_SRC required for executing the TC ***");
+ setverdict(inconc);
+ stop;
+ }
+
+ // Test component configuration
+ f_cf03Up(c_compNodeC);
+
+ // Preamble
+
+ // Start components
+ v_nodeB := f_getComponent(c_compNodeB);
+ v_nodeC := f_getComponent(c_compNodeC);
+ v_nodeB.start(f_GEONW_PON_FPB_BV_12_03_nodeB());
+ v_nodeC.start(f_GEONW_PON_FPB_BV_12_03_nodeC());
+
+ // Synchronization
+ f_serverSync2ClientsAndStop({c_prDone, c_tbDone});
+
+ // Cleanup
+ f_cf03Down();
+
+ } // End of function f_GEONW_PON_FPB_BV_12_03
+
+ /**
+ * @desc Behavior function for NodeB (TC_GEONW_PON_FPB_BV_12_03)
+ */
+ function f_GEONW_PON_FPB_BV_12_03_nodeB() runs on ItsGeoNetworking {
+
+ // Local variables
+ var LongPosVector v_longPosVectorNodeC := f_getPosition(c_compNodeC);
+
+ // Preamble
+ f_prNonNeighbour();
+ f_selfOrClientSyncAndVerdict(c_prDone, e_success);
+
+ // Test Body
+ tc_ac.start;
+ alt {
+ [] geoNetworkingPort.receive(
+ mw_geoNwInd(
+ mw_geoNwPdu(
+ mw_geoNwBroadcastPacket(
+ mw_longPosVectorPosition(v_longPosVectorNodeC),
+ ?
+ )
+ )
+ )
+ ) {
+ tc_ac.stop;
+ log("*** " & testcasename() & ": PASS: Pre-conditions: TSB correctly broadcasted ***");
+ f_selfOrClientSyncAndVerdict(c_tbDone, e_success);
+ }
+ [] tc_ac.timeout {
+ log("*** " & testcasename() & ": FAIL: Pre-conditions: TSB not broadcasted ***");
+ f_selfOrClientSyncAndVerdict(c_tbDone, e_error);
+ }
+ }
+
+ // Postamble
+ f_poDefault();
+
+ } // End of function f_GEONW_PON_FPB_BV_12_03_nodeB
+
+ /**
+ * @desc Behavior function for NodeC (TC_GEONW_PON_FPB_BV_12_03)
+ */
+ function f_GEONW_PON_FPB_BV_12_03_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(
+ valueof(m_geoNwReq_linkLayerBroadcast(
+ m_geoNwPdu(
+ m_geoNwBroadcastPacket(
+ v_longPosVectorNodeC,
+ vc_localSeqNumber,
+ f_getGeoBroadcastArea(c_area2),
+ -,
+ m_trafficClass(e_scfDisabled)
+ )
+ )
+ )
+ ));
+
+ tc_ac.start;
+ alt {
+ [] geoNetworkingPort.receive(
+ mw_geoNwInd(
+ mw_geoNwPdu(
+ mw_geoNwBroadcastPacket(
+ mw_longPosVectorPosition(v_longPosVectorNodeC),
+ ?
+ )
+ )
+ )
+ ) {
+ tc_ac.stop;
+ log("*** " & testcasename() & ": PASS: Pre-conditions: TSB correctly broadcasted ***");
+ f_selfOrClientSyncAndVerdict(c_tbDone, e_success);
+ }
+ [] tc_ac.timeout {
+ log("*** " & testcasename() & ": FAIL: Pre-conditions: TSB not broadcasted ***");
+ f_selfOrClientSyncAndVerdict(c_tbDone, e_error);
+ }
+ }
+
+ // Postamble
+ f_poDefault();
+
+ } // End of function f_GEONW_PON_FPB_BV_11_03_nodeC
+
+ /**
+ * @desc TP Function for TC_GEONW_PON_FPB_BV_12_04
+ */
+ function f_GEONW_PON_FPB_BV_12_04() runs on ItsMtc {
+
+ // Local variables
+ var ItsGeoNetworking v_nodeB;
+ var ItsGeoNetworking v_nodeC;
+
+ // Test control
+ if (not PICS_GN_TSB_SRC) {
+ log("*** " & testcasename() & ": PICS_GN_TSB_SRC required for executing the TC ***");
+ setverdict(inconc);
+ stop;
+ }
+
+ // Test component configuration
+ f_cf03Up(c_compNodeC);
+
+ // Preamble
+
+ // Start components
+ v_nodeB := f_getComponent(c_compNodeB);
+ v_nodeC := f_getComponent(c_compNodeC);
+ v_nodeB.start(f_GEONW_PON_FPB_BV_12_04_nodeB());
+ v_nodeC.start(f_GEONW_PON_FPB_BV_12_04_nodeC());
+
+ // Synchronization
+ f_serverSync2ClientsAndStop({c_prDone, c_tbDone});
+
+ // Cleanup
+ f_cf03Down();
+
+ } // End of function f_GEONW_PON_FPB_BV_11_04
+
+ /**
+ * @desc Behavior function for NodeB (TC_GEONW_PON_FPB_BV_12_04)
+ */
+ function f_GEONW_PON_FPB_BV_12_04_nodeB() runs on ItsGeoNetworking {
+
+ // Local variables
+ var LongPosVector v_longPosVectorNodeC := f_getPosition(c_compNodeC);
+
+ // Preamble
+ f_prNonNeighbour();
+ f_selfOrClientSyncAndVerdict(c_prDone, e_success);
+
+ // Test Body
+ tc_ac.start;
+ alt {
+ [] geoNetworkingPort.receive(
+ mw_geoNwInd(
+ mw_geoNwPdu(
+ mw_geoNwTsbPacket(
+ ?,
+ mw_longPosVectorPosition(v_longPosVectorNodeC)
+ )
+ )
+ )
+ ) {
+ tc_ac.stop;
+ log("*** " & testcasename() & ": PASS: Pre-conditions: TSB correctly broadcasted ***");
+ f_selfOrClientSyncAndVerdict(c_tbDone, e_success);
+ }
+ [] tc_ac.timeout {
+ log("*** " & testcasename() & ": FAIL: Pre-conditions: TSB not broadcasted ***");
+ f_selfOrClientSyncAndVerdict(c_tbDone, e_error);
+ }
+ }
+
+ // Postamble
+ f_poDefault();
+
+ } // End of function f_GEONW_PON_FPB_BV_12_04_nodeB
+
+ /**
+ * @desc Behavior function for NodeC (TC_GEONW_PON_FPB_BV_12_04)
+ */
+ function f_GEONW_PON_FPB_BV_12_04_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(
+ valueof(m_geoNwReq_linkLayerBroadcast(
+ m_geoNwPdu(
+ m_geoNwTsbPacket(
+ vc_localSeqNumber,
+ v_longPosVectorNodeC,
+ c_defaultHopLimit,
+ m_trafficClass(e_scfDisabled)
+ ),
+ -,
+ c_defaultHopLimit
+ )
+ )
+ ));
+
+ tc_ac.start;
+ alt {
+ [] geoNetworkingPort.receive(
+ mw_geoNwInd(
+ mw_geoNwPdu(
+ mw_geoNwTsbPacket(
+ ?,
+ mw_longPosVectorPosition(v_longPosVectorNodeC)
+ )
+ )
+ )
+ ) {
+ tc_ac.stop;
+ log("*** " & testcasename() & ": PASS: Pre-conditions: TSB correctly broadcasted ***");
+ f_selfOrClientSyncAndVerdict(c_tbDone, e_success);
+ }
+ [] tc_ac.timeout {
+ log("*** " & testcasename() & ": FAIL: Pre-conditions: TSB not broadcasted ***");
+ f_selfOrClientSyncAndVerdict(c_tbDone, e_error);
+ }
+ }
+
+ // Postamble
+ f_poDefault();
+
+ } // End of function f_GEONW_PON_FPB_BV_12_04_nodeC
+
+ } // end GEONW_PON_FPB_BV_12
+
+ } // end geoForwardingPacketBuffer
+
+ // 6.2.2.6
+ group geoGeoNetworkingAddress {
+
+ /**
+ * @desc TP Function for TC_GEONW_PON_GNA_BV_01
+ */
+ function f_GEONW_PON_GNA_BV_01() runs on ItsGeoNetworking {
+
+ // Local variables
+ var LongPosVector v_longPosVectorIut;
+
+ // Test control
+ if (not PICS_GN_ADDR_AUTO) {
+ log("*** " & testcasename() & ": PICS_GN_ADDR_AUTO required for executing the TC ***");
+ setverdict(inconc);
+ stop;
+ }
+
+ if(f_getIutGnLocalAddressConfigurationMethod() != e_auto) {
+ log("*** " & testcasename() & ": PICS_GN_LOCAL_ADDR_CONF_METHOD == e_auto required for executing the TC ***");
+ setverdict(inconc);
+ stop;
+ }
+
+ // Test component configuration
+ f_cf01Up();
+ v_longPosVectorIut := f_getPosition(c_compIut);
+
+ // Test adapter configuration
+
+ // Preamble
+ f_prDefault();
+ f_acTriggerEvent(m_startPassBeaconing(m_beaconHeader(v_longPosVectorIut).beaconHeader));
+ f_selfOrClientSyncAndVerdict(c_prDone, e_success);
+
+ // Test Body
+ tc_ac.start;
+ alt {
+ [] geoNetworkingPort.receive(mw_geoNwInd(mw_geoNwPdu(
+ mw_geoNwBeaconPacket(
+ mw_longPosVectorAny(f_getIutGnLocalAddress()) // IUT's SOPV
+ )))) {
+ tc_ac.stop;
+ log("*** " & testcasename() & ": GN address is correct ***");
+ f_selfOrClientSyncAndVerdict(c_tbDone, e_success);
+ }
+ [] geoNetworkingPort.receive(mw_geoNwInd(mw_geoNwPdu(
+ mw_geoNwBeaconPacket(
+ ? // any SOPV
+ )))) {
+ tc_ac.stop;
+ log("*** " & testcasename() & ": GN address is not correct ***");
+ f_selfOrClientSyncAndVerdict(c_tbDone, e_error);
+ }
+ [] tc_ac.timeout {
+ log("*** " & testcasename() & ": Expected message not received ***");
+ f_selfOrClientSyncAndVerdict(c_tbDone, e_timeout);
+ }
+ }
+
+ // Postamble
+ f_poDefault();
+ f_cf01Down();
+
+ } // End of function f_GEONW_PON_GNA_BV_01
+
+ /**
+ * @desc TP Function for TC_GEONW_PON_GNA_BV_02
+ */
+ function f_GEONW_PON_GNA_BV_02() runs on ItsGeoNetworking {
+
+ // Local variables
+ var LongPosVector v_longPosVectorIut;
+ var LongPosVector v_longPosVectorNodeB;
+ var GeoNetworkingInd v_geoNetInd;
+ var GN_Address v_iutGnAddress := valueof(m_dummyGnAddr);
+
+ // Test control
+ if (not PICS_GN_DAD) {
+ log("*** " & testcasename() & ": PICS_GN_DAD required for executing the TC ***");
+ setverdict(inconc);
+ stop;
+ }
+
+ // Test component configuration
+ f_cf01Up();
+ v_longPosVectorIut := f_getPosition(c_compIut);
+ v_longPosVectorNodeB := f_getPosition(c_compNodeB);
+
+ // Test adapter configuration
+
+ // Preamble
+ f_prDefault();
+ f_prNeighbour();
+ if ( not f_utTriggerEvent(m_generateShbMessage) ) {
+ log("*** " & testcasename() & ": INCONC: Trigger failed ***");
+ f_selfOrClientSyncAndVerdict(c_tbDone, e_timeout);
+ }
+
+ tc_ac.start;
+ alt {
+ [] geoNetworkingPort.receive(mw_geoNwInd(mw_geoNwPdu(
+ mw_geoNwShbPacket(
+ ? // SO PV
+ )))) -> value v_geoNetInd {
+ v_iutGnAddress := valueof(v_geoNetInd.msgIn.gnPacket.packet.extendedHeader.shbHeader.srcPosVector.gnAddr);
+ }
+ [] tc_ac.timeout {
+ log("*** " & testcasename() & ": Expected message not received ***");
+ f_selfOrClientSyncAndVerdict(c_prDone, e_timeout);
+ }
+ }
+ f_selfOrClientSyncAndVerdict(c_prDone, e_success);
+
+ // Test Body
+ v_longPosVectorNodeB.gnAddr := v_iutGnAddress;
+ f_sendGeoNetMessage(valueof(m_geoNwReq_linkLayerBroadcast(m_geoNwPdu(m_geoNwShbPacket(v_longPosVectorNodeB), -, c_hopLimit1))));
+
+ f_sleep(0.5);
+
+ if ( not f_utTriggerEvent(m_generateShbMessage) ) {
+ log("*** " & testcasename() & ": INCONC: Trigger failed ***");
+ f_selfOrClientSyncAndVerdict(c_tbDone, e_timeout);
+ }
+ tc_ac.start;
+ alt {
+ [] geoNetworkingPort.receive(mw_geoNwInd(mw_geoNwPdu(
+ mw_geoNwShbPacket(
+ mw_longPosVectorAny(v_iutGnAddress) // SO PV
+ )))) {
+ log("*** " & testcasename() & ": IUT is still using old GN address. Waiting... ***");
+ repeat;
+ }
+ [] geoNetworkingPort.receive(mw_geoNwInd(mw_geoNwPdu(
+ mw_geoNwShbPacket(
+ ? // SO PV
+ )))) {
+ tc_ac.stop;
+ log("*** " & testcasename() & ": IUT used new GN address ***");
+ f_selfOrClientSyncAndVerdict(c_tbDone, e_success);
+ }
+ [] tc_ac.timeout {
+ log("*** " & testcasename() & ": Expected message not received ***");
+ f_selfOrClientSyncAndVerdict(c_tbDone, e_timeout);
+ }
+ }
+
+ // Postamble
+ f_poDefault();
+ f_cf01Down();
+
+ } // End of function f_GEONW_PON_GNA_BV_02
+
+ } // end geoGeoNetworkingAddress
+
+ // 6.2.2.7
+ group geoBeaconing {
+
+ /**
+ * @desc TP Function for TC_GEONW_PON_BEA_TI_01
+ */
+ function f_GEONW_PON_BEA_TI_01() runs on ItsGeoNetworking {
+
+ // Local variables
+ var LongPosVector v_longPosVectorIut;
+ var boolean v_beaconReceived := false;
+ timer t_minRetransTimer := f_getBsRetransmitTimer();
+ timer t_maxRetransTimer := f_getBsRetransmitTimer() + f_getBsMaxJitter();
+
+ // Test control
+ if (not PICS_GN_BEACON_SRC) {
+ log("*** " & testcasename() & ": PICS_GN_BEACON_SRC required for executing the TC ***");
+ setverdict(inconc);
+ stop;
+ }
+
+ // Test component configuration
+ f_cf01Up();
+ v_longPosVectorIut := f_getPosition(c_compIut);
+
+ // Test adapter configuration
+
+ // Preamble
+ f_prDefault();
+ f_selfOrClientSyncAndVerdict(c_prDone, e_success);
+
+ // Test Body
+ f_acTriggerEvent(m_startPassBeaconing(m_beaconHeader(v_longPosVectorIut).beaconHeader));
+
+ t_maxRetransTimer.start;
+ alt {
+ [] geoNetworkingPort.receive(mw_geoNwInd(mw_geoNwPdu(mw_geoNwBeaconPacket(?)))) {
+ if (v_beaconReceived == false) {
+ v_beaconReceived := true;
+ t_minRetransTimer.start;
+ t_maxRetransTimer.start;
+ //after the first beacon received, check the retransmission
+ repeat;
+ }
+ if(t_minRetransTimer.running) {
+ log("*** " & testcasename() & ": Beacon not transmitted at prescribed periodicity (too early) ***");
+ f_selfOrClientSyncAndVerdict(c_tbDone, e_error);
+ }
+ else {
+ log("*** " & testcasename() & ": Beacon transmitted at prescribed periodicity ***");
+ f_selfOrClientSyncAndVerdict(c_tbDone, e_success);
+ }
+ }
+ [] t_minRetransTimer.timeout {
+ log("*** " & testcasename() & ": Ready for retransmission ***");
+ repeat;
+ }
+ [] t_maxRetransTimer.timeout {
+ log("*** " & testcasename() & ": Beacon not transmitted at prescribed periodicity (too late) ***");
+ f_selfOrClientSyncAndVerdict(c_tbDone, e_error);
+ }
+ }
+ f_acTriggerEvent(m_stopPassBeaconing);
+
+ // Postamble
+ f_poDefault();
+ f_cf01Down();
+
+ } // End of function f_GEONW_PON_BEA_TI_01
+
+ /**
+ * @desc TP Function for TC_GEONW_PON_BEA_TI_02
+ */
+ function f_GEONW_PON_BEA_TI_02() runs on ItsGeoNetworking {
+
+ // Local variables
+ var LongPosVector v_longPosVectorNodeB;
+ var LongPosVector v_longPosVectorIut;
+ var boolean v_geoUnicastReceived := false;
+ var boolean v_readyForRetransmission := false;
+ timer t_minRetransTimer := f_getBsRetransmitTimer() - f_getDeltaTimer();
+ timer t_maxRetransTimer := f_getBsRetransmitTimer() + f_getBsMaxJitter() + f_getDeltaTimer();
+
+ // Test control
+ if (not PICS_GN_BEACON_SRC) {
+ log("*** " & testcasename() & ": PICS_GN_BEACON_SRC required for executing the TC ***");
+ setverdict(inconc);
+ stop;
+ }
+
+ // Test component configuration
+ f_cf01Up();
+ v_longPosVectorNodeB := f_getPosition(c_compNodeB);
+ v_longPosVectorIut := f_getPosition(c_compIut);
+
+ // Test adapter configuration
+ f_acTriggerEvent(m_startPassBeaconing(m_beaconHeader(v_longPosVectorIut).beaconHeader));
+
+ // Preamble
+ f_prNeighbour();
+ f_selfOrClientSyncAndVerdict(c_prDone, e_success);
+
+ // Test Body
+ if ( not f_utTriggerEvent(m_generateShbMessage) ) {
+ log("*** " & testcasename() & ": INCONC: Trigger failed ***");
+ f_selfOrClientSyncAndVerdict(c_tbDone, e_timeout);
+ }
+ tc_ac.start;
+ alt {
+ [] geoNetworkingPort.receive(mw_geoNwInd(mw_geoNwPdu(mw_geoNwShbPacket))) {
+ tc_ac.stop;
+ t_minRetransTimer.start;
+ t_maxRetransTimer.start;
+ v_geoUnicastReceived := true;
+ repeat;
+ }
+ [] geoNetworkingPort.receive(mw_geoNwInd(mw_geoNwPdu(mw_geoNwBeaconPacket))) {
+ if(not(v_geoUnicastReceived)) {
+ repeat;
+ }
+ if(not(v_readyForRetransmission)) {
+ log("*** " & testcasename() & ": Beacon not transmitted at prescribed periodicity (too early) ***");
+ f_selfOrClientSyncAndVerdict(c_tbDone, e_error);
+ }
+ else {
+ log("*** " & testcasename() & ": Beacon transmitted at prescribed periodicity ***");
+ f_selfOrClientSyncAndVerdict(c_tbDone, e_success);
+ }
+ }
+ [] t_minRetransTimer.timeout {
+ log("*** " & testcasename() & ": Ready for retransmission ***");
+ v_readyForRetransmission := true;
+ repeat;
+ }
+ [] t_maxRetransTimer.timeout {
+ log("*** " & testcasename() & ": Beacon not transmitted at prescribed periodicity (too late) ***");
+ f_selfOrClientSyncAndVerdict(c_tbDone, e_error);
+ }
+ [] tc_ac.timeout {
+ log("*** " & testcasename() & ": GUC not received ***");
+ f_selfOrClientSyncAndVerdict(c_tbDone, e_timeout);
+ }
+ }
+ f_acTriggerEvent(m_stopPassBeaconing);
+
+ // Postamble
+ f_poNeighbour();
+ f_cf01Down();
+
+ } // End of function f_GEONW_PON_BEA_TI_02
+
+ } // end geoBeaconing
+
+ // 6.2.2.8
+ group geoGeoUnicast {
+
+ group gucAllForwardingAlgorithm {
+
+
+ group GEONW_PON_GUC_ALL_BV_03 {
+
+ /**
+ * @desc TP Function for TC_GEONW_PON_GUC_ALL_BV_03
+ */
+ function f_GEONW_PON_GUC_ALL_BV_03() runs on ItsMtc {
+
+ // Local variables
+ var ItsGeoNetworking v_nodeB;
+ var ItsGeoNetworking v_nodeC;
+
+ // 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
+
+ // Start components
+ v_nodeB := f_getComponent(c_compNodeB);
+ v_nodeC := f_getComponent(c_compNodeC);
+ v_nodeB.start(f_GEONW_PON_GUC_ALL_BV_03_nodeB());
+ v_nodeC.start(f_GEONW_PON_GUC_ALL_BV_03_nodeC());
+
+ // Synchronization
+ f_serverSync2ClientsAndStop({c_prDone, c_tbDone});
+
+ // Cleanup
+ f_cf03Down();
+
+ } // End of function f_GEONW_PON_GUC_BV_03
+
+ /**
+ * @desc Behavior function for NodeB (TC_GEONW_PON_GUC_ALL_BV_03)
+ */
+ function f_GEONW_PON_GUC_ALL_BV_03_nodeB() runs on ItsGeoNetworking {
+
+ // Local variables
+ var LongPosVector v_longPosVectorNodeA := f_getPosition(c_compNodeA);
+
+ // Preamble
+ f_prNeighbour();
+
+ f_sendGeoNetMessage(
+ m_geoNwReq_withLinkLayerDestination(
+ m_geoNwPdu(
+ m_geoNwUnicastPacket(
+ v_longPosVectorNodeA,
+ f_longPosVector2ShortPosVector(f_getPosition(c_compIut)),
+ vc_localSeqNumber
+ )
+ ),
+ -,
+ f_getIutMacAddress()
+ )
+ );
+ f_selfOrClientSyncAndVerdict(c_prDone, e_success);
+
+ // Test Body
+ tc_ac.start;
+ alt {
+ [] geoNetworkingPort.receive(
+ mw_geoNwInd(
+ mw_geoNwPdu(
+ mw_geoNwUnicastPacketWithHl(
+ mw_shortPosVectorPosition(f_longPosVector2ShortPosVector(v_longPosVectorNodeA)),
+ ?,
+ c_defaultHopLimit
+ ),
+ -,
+ c_defaultHopLimit - 1
+ )
+ )
+ ) {
+ tc_ac.stop;
+ log("*** " & testcasename() & ": PASS: Forwarded GUC received ***");
+ f_selfOrClientSyncAndVerdict(c_tbDone, e_success);
+ }
+ [] geoNetworkingPort.receive(
+ mw_geoNwInd(
+ mw_geoNwPdu(
+ mw_geoNwUnicastPacket(
+ ?,
+ ?
+ )
+ )
+ )
+ ) {
+ tc_ac.stop;
+ log("*** " & testcasename() & ": FAIL: Fields not correctly updated ***");
+ f_selfOrClientSyncAndVerdict(c_tbDone, e_error);
+ }
+ [] tc_ac.timeout {
+ log("*** " & testcasename() & ": FAIL: GUC was not retransmitted ***");
+ f_selfOrClientSyncAndVerdict(c_tbDone, e_error);
+ }
+ }
+
+ // Postamble
+ f_poNeighbour();
+
+ } // End of function f_GEONW_PON_GUC_ALL_BV_03_nodeB
+
+ /**
+ * @desc Behavior function for NodeC (TC_GEONW_PON_GUC_ALL_BV_03)
+ */
+ function f_GEONW_PON_GUC_ALL_BV_03_nodeC() runs on ItsGeoNetworking {
+
+ // Local variables
+ var LongPosVector v_obsoleteLongPosVectorNodeA := f_getPosition(c_compNodeA);
+
+ // Preamble
+ f_prNeighbour();
+ v_obsoleteLongPosVectorNodeA.timestamp_ := v_obsoleteLongPosVectorNodeA.timestamp_ - 1000;
+ v_obsoleteLongPosVectorNodeA.latitude := v_obsoleteLongPosVectorNodeA.latitude - 1;
+ f_selfOrClientSyncAndVerdict(c_prDone, e_success);
+
+ // Test Body
+ f_sendGeoNetMessage(
+ m_geoNwReq_withLinkLayerDestination(
+ m_geoNwPdu(
+ m_geoNwUnicastPacket(
+ f_getPosition(c_compNodeC),
+ f_longPosVector2ShortPosVector(v_obsoleteLongPosVectorNodeA),
+ vc_localSeqNumber,
+ c_defaultHopLimit
+ ),
+ -,
+ c_defaultHopLimit
+ ),
+ -,
+ f_getIutMacAddress()
+ )
+ );
+
+ f_selfOrClientSyncAndVerdict(c_tbDone, e_success);
+
+ // Postamble
+ f_poNeighbour();
+
+ } // End of function f_GEONW_PON_GUC_ALL_BV_03_nodeC
+
+ } // end GEONW_PON_GUC_ALL_BV_03
+
+ group GEONW_PON_GUC_ALL_BO_04 {
+
+ /**
+ * @desc TP Function for TC_GEONW_PON_GUC_ALL_BO_04
+ */
+ function f_GEONW_PON_GUC_ALL_BO_04() runs on ItsMtc {
+
+ // Local variables
+ var ItsGeoNetworking v_nodeB;
+ var ItsGeoNetworking v_nodeC;
+
+ // 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
+
+ // Start components
+ v_nodeB := f_getComponent(c_compNodeB);
+ v_nodeC := f_getComponent(c_compNodeC);
+ v_nodeB.start(f_GEONW_PON_GUC_ALL_BO_04_nodeB());
+ v_nodeC.start(f_GEONW_PON_GUC_ALL_BO_04_nodeC());
+
+ // Synchronization
+ f_serverSync2ClientsAndStop({c_prDone, c_tbDone});
+
+ // Cleanup
+ f_cf03Down();
+
+ } // End of function f_GEONW_PON_GUC_BO_04
+
+ /**
+ * @desc Behavior function for NodeB (TC_GEONW_PON_GUC_ALL_BO_04)
+ */
+ function f_GEONW_PON_GUC_ALL_BO_04_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_noac.start;
+ alt {
+ [] geoNetworkingPort.receive(
+ mw_geoNwInd(
+ mw_geoNwPdu(
+ mw_geoNwUnicastPacket(
+ mw_shortPosVectorPosition(f_longPosVector2ShortPosVector(v_longPosVectorNodeA)),
+ ?
+ ),
+ -,
+ ?
+ )
+ )
+ ) {
+ tc_noac.stop;
+ log("*** " & testcasename() & ": FAIL: Retransmitted GUC received ***");
+ f_selfOrClientSyncAndVerdict(c_tbDone, e_error);
+ }
+ [] tc_noac.timeout {
+ log("*** " & testcasename() & ": PASS: GUC was not retransmitted ***");
+ f_selfOrClientSyncAndVerdict(c_tbDone, e_success);
+ }
+ }
+
+ // Postamble
+ f_poNeighbour();
+
+ } // End of function f_GEONW_PON_GUC_ALL_BO_04_nodeB
+
+ /**
+ * @desc Behavior function for NodeC (TC_GEONW_PON_GUC_ALL_BO_04)
+ */
+ function f_GEONW_PON_GUC_ALL_BO_04_nodeC() runs on ItsGeoNetworking {
+
+ // Local variables
+ var LongPosVector v_longPosVectorNodeA := f_getPosition(c_compNodeA);
+
+ // Preamble
+ f_prNeighbour();
+ f_selfOrClientSyncAndVerdict(c_prDone, e_success);
+
+ // Test Body
+ f_sendGeoNetMessage(
+ m_geoNwReq_withLinkLayerDestination(
+ m_geoNwPdu(
+ m_geoNwUnicastPacket(
+ f_getPosition(c_compNodeC),
+ f_longPosVector2ShortPosVector(v_longPosVectorNodeA),
+ vc_localSeqNumber
+ ),
+ -,
+ 1
+ ),
+ -,
+ f_getIutMacAddress()
+ )
+ );
+
+ tc_noac.start;
+ alt {
+ [] geoNetworkingPort.receive(
+ mw_geoNwInd(
+ mw_geoNwPdu(
+ mw_geoNwUnicastPacket(
+ mw_shortPosVectorPosition(f_longPosVector2ShortPosVector(v_longPosVectorNodeA)),
+ ?
+ ),
+ -,
+ ?
+ )
+ )
+ ) {
+ tc_noac.stop;
+ log("*** " & testcasename() & ": FAIL: Retransmitted GUC received ***");
+ f_selfOrClientSyncAndVerdict(c_tbDone, e_error);
+ }
+ [] tc_noac.timeout {
+ log("*** " & testcasename() & ": PASS: GUC was not retransmitted ***");
+ f_selfOrClientSyncAndVerdict(c_tbDone, e_success);
+ }
+ }
+
+ // Postamble
+ f_poNeighbour();
+
+ } // End of function f_GEONW_PON_GUC_ALL_BO_04_nodeC
+
+ } // end GEONW_PON_GUC_ALL_BO_04
+
+ /**
+ * @desc TP Function for TC_GEONW_PON_GUC_ALL_BV_05
+ */
+ function f_GEONW_PON_GUC_ALL_BV_05() runs on ItsGeoNetworking {
+
+ // Local variables
+ var template (value) GeoNetworkingPdu v_gnPacket;
+ var integer i;
+
+ // Test control
+ if (not PICS_GN_GUC_DST) {
+ log("*** " & testcasename() & ": PICS_GN_GUC_DST required for executing the TC ***");
+ setverdict(inconc);
+ stop;
+ }
+
+ // Test component configuration
+ f_cf01Up();
+
+ // Test adapter configuration
+
+ // Preamble
+ f_prDefault();
+ f_selfOrClientSyncAndVerdict(c_prDone, e_success);
+
+ // Test Body
+ v_gnPacket := m_geoNwPdu(
+ m_geoNwUnicastPacket(
+ f_getPosition(c_compNodeB),
+ f_getIutShortPosVector(),
+ vc_localSeqNumber
+ )
+ );
+ f_sendGeoNetMessage(m_geoNwReq_withLinkLayerDestination(v_gnPacket, -, f_getIutMacAddress()));
+
+ f_sleep(PX_TAC);
+
+ for(i:=0; i < lengthof(vc_utInds) and not match(vc_utInds[i].rawPayload, valueof(v_gnPacket.gnPacket.packet.payload)); 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);
+ }
+
+ // Postamble
+ f_poDefault();
+ f_cf01Down();
+
+ } // End of function f_GEONW_PON_GUC_ALL_BV_05
+
+ /**
+ * @desc TP Function for TC_GEONW_PON_GUC_ALL_BV_06
+ */
+ function f_GEONW_PON_GUC_ALL_BV_06() runs on ItsGeoNetworking {
+
+ // Local variables
+ var LongPosVector v_longPosVectorNodeA := f_getPosition(c_compNodeA);
+ var template (value) GeoNetworkingPdu v_gnPacket;
+ var integer i;
+
+ // 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_cf01Up();
+
+ // Test adapter configuration
+
+ // Preamble
+ f_prDefault();
+ f_selfOrClientSyncAndVerdict(c_prDone, e_success);
+
+ // Test Body
+ v_gnPacket := m_geoNwPdu(
+ m_geoNwUnicastPacket(
+ f_getPosition(c_compNodeB),
+ f_longPosVector2ShortPosVector(v_longPosVectorNodeA),
+ vc_localSeqNumber
+ )
+ );
+ f_sendGeoNetMessage(m_geoNwReq_withLinkLayerDestination(v_gnPacket, -, f_getIutMacAddress()));
+
+ 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_poDefault();
+ f_cf01Down();
+
+ } // End of function f_GEONW_PON_GUC_ALL_BV_06
+
+ group GEONW_PON_GUC_ALL_BO_08 {
+
+ /**
+ * @desc TP Function for TC_GEONW_PON_GUC_ALL_BO_08
+ */
+ function f_GEONW_PON_GUC_ALL_BO_08() runs on ItsMtc {
+
+ // Local variables
+ var ItsGeoNetworking v_nodeB;
+ var ItsGeoNetworking v_nodeC;
+
+ // Test control
+ if (not PICS_GN_GUC_DST) {
+ log("*** " & testcasename() & ": PICS_GN_GUC_DST required for executing the TC ***");
+ setverdict(inconc);
+ stop;
+ }
+
+ // Test component configuration
+ f_cf03Up(c_compNodeB);
+
+ // Preamble
+
+ // Start components
+ v_nodeB := f_getComponent(c_compNodeB);
+ v_nodeC := f_getComponent(c_compNodeC);
+ v_nodeB.start(f_GEONW_PON_GUC_ALL_BO_08_nodeB());
+ v_nodeC.start(f_GEONW_PON_GUC_ALL_BO_08_nodeC());
+
+ // Synchronization
+ f_serverSync2ClientsAndStop({c_prDone, c_tbDone});
+
+ // Cleanup
+ f_cf03Down();
+
+ } // End of function f_GEONW_PON_GUC_ALL_BO_08
+
+ /**
+ * @desc Behavior function for NodeB (TC_GEONW_PON_GUC_ALL_BO_08)
+ */
+ function f_GEONW_PON_GUC_ALL_BO_08_nodeB() runs on ItsGeoNetworking {
+
+ // Local variables
+ var LongPosVector v_longPosVectorIut := f_getPosition(c_compIut);
+ var integer i;
+ var template (present) GeoNetworkingPdu v_gnPacket := m_geoNwPdu(
+ m_geoNwUnicastPacket(
+ f_getPosition(c_compNodeC),
+ f_longPosVector2ShortPosVector(v_longPosVectorIut),
+ vc_localSeqNumber
+ ),
+ -,
+ c_defaultHopLimit - 1
+ );
+
+ // Preamble
+ f_prNeighbour();
+ f_sleep(PX_TAC);
+ for(i:=0; i < lengthof(vc_utInds) and not match(vc_utInds[i].rawPayload, valueof(v_gnPacket.gnPacket.packet.payload)); i:=i+1) {
+ // empty on purpose
+ }
+ if(i < lengthof(vc_utInds)) {
+ log("*** " & testcasename() & ": PASS: GN was transmitted to upper layer ***");
+ //flush received upper indications
+ 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
+ f_sendGeoNetMessage(m_geoNwReq_withLinkLayerDestination(valueof(v_gnPacket), -, f_getIutMacAddress()));
+
+ 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 of function f_GEONW_PON_GUC_ALL_BO_08_nodeB
+
+ /**
+ * @desc Behavior function for NodeC (TC_GEONW_PON_GUC_ALL_BO_08)
+ */
+ function f_GEONW_PON_GUC_ALL_BO_08_nodeC() runs on ItsGeoNetworking {
+
+ // Local variables
+ var LongPosVector v_longPosVectorIut := f_getPosition(c_compIut);
+
+ // Preamble
+ f_prNeighbour();
+ f_sendGeoNetMessage(
+ m_geoNwReq_withLinkLayerDestination(
+ m_geoNwPdu(
+ m_geoNwUnicastPacket(
+ f_getPosition(c_compNodeC),
+ f_longPosVector2ShortPosVector(v_longPosVectorIut),
+ vc_localSeqNumber
+ ),
+ -,
+ c_defaultHopLimit
+ ),
+ -,
+ f_getIutMacAddress()
+ )
+ );
+ f_selfOrClientSyncAndVerdict(c_prDone, e_success);
+
+ // Test Body
+ f_selfOrClientSyncAndVerdict(c_tbDone, e_success);
+
+ // Postamble
+ f_poNeighbour();
+
+ } // End of function f_GEONW_PON_GUC_ALL_BO_08_nodeC
+
+ } // end GEONW_PON_GUC_ALL_BO_08
+
+ } // end gucAllForwardingAlgorithm
+
+ group gucGreedyForwarding {
+
+ /**
+ * @desc TP Function for TC_GEONW_PON_GUC_GRD_BV_01
+ */
+ function f_GEONW_PON_GUC_GRD_BV_01() runs on ItsGeoNetworking {
+
+ // Local variables
+ var LongPosVector v_longPosVectorNodeB;
+
+ // Test control
+ if (not PICS_GN_GUC_SRC) {
+ log("*** " & testcasename() & ": PICS_GN_GUC_SRC required for executing the TC ***");
+ setverdict(inconc);
+ stop;
+ }
+ if ((f_getNonAreaForwardingAlgorithm() != e_greedy) and (f_getNonAreaForwardingAlgorithm() != e_unspecified)) {
+ log("*** " & testcasename() & ": PICS_GN_NON_AREA_FORWARDING_ALGORITHM == (e_greedy or e_unspecified) required for executing the TC ***");
+ setverdict(inconc);
+ stop;
+ }
+
+ // Test component configuration
+ f_cf01Up();
+ v_longPosVectorNodeB := f_getPosition(c_compNodeB);
+
+ // Test adapter configuration
+
+ // Preamble
+ f_prNeighbour();
+ f_selfOrClientSyncAndVerdict(c_prDone, e_success);
+
+ // Test Body
+ if ( not f_utTriggerEvent(m_generateGeoUnicastMessage(v_longPosVectorNodeB.gnAddr)) ) {
+ log("*** " & testcasename() & ": INCONC: Trigger failed ***");
+ f_selfOrClientSyncAndVerdict(c_tbDone, e_timeout);
+ }
+ tc_ac.start;
+ alt {
+ [] geoNetworkingPort.receive(
+ mw_geoNwInd(
+ mw_geoNwPdu(
+ mw_geoNwUnicastPacket(
+ mw_shortPosVectorPosition(f_longPosVector2ShortPosVector(v_longPosVectorNodeB)),
+ ?
+ )
+ )
+ )
+ ) {
+ tc_ac.stop;
+ log("*** " & testcasename() & ": DEPV of the received GUC message correctly set ***");
+ f_selfOrClientSyncAndVerdict(c_tbDone, e_success);
+ }
+ [] geoNetworkingPort.receive(
+ mw_geoNwInd(
+ mw_geoNwPdu(
+ mw_geoNwUnicastPacket(
+ ?,
+ ?
+ )
+ )
+ )
+ ) {
+ tc_ac.stop;
+ log("*** " & testcasename() & ": DEPV of the received GUC message incorrectly set ***");
+ f_selfOrClientSyncAndVerdict(c_tbDone, e_error);
+ }
+ [] tc_ac.timeout {
+ log("*** " & testcasename() & ": Expected message not received ***");
+ f_selfOrClientSyncAndVerdict(c_tbDone, e_timeout);
+ }
+ }
+
+ // Postamble
+ f_poNeighbour();
+ f_cf01Down();
+
+ } // End of function f_GEONW_PON_GUC_GRD_BV_01
+
+ group GEONW_PON_GUC_GRD_BV_02 {
+
+ /**
+ * @desc TP Function for TC_GEONW_PON_GUC_GRD_BV_02
+ */
+ function f_GEONW_PON_GUC_GRD_BV_02() runs on ItsMtc {
+
+ // Local variables
+ var ItsGeoNetworking v_nodeB;
+ var ItsGeoNetworking v_nodeC;
+ var ItsGeoNetworking v_nodeD;
+
+ // Test control
+ if (not PICS_GN_GUC_FWD) {
+ log("*** " & testcasename() & ": PICS_GN_GUC_FWD required for executing the TC ***");
+ setverdict(inconc);
+ stop;
+ }
+ if ((f_getNonAreaForwardingAlgorithm() != e_greedy) and (f_getNonAreaForwardingAlgorithm() != e_unspecified)) {
+ log("*** " & testcasename() & ": PICS_GN_NON_AREA_FORWARDING_ALGORITHM == (e_greedy or e_unspecified) 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_GUC_GRD_BV_02_nodeB());
+ v_nodeC.start(f_GEONW_PON_GUC_GRD_BV_02_nodeC());
+ v_nodeD.start(f_GEONW_PON_GUC_GRD_BV_02_nodeD());
+
+ // Synchronization
+ f_serverSync3ClientsAndStop({c_prDone, c_tbDone});
+
+ // Cleanup
+ f_cf04Down();
+
+ } // End of function f_GEONW_PON_GUC_GRD_BV_02
+
+ /**
+ * @desc Behavior function for NodeB (TC_GEONW_PON_GUC_GRD_BV_02)
+ */
+ function f_GEONW_PON_GUC_GRD_BV_02_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_geoNwUnicastPacket(
+ mw_shortPosVectorPosition(f_longPosVector2ShortPosVector(v_longPosVectorNodeA)),
+ ?
+ )
+ )
+ )
+ ) {
+ tc_ac.stop;
+ log("*** " & testcasename() & ": PASS: Forwarded GUC received ***");
+ f_selfOrClientSyncAndVerdict(c_tbDone, e_success);
+ }
+ [] tc_ac.timeout {
+ log("*** " & testcasename() & ": FAIL: GUC was not forwarded ***");
+ f_selfOrClientSyncAndVerdict(c_tbDone, e_error);
+ }
+ }
+
+ // Postamble
+ f_poNeighbour();
+
+ } // End of function f_GEONW_PON_GUC_GRD_BV_02_nodeB
+
+ /**
+ * @desc Behavior function for NodeC (TC_GEONW_PON_GUC_GRD_BV_02)
+ */
+ function f_GEONW_PON_GUC_GRD_BV_02_nodeC() runs on ItsGeoNetworking {
+
+ // Local variables
+
+ // Preamble
+ f_prNeighbour();
+ f_selfOrClientSyncAndVerdict(c_prDone, e_success);
+
+ // Test Body
+ f_sendGeoNetMessage(
+ m_geoNwReq_withLinkLayerDestination(
+ m_geoNwPdu(
+ m_geoNwUnicastPacket(
+ f_getPosition(c_compNodeC),
+ f_longPosVector2ShortPosVector(f_getPosition(c_compNodeA)),
+ vc_localSeqNumber
+ ),
+ -,
+ c_defaultHopLimit
+ ),
+ -,
+ f_getIutMacAddress()
+ )
+ );
+
+ f_selfOrClientSyncAndVerdict(c_tbDone, e_success);
+
+ // Postamble
+ f_poNeighbour();
+
+ } // End of function f_GEONW_PON_GUC_GRD_BV_02_nodeC
+
+ /**
+ * @desc Behavior function for NodeD (TC_GEONW_PON_GUC_GRD_BV_02)
+ */
+ function f_GEONW_PON_GUC_GRD_BV_02_nodeD() runs on ItsGeoNetworking {
+
+ // Local variables
+
+ // Preamble
+ f_prNeighbour();
+ f_selfOrClientSyncAndVerdict(c_prDone, e_success);
+
+ // Test Body
+ f_selfOrClientSyncAndVerdict(c_tbDone, e_success);
+
+ // Postamble
+ f_poNeighbour();
+
+ } // End of function f_GEONW_PON_GUC_GRD_BV_02_nodeD
+
+ } // end GEONW_PON_GUC_GRD_BV_02
+
+ group GEONW_PON_GUC_GRD_BO_07 {
+
+ /**
+ * @desc TP Function for TC_GEONW_PON_GUC_GRD_BO_07
+ */
+ function f_GEONW_PON_GUC_GRD_BO_07() runs on ItsMtc {
+
+ // Local variables
+ var ItsGeoNetworking v_nodeB;
+ var ItsGeoNetworking v_nodeC;
+
+ // Test control
+ if (not PICS_GN_GUC_FWD) {
+ log("*** " & testcasename() & ": PICS_GN_GUC_FWD required for executing the TC ***");
+ setverdict(inconc);
+ stop;
+ }
+ if ((f_getNonAreaForwardingAlgorithm() != e_greedy) and (f_getNonAreaForwardingAlgorithm() != e_unspecified)) {
+ log("*** " & testcasename() & ": PICS_GN_NON_AREA_FORWARDING_ALGORITHM == (e_greedy or e_unspecified) required for executing the TC ***");
+ setverdict(inconc);
+ stop;
+ }
+
+ // Test component configuration
+ f_cf03Up();
+
+ // Preamble
+
+ // Start components
+ v_nodeB := f_getComponent(c_compNodeB);
+ v_nodeC := f_getComponent(c_compNodeC);
+ v_nodeB.start(f_GEONW_PON_GUC_GRD_BO_07_nodeB());
+ v_nodeC.start(f_GEONW_PON_GUC_GRD_BO_07_nodeC());
+
+ // Synchronization
+ f_serverSync2ClientsAndStop({c_prDone, c_tbDone});
+
+ // Cleanup
+ f_cf03Down();
+
+ } // End of function f_GEONW_PON_GUC_GRD_BO_07
+
+ /**
+ * @desc Behavior function for NodeB (TC_GEONW_PON_GUC_GRD_BO_07)
+ */
+ function f_GEONW_PON_GUC_GRD_BO_07_nodeB() runs on ItsGeoNetworking {
+
+ // Local variables
+ var LongPosVector v_longPosVectorNodeA := f_getPosition(c_compNodeA);
+
+ // Preamble
+ f_prNeighbour();
+ tc_ac.start;
+ alt {
+ [] geoNetworkingPort.receive(
+ mw_geoNwInd(
+ mw_geoNwPdu(
+ mw_geoNwUnicastPacket(
+ mw_shortPosVectorPosition(f_longPosVector2ShortPosVector(v_longPosVectorNodeA)),
+ ?
+ )
+ )
+ )
+ ) {
+ tc_ac.stop;
+ log("*** " & testcasename() & ": INFO: First GUC forwarded ***");
+ f_selfOrClientSyncAndVerdict(c_prDone, e_success);
+ }
+ [] tc_ac.timeout {
+ log("*** " & testcasename() & ": INCONC: First GUC was not forwarded ***");
+ f_selfOrClientSyncAndVerdict(c_prDone, e_timeout);
+ }
+ }
+
+ // Test Body
+ f_sendGeoNetMessage(
+ m_geoNwReq_withLinkLayerDestination(
+ m_geoNwPdu(
+ m_geoNwUnicastPacket(
+ f_getPosition(c_compNodeC),
+ f_longPosVector2ShortPosVector(v_longPosVectorNodeA),
+ vc_localSeqNumber
+ ),
+ -,
+ c_defaultHopLimit - 1
+ ),
+ -,
+ f_getIutMacAddress()
+ )
+ );
+
+ tc_noac.start;
+ alt {
+ [] geoNetworkingPort.receive(
+ mw_geoNwInd(
+ mw_geoNwPdu(
+ mw_geoNwUnicastPacket(
+ mw_shortPosVectorPosition(f_longPosVector2ShortPosVector(v_longPosVectorNodeA)),
+ ?
+ )
+ )
+ )
+ ) {
+ tc_noac.stop;
+ log("*** " & testcasename() & ": FAIL: Duplicate GUC was forwarded ***");
+ f_selfOrClientSyncAndVerdict(c_tbDone, e_error);
+ }
+ [] tc_noac.timeout {
+ log("*** " & testcasename() & ": PASS: Duplicate GUC not forwarded ***");
+ f_selfOrClientSyncAndVerdict(c_tbDone, e_success);
+ }
+ }
+
+ // Postamble
+ f_poNeighbour();
+
+ } // End of function f_GEONW_PON_GUC_GRD_BO_07_nodeB
+
+ /**
+ * @desc Behavior function for NodeC (TC_GEONW_PON_GUC_GRD_BO_07)
+ */
+ function f_GEONW_PON_GUC_GRD_BO_07_nodeC() runs on ItsGeoNetworking {
+
+ // Local variables
+ var LongPosVector v_longPosVectorNodeA := f_getPosition(c_compNodeA);
+
+ // Preamble
+ f_prNeighbour();
+ f_sendGeoNetMessage(
+ m_geoNwReq_withLinkLayerDestination(
+ m_geoNwPdu(
+ m_geoNwUnicastPacket(
+ f_getPosition(c_compNodeC),
+ f_longPosVector2ShortPosVector(v_longPosVectorNodeA),
+ vc_localSeqNumber
+ ),
+ -,
+ c_defaultHopLimit
+ ),
+ -,
+ f_getIutMacAddress()
+ )
+ );
+ f_selfOrClientSyncAndVerdict(c_prDone, e_success);
+
+ // Test Body
+ tc_noac.start;
+ alt {
+ [] geoNetworkingPort.receive(
+ mw_geoNwInd(
+ mw_geoNwPdu(
+ mw_geoNwUnicastPacket(
+ mw_shortPosVectorPosition(f_longPosVector2ShortPosVector(v_longPosVectorNodeA)),
+ ?
+ )
+ )
+ )
+ ) {
+ tc_noac.stop;
+ log("*** " & testcasename() & ": FAIL: Duplicate GUC was forwarded ***");
+ f_selfOrClientSyncAndVerdict(c_tbDone, e_error);
+ }
+ [] tc_noac.timeout {
+ log("*** " & testcasename() & ": PASS: Duplicate GUC not forwarded ***");
+ f_selfOrClientSyncAndVerdict(c_tbDone, e_success);
+ }
+ }
+
+ // Postamble
+ f_poNeighbour();
+
+ } // End of function f_GEONW_PON_GUC_GRD_BO_07_nodeC
+
+ } // end GEONW_PON_GUC_GRD_BO_07
+
+ } // end gucGreedyForwarding
+
+ group gucContentionBasedForwarding {
+
+ group GEONW_PON_GUC_CBF_BV_01 {
+
+ /**
+ * @desc TP Function for TC_GEONW_PON_GUC_CBF_BV_01
+ */
+ function f_GEONW_PON_GUC_CBF_BV_01() runs on ItsMtc {
+
+ // Local variables
+ var ItsGeoNetworking v_nodeB;
+ var ItsGeoNetworking v_nodeC;
+
+ // Test control
+ if (not PICS_GN_GUC_SRC) {
+ log("*** " & testcasename() & ": PICS_GN_GUC_SRC 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;
+ }
+
+ // Test component configuration
+ f_cf03Up();
+
+ // Preamble
+
+ // Start components
+ v_nodeB := f_getComponent(c_compNodeB);
+ v_nodeC := f_getComponent(c_compNodeC);
+ v_nodeB.start(f_GEONW_PON_GUC_CBF_BV_01_nodeB());
+ v_nodeC.start(f_GEONW_PON_GUC_CBF_BV_01_nodeC());
+
+ // Synchronization
+ f_serverSync2ClientsAndStop({c_prDone, c_tbDone});
+
+ // Cleanup
+ f_cf03Down();
+
+ } // End of function f_GEONW_PON_GUC_CBF_BV_01
+
+ /**
+ * @desc Behavior function for NodeB (TC_GEONW_PON_GUC_CBF_BV_01)
+ */
+ function f_GEONW_PON_GUC_CBF_BV_01_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
+ if(not f_utTriggerEvent(m_generateGeoUnicastMessage(v_longPosVectorNodeB.gnAddr))) {
+ log("*** " & testcasename() & ": INCONC: Trigger failed ***");
+ f_selfOrClientSyncAndVerdict(c_tbDone, e_timeout);
+ }
+ tc_ac.start;
+ alt {
+ [] geoNetworkingPort.receive(
+ mw_geoNwInd(
+ mw_geoNwPdu(
+ mw_geoNwUnicastPacket(
+ mw_shortPosVectorPosition(f_longPosVector2ShortPosVector(v_longPosVectorNodeB)),
+ ?
+ )
+ )
+ )
+ ) {
+ tc_ac.stop;
+ log("*** " & testcasename() & ": PASS: GUC received ***");
+ f_selfOrClientSyncAndVerdict(c_tbDone, e_success);
+ }
+ [] tc_ac.timeout {
+ log("*** " & testcasename() & ": FAIL: GUC was not received ***");
+ f_selfOrClientSyncAndVerdict(c_tbDone, e_error);
+ }
+ }
+
+ // Postamble
+ f_poNeighbour();
+
+ } // End of function f_GEONW_PON_GUC_CBF_BV_01_nodeB
+
+ /**
+ * @desc Behavior function for NodeC (TC_GEONW_PON_GUC_CBF_BV_01)
+ */
+ function f_GEONW_PON_GUC_CBF_BV_01_nodeC() 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_ac.start;
+ alt {
+ [] geoNetworkingPort.receive(
+ mw_geoNwInd(
+ mw_geoNwPdu(
+ mw_geoNwUnicastPacket(
+ mw_shortPosVectorPosition(f_longPosVector2ShortPosVector(v_longPosVectorNodeB)),
+ ?
+ )
+ )
+ )
+ ) {
+ tc_ac.stop;
+ log("*** " & testcasename() & ": PASS: broadcasted GUC received ***");
+ f_selfOrClientSyncAndVerdict(c_tbDone, e_success);
+ }
+ [] tc_ac.timeout {
+ log("*** " & testcasename() & ": FAIL: GUC was not broadcasted ***");
+ f_selfOrClientSyncAndVerdict(c_tbDone, e_error);
+ }
+ }
+
+ // Postamble
+ f_poNeighbour();
+
+ } // End of function f_GEONW_PON_GUC_CBF_BV_01_nodeC
+
+ } // end GEONW_PON_GUC_CBF_BV_01
+
+ group GEONW_PON_GUC_CBF_BV_02 {
+
+ /**
+ * @desc TP Function for TC_GEONW_PON_GUC_CBF_BV_02
+ */
+ function f_GEONW_PON_GUC_CBF_BV_02() runs on ItsMtc {
+
+ // Local variables
+ var ItsGeoNetworking v_nodeB;
+ var ItsGeoNetworking v_nodeC;
+ var float v_distance := int2float(f_getCbfMaxCommunicationRange() - 10);
+ var LongPosVector v_longPosVectorIut, v_longPosVectorNodeA;
+
+ // Test control
+ if (not PICS_GN_GUC_FWD) {
+ log("*** " & testcasename() & ": PICS_GN_GUC_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;
+ }
+
+ // Test component configuration
+ f_cf03Up();
+ // re-compute NodeA's position.
+ v_longPosVectorIut := f_getIutLongPosVector();
+ v_longPosVectorNodeA := f_computePositionUsingDistance(v_longPosVectorIut, v_distance, 0);
+ v_longPosVectorNodeA.gnAddr := f_getTsGnLocalAddress(c_compNodeA);
+
+ // Preamble
+
+ // Start components
+ v_nodeB := f_getComponent(c_compNodeB);
+ v_nodeC := f_getComponent(c_compNodeC);
+ v_nodeB.start(f_GEONW_PON_GUC_CBF_BV_02_nodeB(v_distance, v_longPosVectorNodeA));
+ v_nodeC.start(f_GEONW_PON_GUC_CBF_BV_02_nodeC(v_longPosVectorNodeA));
+
+ // Synchronization
+ f_serverSync2ClientsAndStop({c_prDone, c_msgSent, c_tbDone});
+
+ // Cleanup
+ f_cf03Down();
+
+ } // End of function f_GEONW_PON_GUC_CBF_BV_02
+
+ /**
+ * @desc Behavior function for NodeB (TC_GEONW_PON_GUC_CBF_BV_02)
+ * @param p_distanceToNodeA Distance between IUT and NodeA
+ * @param p_longPosVectorNodeA Position vector of NodeA
+ */
+ function f_GEONW_PON_GUC_CBF_BV_02_nodeB(in float p_distanceToNodeA, in LongPosVector p_longPosVectorNodeA) runs on ItsGeoNetworking {
+
+ // Local variables
+ timer t_toCbf := (int2float(f_getCbfMaxTime())
+ + (
+ int2float(f_getCbfMinTime() - f_getCbfMaxTime())
+ / int2float(f_getCbfMaxCommunicationRange())
+ ) * p_distanceToNodeA) * 0.95 / 1000.0;
+
+ // Preamble
+ f_prNeighbour();
+ f_selfOrClientSyncAndVerdict(c_prDone, e_success);
+
+ // Test Body
+ log("*** " & testcasename() & ": INFO: Message sent ***");
+ f_selfOrClientSyncAndVerdict(c_msgSent, e_success);
+
+ tc_ac.start;
+ t_toCbf.start;
+ alt {
+ [] geoNetworkingPort.receive(
+ mw_geoNwInd(
+ mw_geoNwPdu(
+ mw_geoNwUnicastPacket(
+ mw_shortPosVectorPosition(f_longPosVector2ShortPosVector(p_longPosVectorNodeA)),
+ ?
+ )
+ )
+ )
+ ) {
+ tc_ac.stop;
+ if(t_toCbf.running) {
+ t_toCbf.stop;
+ log("*** " & testcasename() & ": FAIL: IUT re-broadcasted the packet too early ***");
+ f_selfOrClientSyncAndVerdict(c_tbDone, e_error);
+ }
+ else {
+ log("*** " & testcasename() & ": PASS: Forwarded GUC received ***");
+ f_selfOrClientSyncAndVerdict(c_tbDone, e_success);
+ }
+ }
+ [] t_toCbf.timeout {
+ log("*** " & testcasename() & ": INFO: Ready for receiving re-broadcasting ***");
+ repeat;
+ }
+ [] tc_ac.timeout {
+ log("*** " & testcasename() & ": FAIL: GUC was not forwarded ***");
+ f_selfOrClientSyncAndVerdict(c_tbDone, e_error);
+ }
+ }
+
+ // Postamble
+ f_poNeighbour();
+
+ } // End of function f_GEONW_PON_GUC_CBF_BV_02_nodeB
+
+ /**
+ * @desc Behavior function for NodeC (TC_GEONW_PON_GUC_CBF_BV_02)
+ * @param p_longPosVectorNodeA Position vector of NodeA
+ */
+ function f_GEONW_PON_GUC_CBF_BV_02_nodeC(in LongPosVector p_longPosVectorNodeA) runs on ItsGeoNetworking {
+
+ // Local variables
+
+ // Preamble
+ f_prNeighbour();
+ f_selfOrClientSyncAndVerdict(c_prDone, e_success);
+
+ // Test Body
+ f_sendGeoNetMessage(
+ m_geoNwReq_withLinkLayerDestination(
+ m_geoNwPdu(
+ m_geoNwUnicastPacket(
+ f_getPosition(c_compNodeC),
+ f_longPosVector2ShortPosVector(p_longPosVectorNodeA),
+ vc_localSeqNumber
+ ),
+ -,
+ c_defaultHopLimit
+ ),
+ -,
+ f_getIutMacAddress()
+ )
+ );
+ log("*** " & testcasename() & ": INFO: Message sent ***");
+ f_selfOrClientSyncAndVerdict(c_msgSent, e_success);
+
+ tc_ac.start;
+ alt {
+ [] geoNetworkingPort.receive(
+ mw_geoNwInd(
+ mw_geoNwPdu(
+ mw_geoNwUnicastPacket(
+ mw_shortPosVectorPosition(f_longPosVector2ShortPosVector(p_longPosVectorNodeA)),
+ ?
+ )
+ )
+ )
+ ) {
+ tc_ac.stop;
+ log("*** " & testcasename() & ": PASS: Re-broadcasted GUC received ***");
+ f_selfOrClientSyncAndVerdict(c_tbDone, e_success);
+ }
+ [] tc_ac.timeout {
+ log("*** " & testcasename() & ": FAIL: GUC was not re-broadcasted ***");
+ f_selfOrClientSyncAndVerdict(c_tbDone, e_error);
+ }
+ }
+
+ // Postamble
+ f_poNeighbour();
+
+ } // End of function f_GEONW_PON_GUC_CBF_BV_02_nodeC
+
+ } // end GEONW_PON_GUC_CBF_BV_02
+
+ group GEONW_PON_GUC_CBF_BV_07 {
+
+ /**
+ * @desc TP Function for TC_GEONW_PON_GUC_CBF_BV_07
+ */
+ function f_GEONW_PON_GUC_CBF_BV_07() runs on ItsMtc {
+
+ // Local variables
+ var ItsGeoNetworking v_nodeB;
+ var ItsGeoNetworking v_nodeC;
+ var float v_distance := int2float(f_getCbfMaxCommunicationRange() - 10);
+ var LongPosVector v_longPosVectorIut, v_longPosVectorNodeA;
+
+ // Test control
+ if (not PICS_GN_GUC_FWD) {
+ log("*** " & testcasename() & ": PICS_GN_GUC_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;
+ }
+
+ // Test component configuration
+ f_cf03Up();
+ // re-compute NodeA's position.
+ v_longPosVectorIut := f_getIutLongPosVector();
+ v_longPosVectorNodeA := f_computePositionUsingDistance(v_longPosVectorIut, v_distance, 0);
+ v_longPosVectorNodeA.gnAddr := f_getTsGnLocalAddress(c_compNodeA);
+
+ // Preamble
+
+ // Start components
+ v_nodeB := f_getComponent(c_compNodeB);
+ v_nodeC := f_getComponent(c_compNodeC);
+ v_nodeB.start(f_GEONW_PON_GUC_CBF_BV_07_nodeB(v_longPosVectorNodeA));
+ v_nodeC.start(f_GEONW_PON_GUC_CBF_BV_07_nodeC(v_longPosVectorNodeA));
+
+ // Synchronization
+ f_serverSync2ClientsAndStop({c_prDone, c_tbDone});
+
+ // Cleanup
+ f_cf03Down();
+
+ } // End of function f_GEONW_PON_GUC_CBF_BV_07
+
+ /**
+ * @desc Behavior function for NodeB (TC_GEONW_PON_GUC_CBF_BV_07)
+ * @param p_longPosVectorNodeA Position vector of NodeA
+ */
+ function f_GEONW_PON_GUC_CBF_BV_07_nodeB(in LongPosVector p_longPosVectorNodeA) runs on ItsGeoNetworking {
+
+ // Local variables
+
+ // Preamble
+ f_prNeighbour();
+ f_selfOrClientSyncAndVerdict(c_prDone, e_success);
+
+ // Test Body
+ f_sleepIgnoreDef(int2float(f_getCbfMaxTime())/2000.0);
+
+ f_sendGeoNetMessage(
+ m_geoNwReq_withLinkLayerDestination(
+ m_geoNwPdu(
+ m_geoNwUnicastPacket(
+ f_getPosition(c_compNodeC),
+ f_longPosVector2ShortPosVector(p_longPosVectorNodeA),
+ vc_localSeqNumber
+ ),
+ -,
+ c_defaultHopLimit - 1
+ ),
+ -,
+ f_getIutMacAddress()
+ )
+ );
+
+ tc_noac.start;
+ alt {
+ [] geoNetworkingPort.receive(
+ mw_geoNwInd(
+ mw_geoNwPdu(
+ mw_geoNwUnicastPacket(
+ mw_shortPosVectorPosition(f_longPosVector2ShortPosVector(p_longPosVectorNodeA)),
+ ?
+ )
+ )
+ )
+ ) {
+ tc_noac.stop;
+ log("*** " & testcasename() & ": FAIL: Forwarded GUC received ***");
+ f_selfOrClientSyncAndVerdict(c_tbDone, e_error);
+ }
+
+ [] tc_noac.timeout {
+ log("*** " & testcasename() & ": PASS: GUC was not forwarded ***");
+ f_selfOrClientSyncAndVerdict(c_tbDone, e_success);
+ }
+ }
+
+ // Postamble
+ f_poNeighbour();
+
+ } // End of function f_GEONW_PON_GUC_CBF_BV_07_nodeB
+
+ /**
+ * @desc Behavior function for NodeC (TC_GEONW_PON_GUC_CBF_BV_07)
+ * @param p_longPosVectorNodeA Position vector of NodeA
+ */
+ function f_GEONW_PON_GUC_CBF_BV_07_nodeC(in LongPosVector p_longPosVectorNodeA) runs on ItsGeoNetworking {
+
+ // Local variables
+
+ // Preamble
+ f_prNeighbour();
+ f_selfOrClientSyncAndVerdict(c_prDone, e_success);
+
+ // Test Body
+ //Note: Sending of the GUC packet move to test body in contrast to the test purpose due to time critical behaviour
+ f_sendGeoNetMessage(
+ m_geoNwReq_withLinkLayerDestination(
+ m_geoNwPdu(
+ m_geoNwUnicastPacket(
+ f_getPosition(c_compNodeC),
+ f_longPosVector2ShortPosVector(p_longPosVectorNodeA),
+ vc_localSeqNumber
+ ),
+ -,
+ c_defaultHopLimit
+ ),
+ -,
+ f_getIutMacAddress()
+ )
+ );
+
+ tc_noac.start;
+ alt {
+ [] geoNetworkingPort.receive(
+ mw_geoNwInd(
+ mw_geoNwPdu(
+ mw_geoNwUnicastPacket(
+ mw_shortPosVectorPosition(f_longPosVector2ShortPosVector(p_longPosVectorNodeA)),
+ ?
+ )
+ )
+ )
+ ) {
+ tc_ac.stop;
+ log("*** " & testcasename() & ": FAIL: Forwarded GUC received ***");
+ f_selfOrClientSyncAndVerdict(c_tbDone, e_error);
+ }
+ [] tc_noac.timeout {
+ log("*** " & testcasename() & ": PASS: GUC was not forwarded ***");
+ f_selfOrClientSyncAndVerdict(c_tbDone, e_success);
+ }
+ }
+
+ // Postamble
+ f_poNeighbour();
+
+ } // End of function f_GEONW_PON_GUC_CBF_BV_07_nodeC
+
+ } // end GEONW_PON_GUC_CBF_BV_07
+
+ group GEONW_PON_GUC_CBF_BV_20 {
+
+ /**
+ * @desc TP Function for TC_GEONW_PON_GUC_CBF_BV_20
+ */
+ function f_GEONW_PON_GUC_CBF_BV_20() runs on ItsMtc {
+
+ // Local variables
+ var ItsGeoNetworking v_nodeB;
+ var ItsGeoNetworking v_nodeC;
+ var float v_distance := int2float(f_getCbfMaxCommunicationRange() * 2);
+ var LongPosVector v_longPosVectorIut, v_longPosVectorNodeC;
+
+ // Test control
+ if (not PICS_GN_GUC_FWD) {
+ log("*** " & testcasename() & ": PICS_GN_GUC_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;
+ }
+
+ // Test component configuration
+ f_cf03Up();
+ // re-compute NodeC's position.
+ v_longPosVectorIut := f_getIutLongPosVector();
+ v_longPosVectorNodeC := f_computePositionUsingDistance(v_longPosVectorIut, v_distance, 180);
+ v_longPosVectorNodeC.gnAddr := f_getTsGnLocalAddress(c_compNodeC);
+
+ // Preamble
+
+ // Start components
+ v_nodeB := f_getComponent(c_compNodeB);
+ v_nodeC := f_getComponent(c_compNodeC);
+ v_nodeB.start(f_GEONW_PON_GUC_CBF_BV_20_nodeB(v_longPosVectorNodeC));
+ v_nodeC.start(f_GEONW_PON_GUC_CBF_BV_20_nodeC(v_longPosVectorNodeC));
+
+ // Synchronization
+ f_serverSync2ClientsAndStop({c_prDone, c_msgSent, c_tbDone});
+
+ // Cleanup
+ f_cf03Down();
+
+ } // End of function f_GEONW_PON_GUC_CBF_BV_20
+
+ /**
+ * @desc Behavior function for NodeB (TC_GEONW_PON_GUC_CBF_BV_20)
+ * @param p_longPosVectorNodeC Position vector of NodeC
+ */
+ function f_GEONW_PON_GUC_CBF_BV_20_nodeB(in LongPosVector p_longPosVectorNodeC) runs on ItsGeoNetworking {
+
+ // Local variables
+ timer t_toCbf := int2float(f_getCbfMinTime()) / 1000.0;
+ var LongPosVector v_longPosVectorNodeA := f_getPosition(c_compNodeA);
+
+ // Preamble
+ f_prNeighbour();
+ f_selfOrClientSyncAndVerdict(c_prDone, e_success);
+
+ // Test Body
+ log("*** " & testcasename() & ": INFO: Message sent ***");
+ f_selfOrClientSyncAndVerdict(c_msgSent, e_success);
+
+ tc_ac.start;
+ t_toCbf.start;
+ alt {
+ [] geoNetworkingPort.receive(
+ mw_geoNwInd(
+ mw_geoNwPdu(
+ mw_geoNwUnicastPacket(
+ mw_shortPosVectorPosition(f_longPosVector2ShortPosVector(v_longPosVectorNodeA)),
+ ?
+ )
+ )
+ )
+ ) {
+ tc_ac.stop;
+ if(t_toCbf.running) {
+ t_toCbf.stop;
+ log("*** " & testcasename() & ": FAIL: IUT re-broadcasted the packet too early ***");
+ f_selfOrClientSyncAndVerdict(c_tbDone, e_error);
+ }
+ else {
+ log("*** " & testcasename() & ": PASS: Forwarded GUC received ***");
+ f_selfOrClientSyncAndVerdict(c_tbDone, e_success);
+ }
+ }
+ [] t_toCbf.timeout {
+ log("*** " & testcasename() & ": INFO: Ready for receiving re-broadcasting ***");
+ repeat;
+ }
+
+ [] tc_ac.timeout {
+ log("*** " & testcasename() & ": FAIL: GUC was not forwarded ***");
+ f_selfOrClientSyncAndVerdict(c_tbDone, e_error);
+ }
+ }
+
+ // Postamble
+ f_poNeighbour();
+
+ } // End of function f_GEONW_PON_GUC_CBF_BV_20_nodeB
+
+ /**
+ * @desc Behavior function for NodeC (TC_GEONW_PON_GUC_CBF_BV_20)
+ * @param p_longPosVectorNodeC Position vector of NodeC
+ */
+ function f_GEONW_PON_GUC_CBF_BV_20_nodeC(LongPosVector p_longPosVectorNodeC) runs on ItsGeoNetworking {
+
+ // Local variables
+ var LongPosVector v_longPosVectorNodeA := f_getPosition(c_compNodeA);
+
+ // Preamble
+ f_prNeighbour();
+ f_selfOrClientSyncAndVerdict(c_prDone, e_success);
+
+ // Test Body
+ f_sendGeoNetMessage(
+ m_geoNwReq_withLinkLayerDestination(
+ m_geoNwPdu(
+ m_geoNwUnicastPacket(
+ p_longPosVectorNodeC,
+ f_longPosVector2ShortPosVector(v_longPosVectorNodeA),
+ vc_localSeqNumber
+ ),
+ -,
+ c_defaultHopLimit
+ ),
+ -,
+ f_getIutMacAddress()
+ )
+ );
+ log("*** " & testcasename() & ": INFO: Message sent ***");
+ f_selfOrClientSyncAndVerdict(c_msgSent, e_success);
+
+ tc_ac.start;
+ alt {
+ [] geoNetworkingPort.receive(
+ mw_geoNwInd(
+ mw_geoNwPdu(
+ mw_geoNwUnicastPacket(
+ mw_shortPosVectorPosition(f_longPosVector2ShortPosVector(v_longPosVectorNodeA)),
+ ?
+ )
+ )
+ )
+ ) {
+ tc_ac.stop;
+ log("*** " & testcasename() & ": PASS: Forwarded GUC received ***");
+ f_selfOrClientSyncAndVerdict(c_tbDone, e_success);
+ }
+ [] tc_ac.timeout {
+ log("*** " & testcasename() & ": FAIL: GUC was not forwarded ***");
+ f_selfOrClientSyncAndVerdict(c_tbDone, e_error);
+ }
+ }
+
+ // Postamble
+ f_poNeighbour();
+
+ } // End of function f_GEONW_PON_GUC_CBF_BV_20_nodeC
+
+ } // end GEONW_PON_GUC_CBF_BV_20
+
+ group GEONW_PON_GUC_CBF_BV_21 {
+
+ /**
+ * @desc TP Function for TC_GEONW_PON_GUC_CBF_BV_21
+ */
+ function f_GEONW_PON_GUC_CBF_BV_21() runs on ItsMtc {
+
+ // Local variables
+ var ItsGeoNetworking v_nodeB;
+ var ItsGeoNetworking v_nodeC;
+ var ItsGeoNetworking v_nodeD;
+ var float v_distance := int2float(f_getCbfMaxCommunicationRange() - 10);
+ var LongPosVector v_longPosVectorIut, v_longPosVectorNodeA;
+
+ // Test control
+ if (not PICS_GN_GUC_FWD) {
+ log("*** " & testcasename() & ": PICS_GN_GUC_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;
+ }
+
+ // Test component configuration
+ f_cf04Up();
+ // re-compute NodeA's position.
+ v_longPosVectorIut := f_getIutLongPosVector();
+ v_longPosVectorNodeA := f_computePositionUsingDistance(v_longPosVectorIut, v_distance, 0);
+ v_longPosVectorNodeA.gnAddr := f_getTsGnLocalAddress(c_compNodeA);
+
+ // 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_GUC_CBF_BV_21_nodeB(v_longPosVectorNodeA));
+ v_nodeC.start(f_GEONW_PON_GUC_CBF_BV_21_nodeC(v_longPosVectorNodeA));
+ v_nodeD.start(f_GEONW_PON_GUC_CBF_BV_21_nodeD(v_longPosVectorNodeA));
+
+ // Synchronization
+ f_serverSync2ClientsAndStop({c_prDone, c_tbDone});
+
+ // Cleanup
+ f_cf04Down();
+
+ } // End of function f_GEONW_PON_GUC_CBF_BV_21
+
+ /**
+ * @desc Behavior function for NodeB (TC_GEONW_PON_GUC_CBF_BV_21)
+ * @param p_longPosVectorNodeA Position vector of NodeA
+ */
+ function f_GEONW_PON_GUC_CBF_BV_21_nodeB(in LongPosVector p_longPosVectorNodeA) runs on ItsGeoNetworking {
+
+ // Local variables
+
+ // Preamble
+ f_prNeighbour();
+ f_selfOrClientSyncAndVerdict(c_prDone, e_success);
+
+ // Test Body
+ tc_ac.start;
+ alt {
+ [] geoNetworkingPort.receive(
+ mw_geoNwInd(
+ mw_geoNwPdu(
+ mw_geoNwUnicastPacket(
+ mw_shortPosVectorPosition(f_longPosVector2ShortPosVector(p_longPosVectorNodeA)),
+ ?
+ )
+ )
+ )
+ ) {
+ tc_ac.stop;
+ log("*** " & testcasename() & ": PASS: Re-broadcasted GUC received ***");
+ f_selfOrClientSyncAndVerdict(c_tbDone, e_success);
+ }
+
+ [] tc_ac.timeout {
+ log("*** " & testcasename() & ": FAIL: GUC was not forwarded ***");
+ f_selfOrClientSyncAndVerdict(c_tbDone, e_error);
+ }
+ }
+
+ // Postamble
+ f_poNeighbour();
+
+ } // End of function f_GEONW_PON_GUC_CBF_BV_21_nodeB
+
+ /**
+ * @desc Behavior function for NodeC (TC_GEONW_PON_GUC_CBF_BV_21)
+ * @param p_longPosVectorNodeA Position vector of NodeA
+ */
+ function f_GEONW_PON_GUC_CBF_BV_21_nodeC(in LongPosVector p_longPosVectorNodeA) runs on ItsGeoNetworking {
+
+ // Local variables
+
+ // Preamble
+ f_prNeighbour();
+ f_selfOrClientSyncAndVerdict(c_prDone, e_success);
+
+ // Test Body
+ tc_ac.start;
+ alt {
+ [] geoNetworkingPort.receive(
+ mw_geoNwInd(
+ mw_geoNwPdu(
+ mw_geoNwUnicastPacket(
+ mw_shortPosVectorPosition(f_longPosVector2ShortPosVector(p_longPosVectorNodeA)),
+ ?
+ )
+ )
+ )
+ ) {
+ tc_ac.stop;
+ log("*** " & testcasename() & ": PASS: Re-broadcasted GUC received ***");
+ f_selfOrClientSyncAndVerdict(c_tbDone, e_success);
+ }
+ [] tc_ac.timeout {
+ log("*** " & testcasename() & ": FAIL: GUC was not forwarded ***");
+ f_selfOrClientSyncAndVerdict(c_tbDone, e_error);
+ }
+ }
+
+ // Postamble
+ f_poNeighbour();
+
+ } // End of function f_GEONW_PON_GUC_CBF_BV_21_nodeC
+
+ /**
+ * @desc Behavior function for NodeD (TC_GEONW_PON_GUC_CBF_BV_21)
+ * @param p_longPosVectorNodeA Position vector of NodeA
+ */
+ function f_GEONW_PON_GUC_CBF_BV_21_nodeD(in LongPosVector p_longPosVectorNodeA) runs on ItsGeoNetworking {
+
+ // Local variables
+ var LongPosVector v_longPosVectorNodeC := f_getPosition(c_compNodeC);
+ timer t_toCbf := int2float(f_getCbfMaxTime()) * 0.95 / 1000.0;
+
+ // Preamble
+ f_prNonNeighbour();
+ f_selfOrClientSyncAndVerdict(c_prDone, e_success);
+
+ // Test Body
+ f_sendGeoNetMessage(
+ m_geoNwReq_withLinkLayerDestination(
+ m_geoNwPdu(
+ m_geoNwUnicastPacket(
+ f_getPosition(c_compNodeC),
+ f_longPosVector2ShortPosVector(p_longPosVectorNodeA),
+ vc_localSeqNumber
+ ),
+ -,
+ c_defaultHopLimit
+ ),
+ -,
+ f_getIutMacAddress()
+ )
+ );
+
+ t_toCbf.start;
+ tc_ac.start;
+ alt {
+ [] geoNetworkingPort.receive(
+ mw_geoNwInd(
+ mw_geoNwPdu(
+ mw_geoNwUnicastPacket(
+ mw_shortPosVectorPosition(f_longPosVector2ShortPosVector(p_longPosVectorNodeA)),
+ ?
+ )
+ )
+ )
+ ) {
+ tc_ac.stop;
+
+ if(t_toCbf.running) {
+ t_toCbf.stop;
+ log("*** " & testcasename() & ": FAIL: GUC retransmitted before CBF timer expiration ***");
+ f_selfOrClientSyncAndVerdict(c_tbDone, e_error);
+ }
+ else {
+ log("*** " & testcasename() & ": PASS: GUC message received ***");
+ f_selfOrClientSyncAndVerdict(c_tbDone, e_success);
+ }
+ }
+ [] t_toCbf.timeout {
+ log("*** " & testcasename() & ": INFO: GUC timer elapsed ***");
+ repeat;
+ }
+ [] tc_ac.timeout {
+ log("*** " & testcasename() & ": FAIL: GUC message not received ***");
+ f_selfOrClientSyncAndVerdict(c_tbDone, e_error);
+ }
+ }
+
+ // Postamble
+ f_poDefault();
+
+ } // End of function f_GEONW_PON_GUC_CBF_BV_21_nodeD
+
+ } // end GEONW_PON_GUC_CBF_BV_21
+
+ group GEONW_PON_GUC_CBF_BV_22 {
+
+ /**
+ * @desc TP Function for TC_GEONW_PON_GUC_CBF_BV_22
+ */
+ function f_GEONW_PON_GUC_CBF_BV_22() runs on ItsMtc {
+
+ // Local variables
+ var ItsGeoNetworking v_nodeB;
+ var ItsGeoNetworking v_nodeC;
+ var ItsGeoNetworking v_nodeD;
+ var float v_distance := int2float(f_getCbfMaxCommunicationRange() - 10);
+ var LongPosVector v_longPosVectorIut, v_longPosVectorNodeA;
+
+ // Test control
+ if (not PICS_GN_GUC_FWD) {
+ log("*** " & testcasename() & ": PICS_GN_GUC_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;
+ }
+
+ // Test component configuration
+ f_cf04Up();
+ // re-compute NodeA's position.
+ v_longPosVectorIut := f_getIutLongPosVector();
+ v_longPosVectorNodeA := f_computePositionUsingDistance(v_longPosVectorIut, v_distance, 0);
+ v_longPosVectorNodeA.gnAddr := f_getTsGnLocalAddress(c_compNodeA);
+
+ // 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_GUC_CBF_BV_22_nodeB(v_longPosVectorNodeA));
+ v_nodeC.start(f_GEONW_PON_GUC_CBF_BV_22_nodeC(v_longPosVectorNodeA));
+ v_nodeD.start(f_GEONW_PON_GUC_CBF_BV_22_nodeD(v_longPosVectorNodeA));
+
+ // Synchronization
+ f_serverSync2ClientsAndStop({c_prDone, c_tbDone});
+
+ // Cleanup
+ f_cf04Down();
+
+ } // End of function f_GEONW_PON_GUC_CBF_BV_22
+
+ /**
+ * @desc Behavior function for NodeB (TC_GEONW_PON_GUC_CBF_BV_22)
+ * @param p_longPosVectorNodeA Position vector of NodeA
+ */
+ function f_GEONW_PON_GUC_CBF_BV_22_nodeB(in LongPosVector p_longPosVectorNodeA) runs on ItsGeoNetworking {
+
+ // Local variables
+
+ // Preamble
+ f_prNeighbour();
+ f_selfOrClientSyncAndVerdict(c_prDone, e_success);
+
+ // Test Body
+ tc_ac.start;
+ alt {
+ [] geoNetworkingPort.receive(
+ mw_geoNwInd(
+ mw_geoNwPdu(
+ mw_geoNwUnicastPacket(
+ mw_shortPosVectorPosition(f_longPosVector2ShortPosVector(p_longPosVectorNodeA)),
+ ?
+ )
+ )
+ )
+ ) {
+ tc_ac.stop;
+ log("*** " & testcasename() & ": PASS: Re-broadcasted GUC received ***");
+ f_selfOrClientSyncAndVerdict(c_tbDone, e_success);
+ }
+
+ [] tc_ac.timeout {
+ log("*** " & testcasename() & ": FAIL: GUC was not forwarded ***");
+ f_selfOrClientSyncAndVerdict(c_tbDone, e_error);
+ }
+ }
+
+ // Postamble
+ f_poNeighbour();
+
+ } // End of function f_GEONW_PON_GUC_CBF_BV_22_nodeB
+
+ /**
+ * @desc Behavior function for NodeC (TC_GEONW_PON_GUC_CBF_BV_22)
+ * @param p_longPosVectorNodeA Position vector of NodeA
+ */
+ function f_GEONW_PON_GUC_CBF_BV_22_nodeC(in LongPosVector p_longPosVectorNodeA) runs on ItsGeoNetworking {
+
+ // Local variables
+
+ // Preamble
+ f_prNeighbour();
+ f_selfOrClientSyncAndVerdict(c_prDone, e_success);
+
+ // Test Body
+ tc_ac.start;
+ alt {
+ [] geoNetworkingPort.receive(
+ mw_geoNwInd(
+ mw_geoNwPdu(
+ mw_geoNwUnicastPacket(
+ mw_shortPosVectorPosition(f_longPosVector2ShortPosVector(p_longPosVectorNodeA)),
+ ?
+ )
+ )
+ )
+ ) {
+ tc_ac.stop;
+ log("*** " & testcasename() & ": PASS: Re-broadcasted GUC received ***");
+ f_selfOrClientSyncAndVerdict(c_tbDone, e_success);
+ }
+ [] tc_ac.timeout {
+ log("*** " & testcasename() & ": FAIL: GUC was not forwarded ***");
+ f_selfOrClientSyncAndVerdict(c_tbDone, e_error);
+ }
+ }
+
+ // Postamble
+ f_poNeighbour();
+
+ } // End of function f_GEONW_PON_GUC_CBF_BV_22_nodeC
+
+ /**
+ * @desc Behavior function for NodeD (TC_GEONW_PON_GUC_CBF_BV_22)
+ * @param p_longPosVectorNodeA Position vector of NodeA
+ */
+ function f_GEONW_PON_GUC_CBF_BV_22_nodeD(in LongPosVector p_longPosVectorNodeA) runs on ItsGeoNetworking {
+
+ // Local variables
+ var LongPosVector v_longPosVectorNodeD := f_getPosition(c_compNodeD);
+ timer t_toCbf := int2float(f_getCbfMaxTime()) * 0.95 / 1000.0;
+
+ // Preamble
+ v_longPosVectorNodeD.pai := int2bit(0,1);
+ f_changePositon(c_compNodeD, v_longPosVectorNodeD);
+ f_prNeighbour();
+ f_selfOrClientSyncAndVerdict(c_prDone, e_success);
+
+ // Test Body
+ f_sendGeoNetMessage(
+ m_geoNwReq_withLinkLayerDestination(
+ m_geoNwPdu(
+ m_geoNwUnicastPacket(
+ f_getPosition(c_compNodeC),
+ f_longPosVector2ShortPosVector(p_longPosVectorNodeA),
+ vc_localSeqNumber
+ ),
+ -,
+ c_defaultHopLimit
+ ),
+ -,
+ f_getIutMacAddress()
+ )
+ );
+
+ t_toCbf.start;
+ tc_ac.start;
+ alt {
+ [] geoNetworkingPort.receive(
+ mw_geoNwInd(
+ mw_geoNwPdu(
+ mw_geoNwUnicastPacket(
+ mw_shortPosVectorPosition(f_longPosVector2ShortPosVector(p_longPosVectorNodeA)),
+ ?
+ )
+ )
+ )
+ ) {
+ tc_ac.stop;
+
+ if(t_toCbf.running) {
+ t_toCbf.stop;
+ log("*** " & testcasename() & ": FAIL: GUC retransmitted before CBF timer expiration ***");
+ f_selfOrClientSyncAndVerdict(c_tbDone, e_error);
+ }
+ else {
+ log("*** " & testcasename() & ": PASS: GUC message received ***");
+ f_selfOrClientSyncAndVerdict(c_tbDone, e_success);
+ }
+ }
+ [] t_toCbf.timeout {
+ log("*** " & testcasename() & ": INFO: GUC timer elapsed ***");
+ repeat;
+ }
+ [] tc_ac.timeout {
+ log("*** " & testcasename() & ": FAIL: GUC message not received ***");
+ f_selfOrClientSyncAndVerdict(c_tbDone, e_error);
+ }
+ }
+
+ // Postamble
+ f_poDefault();
+
+ } // End of function f_GEONW_PON_GUC_CBF_BV_22_nodeD
+
+ } // end GEONW_PON_GUC_CBF_BV_22
+
+ } // end gucContentionBasedForwarding
+
+ } // end geoGeoUnicast
+
+ // 6.2.2.9
+ group geoGeoBroadcast {
+
+ group gbcNonAreaForwarding {
+
+ group gbcNonAreaAllForwardingAlgorithm {
+
+ group GEONW_PON_GBC_NONAREA_ALL_BV_03 {
+
+ /**
+ * @desc TP Function for TC_GEONW_PON_GBC_NONAREA_ALL_BV_03
+ */
+ function f_GEONW_PON_GBC_NONAREA_ALL_BV_03() runs on ItsMtc {
+
+ // Local variables
+ var ItsGeoNetworking v_nodeB;
+ var ItsGeoNetworking v_nodeC;
+
+ // 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
+
+ // Start components
+ v_nodeB := f_getComponent(c_compNodeB);
+ v_nodeC := f_getComponent(c_compNodeC);
+ v_nodeB.start(f_GEONW_PON_GBC_NONAREA_ALL_BV_03_nodeB());
+ v_nodeC.start(f_GEONW_PON_GBC_NONAREA_ALL_BV_03_nodeC());
+
+ // Synchronization
+ f_serverSync2ClientsAndStop({c_prDone, c_tbDone});
+
+ // Cleanup
+ f_cf03Down();
+
+ } // End of function f_GEONW_PON_GBC_NONAREA_ALL_BV_03
+
+ /**
+ * @desc Behavior function for NodeB (TC_GEONW_PON_GBC_NONAREA_ALL_BV_03)
+ */
+ function f_GEONW_PON_GBC_NONAREA_ALL_BV_03_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 {
+ [] a_receiveGeoBroadcastWithAreaWithHopLimit(
+ mw_longPosVectorPosition(v_longPosVectorNodeC),
+ ?,
+ f_getGeoBroadcastArea(c_area2),
+ c_defaultHopLimit - 1,
+ c_defaultHopLimit) {
+ tc_ac.stop;
+ log("*** " & testcasename() & ": PASS: GBC message correctly retransmitted ***");
+ f_selfOrClientSyncAndVerdict(c_tbDone, e_success);
+ }
+ [] a_receiveGeoBroadcastWithAreaWithHopLimit(
+ mw_longPosVectorPosition(v_longPosVectorNodeC),
+ ?,
+ f_getGeoBroadcastArea(c_area2),
+ ?,
+ ?) {
+ tc_ac.stop;
+ log("*** " & testcasename() & ": FAIL: GBC message fields not updated ***");
+ f_selfOrClientSyncAndVerdict(c_tbDone, e_error);
+ }
+ [] tc_ac.timeout {
+ log("*** " & testcasename() & ": INCONC: GBC message not retransmitted ***");
+ f_selfOrClientSyncAndVerdict(c_tbDone, e_error);
+ }
+ }
+
+ // Postamble
+ f_poNeighbour();
+
+ } // End of function f_GEONW_PON_GBC_NONAREA_ALL_BV_03_nodeB
+
+ /**
+ * @desc Behavior function for NodeC (TC_GEONW_PON_GBC_NONAREA_ALL_BV_03)
+ */
+ function f_GEONW_PON_GBC_NONAREA_ALL_BV_03_nodeC() runs on ItsGeoNetworking {
+
+ // Local variables
+ var LongPosVector v_longPosVectorNodeC := f_getPosition(c_compNodeC);
+ var GeoNetworkingInd v_msgInd;
+
+ // Preamble
+ f_prNeighbour();
+ f_selfOrClientSyncAndVerdict(c_prDone, e_success);
+
+ // Test Body
+ f_sendGeoNetMessage(
+ m_geoNwReq_linkLayerBroadcast(
+ m_geoNwPdu(
+ m_geoNwBroadcastPacket(
+ v_longPosVectorNodeC,
+ vc_localSeqNumber,
+ f_getGeoBroadcastArea(c_area2),
+ c_defaultHopLimit
+ ),
+ -,
+ c_defaultHopLimit
+ )
+ )
+ );
+ f_selfOrClientSyncAndVerdict(c_tbDone, e_success);
+
+ // Postamble
+ f_poNeighbour();
+
+ } // End of function f_GEONW_PON_GBC_NONAREA_ALL_BV_03_nodeC
+
+ } // end GEONW_PON_GBC_NONAREA_ALL_BV_03
+
+ group GEONW_PON_GBC_NONAREA_ALL_BV_04 {
+
+ /**
+ * @desc TP Function for TC_GEONW_PON_GBC_NONAREA_ALL_BV_04
+ */
+ function f_GEONW_PON_GBC_NONAREA_ALL_BV_04() runs on ItsMtc {
+
+ // Local variables
+ var ItsGeoNetworking v_nodeB;
+ var ItsGeoNetworking v_nodeC;
+
+ // 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
+
+ // Start components
+ v_nodeB := f_getComponent(c_compNodeB);
+ v_nodeC := f_getComponent(c_compNodeC);
+ v_nodeB.start(f_GEONW_PON_GBC_NONAREA_ALL_BV_04_nodeB());
+ v_nodeC.start(f_GEONW_PON_GBC_NONAREA_ALL_BV_04_nodeC());
+
+ // Synchronization
+ f_serverSync2ClientsAndStop({c_prDone, c_tbDone});
+
+ // Cleanup
+ f_cf03Down();
+
+ } // End of function f_GEONW_PON_GBC_NONAREA_ALL_BV_04
+
+ /**
+ * @desc Behavior function for NodeB (TC_GEONW_PON_GBC_NONAREA_ALL_BV_04)
+ */
+ function f_GEONW_PON_GBC_NONAREA_ALL_BV_04_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_noac.start;
+ alt {
+ [] a_receiveGeoBroadcastWithArea(
+ mw_longPosVectorPosition(v_longPosVectorNodeC),
+ ?,
+ f_getGeoBroadcastArea(c_area2)) {
+ tc_noac.stop;
+ log("*** " & testcasename() & ": FAIL: GBC message retransmitted ***");
+ f_selfOrClientSyncAndVerdict(c_tbDone, e_error);
+ }
+ [] tc_noac.timeout {
+ log("*** " & testcasename() & ": PASS: GBC message not retransmitted ***");
+ f_selfOrClientSyncAndVerdict(c_tbDone, e_success);
+ }
+ }
+
+ // Postamble
+ f_poNeighbour();
+
+ } // End of function f_GEONW_PON_GBC_NONAREA_ALL_BV_04_nodeB
+
+ /**
+ * @desc Behavior function for NodeC (TC_GEONW_PON_GBC_NONAREA_ALL_BV_04)
+ */
+ function f_GEONW_PON_GBC_NONAREA_ALL_BV_04_nodeC() runs on ItsGeoNetworking {
+
+ // Local variables
+ var LongPosVector v_longPosVectorNodeC := f_getPosition(c_compNodeC);
+
+ // Preamble
+ f_prNeighbour();
+ f_selfOrClientSyncAndVerdict(c_prDone, e_success);
+
+ // Test Body
+ f_sendGeoNetMessage(
+ m_geoNwReq_linkLayerBroadcast(
+ m_geoNwPdu(
+ m_geoNwBroadcastPacket(
+ v_longPosVectorNodeC,
+ vc_localSeqNumber,
+ f_getGeoBroadcastArea(c_area2)
+ ),
+ -,
+ c_hopLimit1
+ )
+ )
+ );
+
+ tc_noac.start;
+ alt {
+ [] a_receiveGeoBroadcastWithArea(
+ mw_longPosVectorPosition(v_longPosVectorNodeC),
+ ?,
+ f_getGeoBroadcastArea(c_area2)) {
+ tc_noac.stop;
+ log("*** " & testcasename() & ": FAIL: GBC message retransmitted ***");
+ f_selfOrClientSyncAndVerdict(c_tbDone, e_error);
+ }
+ [] tc_noac.timeout {
+ log("*** " & testcasename() & ": PASS: GBC message not retransmitted ***");
+ f_selfOrClientSyncAndVerdict(c_tbDone, e_success);
+ }
+ }
+
+ // Postamble
+ f_poNeighbour();
+
+ } // End of function f_GEONW_PON_GBC_NONAREA_ALL_BV_04_nodeC
+
+ } // end GEONW_PON_GBC_NONAREA_ALL_BV_04
+
+ /**
+ * @desc TP Function for TC_GEONW_PON_GBC_NONAREA_ALL_BV_06
+ */
+ function f_GEONW_PON_GBC_NONAREA_ALL_BV_06() runs on ItsGeoNetworking {
+
+ // Local variables
+ var LongPosVector v_longPosVectorNodeB;
+ var template (value) GeoNetworkingPdu v_gnPacket;
+ var integer i;
+
+ // 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_cf01Up();
+ v_longPosVectorNodeB := f_getPosition(c_compNodeB);
+
+ // Test adapter configuration
+
+ // Preamble
+ f_prNeighbour();
+ f_selfOrClientSyncAndVerdict(c_prDone, e_success);
+
+ // Test Body
+ v_gnPacket := m_geoNwPdu(m_geoNwBroadcastPacket(
+ v_longPosVectorNodeB,
+ vc_localSeqNumber,
+ f_getGeoBroadcastArea(c_area2)
+ )
+ );
+ 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();
+ f_cf01Down();
+
+ } // End of function f_GEONW_PON_GBC_NONAREA_ALL_BV_06
+
+ group GEONW_PON_GBC_NONAREA_ALL_BO_09 {
+
+ /**
+ * @desc TP Function for TC_GEONW_PON_GBC_NONAREA_ALL_BO_09
+ */
+ function f_GEONW_PON_GBC_NONAREA_ALL_BO_09() runs on ItsMtc {
+
+ // Local variables
+ var ItsGeoNetworking v_nodeB;
+ var ItsGeoNetworking v_nodeC;
+ var ItsGeoNetworking v_nodeD;
+ var UInt16 v_distanceTooBig;
+
+ // 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_cf04Up();
+ v_distanceTooBig := float2int(1.1 * f_radiusFromCircularArea(f_getGnMaxAreaSize()*c_squareKm));
+
+ // 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_GBC_NONAREA_ALL_BO_09_nodeB(v_distanceTooBig));
+ v_nodeC.start(f_GEONW_PON_GBC_NONAREA_ALL_BO_09_nodeC(v_distanceTooBig));
+ v_nodeD.start(f_GEONW_PON_GBC_NONAREA_ALL_BO_09_nodeD(v_distanceTooBig));
+
+ // Synchronization
+ f_serverSync3ClientsAndStop({c_prDone, c_tbDone});
+
+ // Cleanup
+ f_cf04Down();
+
+ } // End of function f_GEONW_PON_GBC_NONAREA_ALL_BO_09
+
+ /**
+ * @desc Behavior function for NodeB (TC_GEONW_PON_GBC_BO_19)
+ */
+ function f_GEONW_PON_GBC_NONAREA_ALL_BO_09_nodeB(in UInt16 p_distanceTooBig) runs on ItsGeoNetworking {
+
+ // Local variables
+ var LongPosVector v_longPosVectorNodeC := f_getPosition(c_compNodeC);
+ var GeoArea v_areaTooBig;
+
+ // Preamble
+ f_prNeighbour();
+ v_areaTooBig := f_computeCircularArea(
+ f_getPosition(c_compNodeB),
+ p_distanceTooBig
+ );
+ f_selfOrClientSyncAndVerdict(c_prDone, e_success);
+
+ // Test Body
+ tc_noac.start;
+ alt {
+ [] geoNetworkingPort.receive(mw_geoNwInd(mw_geoNwPdu(mw_geoNwBroadcastPacketWithArea(
+ mw_longPosVectorPosition(v_longPosVectorNodeC),
+ ?,
+ f_geoArea2GeoBroadcastArea(v_areaTooBig)
+ )))) {
+ tc_noac.stop;
+ log("*** " & testcasename() & ": FAIL: GBC message retransmitted ***");
+ f_selfOrClientSyncAndVerdict(c_tbDone, e_error);
+ }
+ [] tc_noac.timeout {
+ log("*** " & testcasename() & ": PASS: GBC message not retransmitted ***");
+ f_selfOrClientSyncAndVerdict(c_tbDone, e_success);
+ }
+ }
+
+ // Postamble
+ f_poNeighbour();
+
+ } // End of function f_GEONW_PON_GBC_NONAREA_ALL_BO_09_nodeB
+
+ /**
+ * @desc Behavior function for NodeC (TC_GEONW_PON_GBC_NONAREA_ALL_BO_09)
+ */
+ function f_GEONW_PON_GBC_NONAREA_ALL_BO_09_nodeC(in UInt16 p_distanceTooBig) runs on ItsGeoNetworking {
+
+ // Local variables
+ var LongPosVector v_longPosVectorNodeC := f_getPosition(c_compNodeC);
+ var GeoArea v_areaTooBig;
+
+ // Preamble
+ f_prNeighbour();
+ v_areaTooBig := f_computeCircularArea(
+ f_getPosition(c_compNodeB),
+ p_distanceTooBig
+ );
+ f_sendGeoNetMessage(
+ m_geoNwReq_linkLayerBroadcast(
+ m_geoNwPdu(
+ m_geoNwBroadcastPacket(
+ v_longPosVectorNodeC,
+ vc_localSeqNumber,
+ f_geoArea2GeoBroadcastArea(v_areaTooBig)
+ )
+ )
+ )
+ );
+ f_selfOrClientSyncAndVerdict(c_prDone, e_success);
+
+ // Test Body
+ f_selfOrClientSyncAndVerdict(c_tbDone, e_success);
+
+ // Postamble
+ f_poNeighbour();
+
+ } // End of function f_GEONW_PON_GBC_NONAREA_ALL_BO_09_nodeC
+
+ /**
+ * @desc Behavior function for NodeD (TC_GEONW_PON_GBC_NONAREA_ALL_BO_09)
+ */
+ function f_GEONW_PON_GBC_NONAREA_ALL_BO_09_nodeD(in UInt16 p_distanceTooBig) runs on ItsGeoNetworking {
+
+ // Local variables
+ var LongPosVector v_longPosVectorNodeC := f_getPosition(c_compNodeC);
+ var GeoArea v_areaTooBig;
+
+ // Preamble
+ f_prNeighbour();
+ v_areaTooBig := f_computeCircularArea(
+ f_getPosition(c_compNodeB),
+ p_distanceTooBig
+ );
+ f_selfOrClientSyncAndVerdict(c_prDone, e_success);
+
+ // Test Body
+ tc_noac.start;
+ alt {
+ [] geoNetworkingPort.receive(mw_geoNwInd(mw_geoNwPdu(mw_geoNwBroadcastPacketWithArea(
+ mw_longPosVectorPosition(v_longPosVectorNodeC),
+ ?,
+ f_geoArea2GeoBroadcastArea(v_areaTooBig)
+ )))) {
+ tc_noac.stop;
+ log("*** " & testcasename() & ": FAIL: GBC message forwarded ***");
+ f_selfOrClientSyncAndVerdict(c_tbDone, e_error);
+ }
+ [] tc_noac.timeout {
+ log("*** " & testcasename() & ": PASS: GBC message not forwarded ***");
+ f_selfOrClientSyncAndVerdict(c_tbDone, e_success);
+ }
+ }
+
+ // Postamble
+ f_poNeighbour();
+
+ } // End of function f_GEONW_PON_GBC_NONAREA_ALL_BO_09_nodeD
+
+ } // end GEONW_PON_GBC_NONAREA_ALL_BO_09
+
+ group GEONW_PON_GBC_NONAREA_ALL_BO_10 {
+
+ /**
+ * @desc TP Function for TC_GEONW_PON_GBC_NONAREA_ALL_BO_10
+ */
+ function f_GEONW_PON_GBC_NONAREA_ALL_BO_10() runs on ItsMtc {
+
+ // Local variables
+ var ItsGeoNetworking v_nodeB;
+ var ItsGeoNetworking v_nodeC;
+ 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_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_GBC_NONAREA_ALL_BO_10_nodeB());
+ v_nodeC.start(f_GEONW_PON_GBC_NONAREA_ALL_BO_10_nodeC());
+ v_nodeD.start(f_GEONW_PON_GBC_NONAREA_ALL_BO_10_nodeD());
+
+ // Synchronization
+ f_serverSync3ClientsAndStop({c_prDone, c_tbDone});
+
+ // Cleanup
+ f_cf04Down();
+
+ } // End of function f_GEONW_PON_GBC_NONAREA_ALL_BO_10
+
+ /**
+ * @desc Behavior function for NodeB (TC_GEONW_PON_GBC_NONAREA_ALL_BO_10)
+ */
+ function f_GEONW_PON_GBC_NONAREA_ALL_BO_10_nodeB() runs on ItsGeoNetworking {
+
+ // Local variables
+
+ // Preamble
+ f_prNeighbour();
+ f_selfOrClientSyncAndVerdict(c_prDone, e_success);
+
+ // Test Body
+ tc_noac.start;
+ alt {
+ [] geoNetworkingPort.receive(mw_geoNwInd(mw_geoNwPdu(?))) {
+ tc_noac.stop;
+ log("*** " & testcasename() & ": FAIL: GBC received and not discarded ***");
+ f_selfOrClientSyncAndVerdict(c_tbDone, e_error);
+ }
+ [] tc_noac.timeout {
+ log("*** " & testcasename() & ": PASS: GBC message discarded ***");
+ f_selfOrClientSyncAndVerdict(c_tbDone, e_success);
+ }
+ }
+
+ // Postamble
+ f_poNeighbour();
+
+ } // End of function f_GEONW_PON_GBC_NONAREA_ALL_BO_10_nodeB
+
+ /**
+ * @desc Behavior function for NodeC (TC_GEONW_PON_GBC_NONAREA_ALL_BO_10)
+ */
+ function f_GEONW_PON_GBC_NONAREA_ALL_BO_10_nodeC() runs on ItsGeoNetworking {
+
+ // Local variables
+
+ // Preamble
+ f_prNeighbour();
+ f_selfOrClientSyncAndVerdict(c_prDone, e_success);
+
+ // Test Body
+ tc_noac.start;
+ alt {
+ [] geoNetworkingPort.receive(mw_geoNwInd(mw_geoNwPdu(?))) {
+ tc_noac.stop;
+ log("*** " & testcasename() & ": FAIL: GBC received and not discarded ***");
+ f_selfOrClientSyncAndVerdict(c_tbDone, e_error);
+ }
+ [] tc_noac.timeout {
+ log("*** " & testcasename() & ": PASS: GBC message discarded ***");
+ f_selfOrClientSyncAndVerdict(c_tbDone, e_success);
+ }
+ }
+
+ // Postamble
+ f_poNeighbour();
+
+ } // End of function f_GEONW_PON_GBC_NONAREA_ALL_BO_10_nodeC
+
+ /**
+ * @desc Behavior function for NodeD (TC_GEONW_PON_GBC_NONAREA_ALL_BO_10)
+ */
+ function f_GEONW_PON_GBC_NONAREA_ALL_BO_10_nodeD() runs on ItsGeoNetworking {
+
+ // Local variables
+ var LongPosVector v_longPosVectorNodeD := f_getPosition(c_compNodeD);
+
+ // Preamble
+ f_prNeighbour();
+ f_selfOrClientSyncAndVerdict(c_prDone, e_success);
+
+ // Test Body
+ f_sendGeoNetMessage(
+ m_geoNwReq_linkLayerBroadcast(
+ m_geoNwPdu(
+ m_geoNwBroadcastPacket(
+ v_longPosVectorNodeD,
+ vc_localSeqNumber,
+ f_getGeoBroadcastArea(c_area2)
+ )
+ )
+ )
+ );
+
+ tc_noac.start;
+ alt {
+ [] geoNetworkingPort.receive(mw_geoNwInd(mw_geoNwPdu(?))) {
+ tc_noac.stop;
+ log("*** " & testcasename() & ": FAIL: GBC received and not discarded ***");
+ f_selfOrClientSyncAndVerdict(c_tbDone, e_error);
+ }
+ [] tc_noac.timeout {
+ log("*** " & testcasename() & ": PASS: GBC message discarded ***");
+ f_selfOrClientSyncAndVerdict(c_tbDone, e_success);
+ }
+ }
+
+ // Postamble
+ f_poNeighbour();
+
+ } // End of function f_GEONW_PON_GBC_NONAREA_ALL_BO_10_nodeD
+
+ } // end GEONW_PON_GBC_NONAREA_ALL_BO_10
+
+ } // end gbcNonAreaAllForwardingAlgorithm
+
+ group gbcNonAreaGreedyForwarding {
+
+ group GEONW_PON_GBC_NONAREA_GRD_BV_01 {
+
+ /**
+ * @desc TP Function for TC_GEONW_PON_GBC_NONAREA_GRD_BV_01
+ */
+ function f_GEONW_PON_GBC_NONAREA_GRD_BV_01() runs on ItsMtc {
+
+ // Local variables
+ var ItsGeoNetworking v_nodeB;
+ var ItsGeoNetworking v_nodeD;
+
+ // Test control
+ if (not PICS_GN_GBC_SRC) {
+ log("*** " & testcasename() & ": PICS_GN_GBC_SRC required for executing the TC ***");
+ setverdict(inconc);
+ stop;
+ }
+ if ((f_getNonAreaForwardingAlgorithm() != e_greedy) and (f_getNonAreaForwardingAlgorithm() != e_unspecified)) {
+ log("*** " & testcasename() & ": PICS_GN_NON_AREA_FORWARDING_ALGORITHM == ( e_greedy or e_unspecified ) 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_GBC_NONAREA_GRD_BV_02_nodeB());
+ v_nodeD.start(f_GEONW_PON_GBC_NONAREA_GRD_BV_02_nodeD());
+
+ // Synchronization
+ f_serverSync2ClientsAndStop({c_prDone, c_tbDone});
+
+ // Cleanup
+ f_cf02Down();
+
+ } // End of function f_GEONW_PON_GBC_NONAREA_GRD_BV_01
+
+ /**
+ * @desc Behavior function for NodeB (TC_GEONW_PON_GBC_NONAREA_GRD_BV_01)
+ */
+ function f_GEONW_PON_GBC_NONAREA_GRD_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_generateGeoBroadcastMessage(f_getArea(c_area2))) ) {
+ log("*** " & testcasename() & ": INCONC: Trigger failed ***");
+ f_selfOrClientSyncAndVerdict(c_tbDone, e_timeout);
+ }
+
+ tc_ac.start;
+ alt {
+ [] a_receiveGeoBroadcastWithArea(
+ mw_longPosVectorPosition(v_longPosVectorIut),
+ ?,
+ f_getGeoBroadcastArea(c_area2)) {
+ tc_ac.stop;
+ log("*** " & testcasename() & ": PASS: GBC message received correctly ***");
+ 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 of function f_GEONW_PON_GBC_NONAREA_GRD_BV_01_nodeB
+
+ /**
+ * @desc Behavior function for NodeD (TC_GEONW_PON_GBC_NONAREA_GRD_BV_01)
+ */
+ function f_GEONW_PON_GBC_NONAREA_GRD_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_noac.start;
+ alt {
+ [] a_receiveGeoBroadcastWithArea(
+ mw_longPosVectorPosition(v_longPosVectorIut),
+ ?,
+ f_getGeoBroadcastArea(c_area2)) {
+ tc_noac.stop;
+ log("*** " & testcasename() & ": FAIL: received GBC message ***");
+ f_selfOrClientSyncAndVerdict(c_tbDone, e_error);
+ }
+ [] tc_noac.timeout {
+ log("*** " & testcasename() & ": PASS: GBC message not received ***");
+ f_selfOrClientSyncAndVerdict(c_tbDone, e_success);
+ }
+ }
+
+ // Postamble
+ f_poNeighbour();
+
+ } // End of function f_GEONW_PON_GBC_NONAREA_GRD_BV_01_nodeD
+
+ } // end GEONW_PON_GBC_NONAREA_GRD_BV_01
+
+ group GEONW_PON_GBC_NONAREA_GRD_BV_02 {
+
+ /**
+ * @desc TP Function for TC_GEONW_PON_GBC_NONAREA_GRD_BV_02
+ */
+ function f_GEONW_PON_GBC_NONAREA_GRD_BV_02() runs on ItsMtc {
+
+ // Local variables
+ var ItsGeoNetworking v_nodeB;
+ var ItsGeoNetworking v_nodeC;
+ 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_getNonAreaForwardingAlgorithm() != e_greedy) and (f_getNonAreaForwardingAlgorithm() != e_unspecified)) {
+ log("*** " & testcasename() & ": PICS_GN_NON_AREA_FORWARDING_ALGORITHM == ( e_greedy or e_unspecified ) 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_GBC_NONAREA_GRD_BV_02_nodeB());
+ v_nodeC.start(f_GEONW_PON_GBC_NONAREA_GRD_BV_02_nodeC());
+ v_nodeD.start(f_GEONW_PON_GBC_NONAREA_GRD_BV_02_nodeD());
+
+ // Synchronization
+ f_serverSync3ClientsAndStop({c_prDone, c_tbDone});
+
+ // Cleanup
+ f_cf04Down();
+
+ } // End of function f_GEONW_PON_GBC_NONAREA_GRD_BV_02
+
+ /**
+ * @desc Behavior function for NodeB (TC_GEONW_PON_GBC_NONAREA_GRD_BV_02)
+ */
+ function f_GEONW_PON_GBC_NONAREA_GRD_BV_02_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 {
+ [] a_receiveGeoBroadcastWithArea(
+ mw_longPosVectorPosition(v_longPosVectorNodeC),
+ ?,
+ f_getGeoBroadcastArea(c_area2)) {
+ tc_ac.stop;
+ log("*** " & testcasename() & ": PASS: GBC message correctly forwarded to area center ***");
+ 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 of function f_GEONW_PON_GBC_NONAREA_GRD_BV_02_nodeB
+
+ /**
+ * @desc Behavior function for NodeC (TC_GEONW_PON_GBC_NONAREA_GRD_BV_02)
+ */
+ function f_GEONW_PON_GBC_NONAREA_GRD_BV_02_nodeC() runs on ItsGeoNetworking {
+
+ // Local variables
+ var LongPosVector v_longPosVectorNodeC := f_getPosition(c_compNodeC);
+ var GeoNetworkingInd v_msgInd;
+
+ // Preamble
+ f_prNeighbour();
+ f_selfOrClientSyncAndVerdict(c_prDone, e_success);
+
+ // Test Body
+ f_sendGeoNetMessage(
+ m_geoNwReq_linkLayerBroadcast(
+ m_geoNwPdu(
+ m_geoNwBroadcastPacket(
+ v_longPosVectorNodeC,
+ vc_localSeqNumber,
+ f_getGeoBroadcastArea(c_area2)
+ )
+ )
+ )
+ );
+ f_selfOrClientSyncAndVerdict(c_tbDone, e_success);
+
+ // Postamble
+ f_poNeighbour();
+
+ } // End of function f_GEONW_PON_GBC_NONAREA_GRD_BV_02_nodeC
+
+ /**
+ * @desc Behavior function for NodeD (TC_GEONW_PON_GBC_NONAREA_GRD_BV_02)
+ */
+ function f_GEONW_PON_GBC_NONAREA_GRD_BV_02_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_noac.start;
+ alt {
+ [] a_receiveGeoBroadcastWithArea(
+ mw_longPosVectorPosition(v_longPosVectorNodeC),
+ ?,
+ f_getGeoBroadcastArea(c_area2)) {
+ tc_noac.stop;
+ log("*** " & testcasename() & ": FAIL: GBC message not forwarded to area center ***");
+ f_selfOrClientSyncAndVerdict(c_tbDone, e_error);
+ }
+
+ [] tc_noac.timeout {
+ log("*** " & testcasename() & ": PASS: GBC message not received ***");
+ f_selfOrClientSyncAndVerdict(c_tbDone, e_success);
+ }
+ }
+
+ // Postamble
+ f_poNeighbour();
+
+ } // End of function f_GEONW_PON_GBC_NONAREA_GRD_BV_02_nodeD
+
+ } // end GEONW_PON_GBC_NONAREA_GRD_BV_02
+
+ group GEONW_PON_GBC_NONAREA_GRD_BO_07 {
+
+ /**
+ * @desc TP Function for TC_GEONW_PON_GBC_NONAREA_GRD_BO_07
+ */
+ function f_GEONW_PON_GBC_NONAREA_GRD_BO_07() runs on ItsMtc {
+
+ // Local variables
+ var ItsGeoNetworking v_nodeB;
+ var ItsGeoNetworking v_nodeC;
+ var ItsGeoNetworking v_nodeD;
+ var UInt16 v_sequenceNumber := f_getInitialSequenceNumber();
+
+ // Test control
+ if (not PICS_GN_GBC_FWD) {
+ log("*** " & testcasename() & ": PICS_GN_GBC_FWD required for executing the TC ***");
+ setverdict(inconc);
+ stop;
+ }
+ if ((f_getNonAreaForwardingAlgorithm() != e_greedy) and (f_getNonAreaForwardingAlgorithm() != e_unspecified)) {
+ log("*** " & testcasename() & ": PICS_GN_NON_AREA_FORWARDING_ALGORITHM == ( e_greedy or e_unspecified ) 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_GBC_NONAREA_GRD_BO_07_nodeB());
+ v_nodeC.start(f_GEONW_PON_GBC_NONAREA_GRD_BO_07_nodeC(v_sequenceNumber));
+ v_nodeD.start(f_GEONW_PON_GBC_NONAREA_GRD_BO_07_nodeD(v_sequenceNumber));
+
+ // Synchronization
+ f_serverSync3ClientsAndStop({c_prDone, c_tbDone});
+
+ // Cleanup
+ f_cf04Down();
+
+ } // End of function f_GEONW_PON_GBC_NONAREA_GRD_BO_07
+
+ /**
+ * @desc Behavior function for NodeB (TC_GEONW_PON_GBC_NONAREA_GRD_BO_07)
+ */
+ function f_GEONW_PON_GBC_NONAREA_GRD_BO_07_nodeB() runs on ItsGeoNetworking {
+
+ // Local variables
+ var LongPosVector v_longPosVectorNodeC := f_getPosition(c_compNodeC);
+ var GeoNetworkingInd v_msgInd;
+ var template GeoNetworkingInd v_msgInd_t;
+
+ // Preamble
+ f_prNeighbour();
+ tc_ac.start;
+ alt {
+ [] geoNetworkingPort.receive(mw_geoNwInd(mw_geoNwPdu(mw_geoNwBroadcastPacketWithArea(
+ mw_longPosVectorPosition(v_longPosVectorNodeC),
+ ?,
+ f_getGeoBroadcastArea(c_area2)
+ )))) -> value v_msgInd {
+ tc_ac.stop;
+ log("*** " & testcasename() & ": PASS: Pre-conditions: GBC message correctly forwarded to area center ***");
+ f_selfOrClientSyncAndVerdict(c_prDone, e_success);
+ }
+ [] tc_ac.timeout {
+ log("*** " & testcasename() & ": INCONC: Pre-conditions: GBC message not received ***");
+ f_selfOrClientSyncAndVerdict(c_prDone, e_timeout);
+ }
+ }
+
+ // Test Body
+ v_msgInd_t := v_msgInd;
+ v_msgInd_t.msgIn.basicHeader.routerHopLimit := ?;
+ tc_noac.start;
+ alt {
+ [] geoNetworkingPort.receive(v_msgInd_t) {
+ tc_noac.stop;
+ log("*** " & testcasename() & ": FAIL: GBC message re-forwarded to area center ***");
+ f_selfOrClientSyncAndVerdict(c_tbDone, e_error);
+ }
+ [] tc_noac.timeout {
+ log("*** " & testcasename() & ": PASS: GBC message not re-forwarded ***");
+ f_selfOrClientSyncAndVerdict(c_tbDone, e_success);
+ }
+ }
+
+ // Postamble
+ f_poNeighbour();
+
+ } // End of function f_GEONW_PON_GBC_NONAREA_GRD_BO_07_nodeB
+
+ /**
+ * @desc Behavior function for NodeC (TC_GEONW_PON_GBC_NONAREA_GRD_BO_07)
+ */
+ function f_GEONW_PON_GBC_NONAREA_GRD_BO_07_nodeC(in UInt16 p_sequenceNumber) runs on ItsGeoNetworking {
+
+ // Local variables
+ var LongPosVector v_longPosVectorNodeC := f_getPosition(c_compNodeC);
+
+ // Preamble
+ f_prNeighbour();
+ f_sendGeoNetMessage(
+ m_geoNwReq_linkLayerBroadcast(
+ m_geoNwPdu(
+ m_geoNwBroadcastPacket(
+ v_longPosVectorNodeC,
+ p_sequenceNumber,
+ f_getGeoBroadcastArea(c_area2)
+ ),
+ -,
+ c_defaultHopLimit
+ )
+ )
+ );
+ f_selfOrClientSyncAndVerdict(c_prDone, e_success);
+
+ // Test Body
+ f_selfOrClientSyncAndVerdict(c_tbDone, e_success);
+
+ // Postamble
+ f_poNeighbour();
+
+ } // End of function f_GEONW_PON_GBC_NONAREA_GRD_BO_07_nodeC
+
+ /**
+ * @desc Behavior function for NodeD (TC_GEONW_PON_GBC_NONAREA_GRD_BO_07)
+ */
+ function f_GEONW_PON_GBC_NONAREA_GRD_BO_07_nodeD(in UInt16 p_sequenceNumber) runs on ItsGeoNetworking {
+
+ // Local variables
+ var LongPosVector v_longPosVectorNodeC := f_getPosition(c_compNodeC);
+
+ // Preamble
+ f_prNeighbour();
+ tc_noac.start;
+ alt {
+ [] geoNetworkingPort.receive(mw_geoNwInd(mw_geoNwPdu(mw_geoNwBroadcastPacketWithArea(
+ mw_longPosVectorPosition(v_longPosVectorNodeC),
+ ?,
+ f_getGeoBroadcastArea(c_area2)
+ )))) {
+ tc_noac.stop;
+ log("*** " & testcasename() & ": INCONC: Pre-conditions: GBC message not forwarded to area center ***");
+ f_selfOrClientSyncAndVerdict(c_prDone, e_error);
+ }
+ [] tc_noac.timeout {
+ log("*** " & testcasename() & ": PASS: Pre-conditions: GBC message not received ***");
+ f_selfOrClientSyncAndVerdict(c_prDone, e_success);
+ }
+ }
+
+ // Test Body
+ // send geoBroadcast for second time (same source + same seq Nr + lower RHL)
+ f_sendGeoNetMessage(
+ m_geoNwReq_linkLayerBroadcast(
+ m_geoNwPdu(
+ m_geoNwBroadcastPacket(
+ v_longPosVectorNodeC,
+ p_sequenceNumber,
+ f_getGeoBroadcastArea(c_area2)
+ ),
+ -,
+ c_defaultHopLimit - 1
+ )
+ )
+ );
+
+ tc_noac.start;
+ alt {
+ [] geoNetworkingPort.receive(mw_geoNwInd(mw_geoNwPdu(mw_geoNwBroadcastPacketWithArea(
+ mw_longPosVectorPosition(v_longPosVectorNodeC),
+ ?,
+ f_getGeoBroadcastArea(c_area2)
+ )))) {
+ tc_noac.stop;
+ log("*** " & testcasename() & ": FAIL: GBC re-forwarded! (not to area center!) ***");
+ f_selfOrClientSyncAndVerdict(c_tbDone, e_error);
+ }
+ [] tc_noac.timeout {
+ log("*** " & testcasename() & ": PASS: GBC message not received ***");
+ f_selfOrClientSyncAndVerdict(c_tbDone, e_success);
+ }
+ }
+
+ // Postamble
+ f_poNeighbour();
+
+ } // End of function f_GEONW_PON_GBC_NONAREA_GRD_BO_07_nodeD
+
+ } // end GEONW_PON_GBC_NONAREA_GRD_BO_07
+
+ } // end gbcNonAreaGreedyForwarding
+
+ group gbcNonAreaContentionBasedForwarding {
+
+ group GEONW_PON_GBC_NONAREA_CBF_BV_01 {
+
+ /**
+ * @desc TP Function for TC_GEONW_PON_GBC_NONAREA_CBF_BV_01
+ */
+ function f_GEONW_PON_GBC_NONAREA_CBF_BV_01() runs on ItsMtc {
+
+ // Local variables
+ var ItsGeoNetworking v_nodeB;
+ var ItsGeoNetworking v_nodeD;
+
+ // Test control
+ if (not PICS_GN_GBC_SRC) {
+ log("*** " & testcasename() & ": PICS_GN_GBC_SRC 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;
+ }
+
+ // 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_GBC_NONAREA_CBF_BV_01_nodeB());
+ v_nodeD.start(f_GEONW_PON_GBC_NONAREA_CBF_BV_01_nodeD());
+
+ // Synchronization
+ f_serverSync2ClientsAndStop({c_prDone, c_tbDone});
+
+ // Cleanup
+ f_cf02Down();
+
+ } // End of function f_GEONW_PON_GBC_NONAREA_CBF_BV_01
+
+ /**
+ * @desc Behavior function for NodeB (TC_GEONW_PON_GBC_NONAREA_CBF_BV_01)
+ */
+ function f_GEONW_PON_GBC_NONAREA_CBF_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_generateGeoBroadcastMessage(f_getArea(c_area2))) ) {
+ log("*** " & testcasename() & ": INCONC: Trigger failed ***");
+ f_selfOrClientSyncAndVerdict(c_tbDone, e_timeout);
+ }
+
+ tc_ac.start;
+ alt {
+ [] a_receiveGeoBroadcastWithArea(
+ mw_longPosVectorPosition(v_longPosVectorIut),
+ ?,
+ f_getGeoBroadcastArea(c_area2)) {
+ tc_ac.stop;
+ log("*** " & testcasename() & ": PASS: GBC message received correctly ***");
+ 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 of function f_GEONW_PON_GBC_NONAREA_CBF_BV_01_nodeB
+
+ /**
+ * @desc Behavior function for NodeD (TC_GEONW_PON_GBC_NONAREA_CBF_BV_01)
+ */
+ function f_GEONW_PON_GBC_NONAREA_CBF_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_receiveGeoBroadcastWithArea(
+ mw_longPosVectorPosition(v_longPosVectorIut),
+ ?,
+ f_getGeoBroadcastArea(c_area2)) {
+ tc_ac.stop;
+ log("*** " & testcasename() & ": PASS: GBC message received correctly ***");
+ 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 of function f_GEONW_PON_GBC_NONAREA_CBF_BV_01_nodeD
+
+ } // end GEONW_PON_GBC_NONAREA_CBF_BV_01
+
+ group GEONW_PON_GBC_NONAREA_CBF_BV_02 {
+
+ /**
+ * @desc TP Function for TC_GEONW_PON_GBC_NONAREA_CBF_BV_02
+ */
+ function f_GEONW_PON_GBC_NONAREA_CBF_BV_02() runs on ItsMtc {
+
+ // Local variables
+ var ItsGeoNetworking v_nodeB;
+ var ItsGeoNetworking v_nodeC;
+ 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_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_GBC_NONAREA_CBF_BV_02_nodeB());
+ v_nodeC.start(f_GEONW_PON_GBC_NONAREA_CBF_BV_02_nodeC());
+ v_nodeD.start(f_GEONW_PON_GBC_NONAREA_CBF_BV_02_nodeD());
+
+ // Synchronization
+ f_serverSync3ClientsAndStop({c_prDone, c_tbDone});
+
+ // Cleanup
+ f_cf04Down();
+
+ } // End of function f_GEONW_PON_GBC_NONAREA_CBF_BV_02
+
+ /**
+ * @desc Behavior function for NodeB (TC_GEONW_PON_GBC_NONAREA_CBF_BV_02)
+ */
+ function f_GEONW_PON_GBC_NONAREA_CBF_BV_02_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: GBC message broadcasted ***");
+ f_selfOrClientSyncAndVerdict(c_tbDone, e_success);
+ }
+ [] tc_ac.timeout {
+ log("*** " & testcasename() & ": FAIL: GBC message not broadcasted ***");
+ f_selfOrClientSyncAndVerdict(c_tbDone, e_error);
+ }
+ }
+
+ // Postamble
+ f_poNeighbour();
+
+ } // End of function f_GEONW_PON_GBC_NONAREA_CBF_BV_02_nodeB
+
+ /**
+ * @desc Behavior function for NodeC (TC_GEONW_PON_GBC_NONAREA_CBF_BV_02)
+ */
+ function f_GEONW_PON_GBC_NONAREA_CBF_BV_02_nodeC() runs on ItsGeoNetworking {
+
+ // Local variables
+ var LongPosVector v_longPosVectorNodeC := f_getPosition(c_compNodeC);
+ var LongPosVector v_longPosVectorIut := f_getPosition(c_compIut);
+ timer t_toCbf := (int2float(f_getCbfMaxTime())
+ + (
+ int2float(f_getCbfMinTime() - f_getCbfMaxTime())
+ / int2float(f_getCbfMaxCommunicationRange())
+ ) * f_distance(v_longPosVectorNodeC, 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_longPosVectorNodeC,
+ vc_localSeqNumber,
+ f_getGeoBroadcastArea(c_area2)
+ )
+ )
+ )
+ );
+
+ t_toCbf.start;
+ tc_ac.start;
+ alt {
+ [] geoNetworkingPort.receive(mw_geoNwInd(mw_geoNwPdu(mw_geoNwBroadcastPacketWithArea(
+ mw_longPosVectorPosition(v_longPosVectorNodeC),
+ ?,
+ f_getGeoBroadcastArea(c_area2)
+ )))) {
+ 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 of function f_GEONW_PON_GBC_NONAREA_CBF_BV_02_nodeC
+
+ /**
+ * @desc Behavior function for NodeD (TC_GEONW_PON_GBC_NONAREA_CBF_BV_02)
+ */
+ function f_GEONW_PON_GBC_NONAREA_CBF_BV_02_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: GBC message broadcasted ***");
+ f_selfOrClientSyncAndVerdict(c_tbDone, e_success);
+ }
+ [] tc_ac.timeout {
+ log("*** " & testcasename() & ": FAIL: GBC message not broadcasted ***");
+ f_selfOrClientSyncAndVerdict(c_tbDone, e_error);
+ }
+ }
+
+ // Postamble
+ f_poNeighbour();
+
+ } // End of function f_GEONW_PON_GBC_NONAREA_CBF_BV_02_nodeD
+
+ } // end GEONW_PON_GBC_NONAREA_CBF_BV_02
+
+ group GEONW_PON_GBC_NONAREA_CBF_BV_07 {
+
+ /**
+ * @desc TP Function for TC_GEONW_PON_GBC_NONAREA_CBF_BV_07
+ */
+ function f_GEONW_PON_GBC_NONAREA_CBF_BV_07() runs on ItsMtc {
+
+ // Local variables
+ var ItsGeoNetworking v_nodeB;
+ var ItsGeoNetworking v_nodeC;
+ var ItsGeoNetworking v_nodeD;
+ var UInt16 v_sequenceNumberC := f_getInitialSequenceNumber();
+
+ // Test control
+ if (not PICS_GN_GBC_FWD) {
+ log("*** " & testcasename() & ": PICS_GN_GBC_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_GBC_NONAREA_CBF_BV_07_nodeB());
+ v_nodeC.start(f_GEONW_PON_GBC_NONAREA_CBF_BV_07_nodeC(v_sequenceNumberC));
+ v_nodeD.start(f_GEONW_PON_GBC_NONAREA_CBF_BV_07_nodeD(v_sequenceNumberC));
+
+ // Synchronization
+ f_serverSync3ClientsAndStop({c_prDone, c_tbDone});
+
+ // Cleanup
+ f_cf04Down();
+
+ } // End of function f_GEONW_PON_GBC_NONAREA_CBF_BV_07
+
+ /**
+ * @desc Behavior function for NodeB (TC_GEONW_PON_GBC_NONAREA_CBF_BV_07)
+ */
+ function f_GEONW_PON_GBC_NONAREA_CBF_BV_07_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_noac.start;
+ alt {
+ [] geoNetworkingPort.receive(mw_geoNwInd(mw_geoNwPdu(mw_geoNwBroadcastPacketWithArea(
+ mw_longPosVectorPosition(v_longPosVectorNodeC),
+ ?,
+ f_getGeoBroadcastArea(c_area2)
+ )))) {
+ tc_noac.stop;
+ log("*** " & testcasename() & ": FAIL: GBC message re-broadcasted ***");
+ f_selfOrClientSyncAndVerdict(c_tbDone, e_error);
+ }
+ [] tc_noac.timeout {
+ log("*** " & testcasename() & ": PASS: GBC message not re-broadcasted ***");
+ f_selfOrClientSyncAndVerdict(c_tbDone, e_success);
+ }
+ }
+
+ // Postamble
+ f_poNeighbour();
+
+ } // End of function f_GEONW_PON_GBC_NONAREA_CBF_BV_07_nodeB
+
+ /**
+ * @desc Behavior function for NodeC (TC_GEONW_PON_GBC_NONAREA_CBF_BV_07)
+ */
+ function f_GEONW_PON_GBC_NONAREA_CBF_BV_07_nodeC(in UInt16 p_sequenceNumberC) runs on ItsGeoNetworking {
+
+ // Local variables
+ var LongPosVector v_longPosVectorNodeC := f_getPosition(c_compNodeC);
+
+ // Preamble
+ f_prNeighbour();
+ f_sendGeoNetMessage(
+ m_geoNwReq_linkLayerBroadcast(
+ m_geoNwPdu(
+ m_geoNwBroadcastPacket(
+ v_longPosVectorNodeC,
+ p_sequenceNumberC,
+ f_getGeoBroadcastArea(c_area2)
+ )
+ )
+ )
+ );
+ f_selfOrClientSyncAndVerdict(c_prDone, e_success);
+
+ // Test Body
+ tc_noac.start;
+ alt {
+ [] geoNetworkingPort.receive(mw_geoNwInd(mw_geoNwPdu(mw_geoNwBroadcastPacketWithArea(
+ mw_longPosVectorPosition(v_longPosVectorNodeC),
+ ?,
+ f_getGeoBroadcastArea(c_area2)
+ )))) {
+ tc_noac.stop;
+ log("*** " & testcasename() & ": FAIL: GBC message re-broadcasted ***");
+ f_selfOrClientSyncAndVerdict(c_tbDone, e_error);
+ }
+ [] tc_noac.timeout {
+ log("*** " & testcasename() & ": PASS: GBC message not re-broadcasted ***");
+ f_selfOrClientSyncAndVerdict(c_tbDone, e_success);
+ }
+ }
+
+ // Postamble
+ f_poNeighbour();
+
+ } // End of function f_GEONW_PON_GBC_NONAREA_CBF_BV_07_nodeC
+
+ /**
+ * @desc Behavior function for NodeD (TC_GEONW_PON_GBC_NONAREA_CBF_BV_07)
+ */
+ function f_GEONW_PON_GBC_NONAREA_CBF_BV_07_nodeD(in UInt16 p_sequenceNumberC) runs on ItsGeoNetworking {
+
+ // Local variables
+ var LongPosVector v_longPosVectorNodeC := f_getPosition(c_compNodeC);
+
+ // Preamble
+ f_prNeighbour();
+ f_selfOrClientSyncAndVerdict(c_prDone, e_success);
+
+ // Test Body
+ f_sendGeoNetMessage(
+ m_geoNwReq_linkLayerBroadcast(
+ m_geoNwPdu(
+ m_geoNwBroadcastPacket(
+ v_longPosVectorNodeC,
+ p_sequenceNumberC,
+ f_getGeoBroadcastArea(c_area2)
+ )
+ )
+ )
+ );
+
+ tc_noac.start;
+ alt {
+ [] geoNetworkingPort.receive(mw_geoNwInd(mw_geoNwPdu(mw_geoNwBroadcastPacketWithArea(
+ mw_longPosVectorPosition(v_longPosVectorNodeC),
+ ?,
+ f_getGeoBroadcastArea(c_area2)
+ )))) {
+ tc_noac.stop;
+ log("*** " & testcasename() & ": FAIL: GBC message re-broadcasted ***");
+ f_selfOrClientSyncAndVerdict(c_tbDone, e_error);
+ }
+ [] tc_noac.timeout {
+ log("*** " & testcasename() & ": PASS: GBC message not re-broadcasted ***");
+ f_selfOrClientSyncAndVerdict(c_tbDone, e_success);
+ }
+ }
+
+ // Postamble
+ f_poNeighbour();
+
+ } // End of function f_GEONW_PON_GBC_NONAREA_CBF_BV_071_nodeD
+
+ } // end GEONW_PON_GBC_NONAREA_CBF_BV_07
+
+ group GEONW_PON_GBC_NONAREA_CBF_BV_20 {
+
+ /**
+ * @desc TP Function for TC_GEONW_PON_GBC_NONAREA_CBF_BV_20
+ */
+ function f_GEONW_PON_GBC_NONAREA_CBF_BV_20() runs on ItsMtc {
+
+ // Local variables
+ var ItsGeoNetworking v_nodeB;
+ var ItsGeoNetworking v_nodeC;
+ var float v_distance := int2float(f_getCbfMaxCommunicationRange() * 2);
+ var LongPosVector v_longPosVectorIut, v_longPosVectorNodeC;
+
+ // Test control
+ if (not PICS_GN_GBC_FWD) {
+ log("*** " & testcasename() & ": PICS_GN_GUC_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;
+ }
+
+ // Test component configuration
+ f_cf03Up();
+ // re-compute NodeC's position.
+ v_longPosVectorIut := f_getIutLongPosVector();
+ v_longPosVectorNodeC := f_computePositionUsingDistance(v_longPosVectorIut, v_distance, 180);
+ v_longPosVectorNodeC.gnAddr := f_getTsGnLocalAddress(c_compNodeC);
+
+ // Preamble
+
+ // Start components
+ v_nodeB := f_getComponent(c_compNodeB);
+ v_nodeC := f_getComponent(c_compNodeC);
+ v_nodeB.start(f_GEONW_PON_GBC_NONAREA_CBF_BV_20_nodeB(v_longPosVectorNodeC));
+ v_nodeC.start(f_GEONW_PON_GBC_NONAREA_CBF_BV_20_nodeC(v_longPosVectorNodeC));
+
+ // Synchronization
+ f_serverSync2ClientsAndStop({c_prDone, c_msgSent, c_tbDone});
+
+ // Cleanup
+ f_cf03Down();
+
+ } // End of function f_GEONW_PON_GBC_NONAREA_CBF_BV_20
+
+ /**
+ * @desc Behavior function for NodeB (TC_GEONW_PON_GBC_NONAREA_CBF_BV_20)
+ * @param p_longPosVectorNodeC Position vector of NodeC
+ */
+ function f_GEONW_PON_GBC_NONAREA_CBF_BV_20_nodeB(in LongPosVector p_longPosVectorNodeC) runs on ItsGeoNetworking {
+
+ // Local variables
+ timer t_toCbf := int2float(f_getCbfMinTime()) / 1000.0;
+
+ // Preamble
+ f_prNeighbour();
+ f_selfOrClientSyncAndVerdict(c_prDone, e_success);
+
+ // Test Body
+ log("*** " & testcasename() & ": INFO: Message sent ***");
+ f_selfOrClientSyncAndVerdict(c_msgSent, e_success);
+
+ tc_ac.start;
+ t_toCbf.start;
+ alt {
+ [] geoNetworkingPort.receive(mw_geoNwInd(mw_geoNwPdu(mw_geoNwBroadcastPacketWithArea(
+ mw_longPosVectorPosition(p_longPosVectorNodeC),
+ ?,
+ f_getGeoBroadcastArea(c_area2)
+ )))) {
+ tc_ac.stop;
+ if(t_toCbf.running) {
+ t_toCbf.stop;
+ log("*** " & testcasename() & ": FAIL: IUT re-broadcasted the packet too early ***");
+ f_selfOrClientSyncAndVerdict(c_tbDone, e_error);
+ }
+ else {
+ log("*** " & testcasename() & ": PASS: Forwarded GUC received ***");
+ f_selfOrClientSyncAndVerdict(c_tbDone, e_success);
+ }
+ }
+ [] t_toCbf.timeout {
+ log("*** " & testcasename() & ": INFO: Ready for receiving re-broadcasting ***");
+ repeat;
+ }
+
+ [] tc_ac.timeout {
+ log("*** " & testcasename() & ": FAIL: GUC was not forwarded ***");
+ f_selfOrClientSyncAndVerdict(c_tbDone, e_error);
+ }
+ }
+
+ // Postamble
+ f_poNeighbour();
+
+ } // End of function f_GEONW_PON_GBC_NONAREA_CBF_BV_20_nodeB
+
+ /**
+ * @desc Behavior function for NodeC (TC_GEONW_PON_GBC_NONAREA_CBF_BV_20)
+ * @param p_longPosVectorNodeC Position vector of NodeC
+ */
+ function f_GEONW_PON_GBC_NONAREA_CBF_BV_20_nodeC(LongPosVector p_longPosVectorNodeC) runs on ItsGeoNetworking {
+
+ // Local variables
+
+ // Preamble
+ f_prNeighbour();
+ f_selfOrClientSyncAndVerdict(c_prDone, e_success);
+
+ // Test Body
+ f_sendGeoNetMessage(
+ m_geoNwReq_linkLayerBroadcast(
+ m_geoNwPdu(
+ m_geoNwBroadcastPacket(
+ p_longPosVectorNodeC,
+ vc_localSeqNumber,
+ f_getGeoBroadcastArea(c_area2)
+ )
+ )
+ )
+ );
+
+ log("*** " & testcasename() & ": INFO: Message sent ***");
+ f_selfOrClientSyncAndVerdict(c_msgSent, e_success);
+
+ tc_ac.start;
+ alt {
+ [] geoNetworkingPort.receive(mw_geoNwInd(mw_geoNwPdu(mw_geoNwBroadcastPacketWithArea(
+ mw_longPosVectorPosition(p_longPosVectorNodeC),
+ ?,
+ f_getGeoBroadcastArea(c_area2)
+ )))) {
+ tc_ac.stop;
+ log("*** " & testcasename() & ": PASS: Forwarded GUC received ***");
+ f_selfOrClientSyncAndVerdict(c_tbDone, e_success);
+ }
+ [] tc_ac.timeout {
+ log("*** " & testcasename() & ": FAIL: GUC was not forwarded ***");
+ f_selfOrClientSyncAndVerdict(c_tbDone, e_error);
+ }
+ }
+
+ // Postamble
+ f_poNeighbour();
+
+ } // End of function f_GEONW_PON_GBC_NONAREA_CBF_BV_20_nodeC
+
+ } // end GEONW_PON_GBC_NONAREA_CBF_BV_20
+
+ group GEONW_PON_GBC_NONAREA_CBF_BV_21 {
+
+ /**
+ * @desc TP Function for TC_GEONW_PON_GBC_NONAREA_CBF_BV_21
+ */
+ function f_GEONW_PON_GBC_NONAREA_CBF_BV_21() runs on ItsMtc {
+
+ // Local variables
+ var ItsGeoNetworking v_nodeB;
+ var ItsGeoNetworking v_nodeC;
+ 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_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_GBC_NONAREA_CBF_BV_21_nodeB());
+ v_nodeC.start(f_GEONW_PON_GBC_NONAREA_CBF_BV_21_nodeC());
+ v_nodeD.start(f_GEONW_PON_GBC_NONAREA_CBF_BV_21_nodeD());
+
+ // Synchronization
+ f_serverSync3ClientsAndStop({c_prDone, c_tbDone});
+
+ // Cleanup
+ f_cf04Down();
+
+ } // End of function f_GEONW_PON_GBC_NONAREA_CBF_BV_21
+
+ /**
+ * @desc Behavior function for NodeB (TC_GEONW_PON_GBC_NONAREA_CBF_BV_21)
+ */
+ function f_GEONW_PON_GBC_NONAREA_CBF_BV_21_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: GBC broadcasted ***");
+ f_selfOrClientSyncAndVerdict(c_tbDone, e_success);
+ }
+ [] tc_ac.timeout {
+ log("*** " & testcasename() & ": FAIL: GBC not broadcasted ***");
+ f_selfOrClientSyncAndVerdict(c_tbDone, e_error);
+ }
+ }
+
+ // Postamble
+ f_poNeighbour();
+
+ } // End of function f_GEONW_PON_GBC_NONAREA_CBF_BV_21_nodeB
+
+ /**
+ * @desc Behavior function for NodeC (TC_GEONW_PON_GBC_NONAREA_CBF_BV_21)
+ */
+ function f_GEONW_PON_GBC_NONAREA_CBF_BV_21_nodeC() runs on ItsGeoNetworking {
+
+ // Local variables
+
+ // Preamble
+ f_prNeighbour();
+ f_selfOrClientSyncAndVerdict(c_prDone, e_success);
+
+ // Test Body
+ tc_ac.start;
+ alt {
+ [] geoNetworkingPort.receive(mw_geoNwInd(mw_geoNwPdu(?))) {
+ tc_ac.stop;
+ log("*** " & testcasename() & ": PASS: GBC message re-broadcasted ***");
+ f_selfOrClientSyncAndVerdict(c_tbDone, e_success);
+ }
+ [] tc_ac.timeout {
+ log("*** " & testcasename() & ": FAIL: GBC message not re-broadcasted ***");
+ f_selfOrClientSyncAndVerdict(c_tbDone, e_error);
+ }
+ }
+
+ // Postamble
+ f_poNeighbour();
+
+ } // End of function f_GEONW_PON_GBC_NONAREA_CBF_BV_21_nodeC
+
+ /**
+ * @desc Behavior function for NodeD (TC_GEONW_PON_GBC_NONAREA_CBF_BV_21)
+ */
+ function f_GEONW_PON_GBC_NONAREA_CBF_BV_21_nodeD() runs on ItsGeoNetworking {
+
+ // Local variables
+ var LongPosVector v_longPosVectorNodeC := f_getPosition(c_compNodeC);
+ timer t_toCbf := int2float(f_getCbfMaxTime()) * 0.95 / 1000.0;
+
+ // Preamble
+ f_prNonNeighbour();
+ f_selfOrClientSyncAndVerdict(c_prDone, e_success);
+
+ // Test Body
+ f_sendGeoNetMessage(
+ m_geoNwReq_linkLayerBroadcast(
+ m_geoNwPdu(
+ m_geoNwBroadcastPacket(
+ v_longPosVectorNodeC,
+ vc_localSeqNumber,
+ f_getGeoBroadcastArea(c_area2)
+ )
+ )
+ )
+ );
+
+ t_toCbf.start;
+ tc_ac.start;
+ alt {
+ [] geoNetworkingPort.receive(mw_geoNwInd(mw_geoNwPdu(mw_geoNwBroadcastPacketWithArea(
+ mw_longPosVectorPosition(v_longPosVectorNodeC),
+ ?,
+ f_getGeoBroadcastArea(c_area2)
+ )))) {
+ 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_poDefault();
+
+ } // End of function f_GEONW_PON_GBC_NONAREA_CBF_BV_21_nodeD
+
+ } // end GEONW_PON_GBC_NONAREA_CBF_BV_21
+
+ group GEONW_PON_GBC_NONAREA_CBF_BV_22 {
+
+ /**
+ * @desc TP Function for TC_GEONW_PON_GBC_NONAREA_CBF_BV_22
+ */
+ function f_GEONW_PON_GBC_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_GBC_FWD) {
+ log("*** " & testcasename() & ": PICS_GN_GBC_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_GBC_NONAREA_CBF_BV_22_nodeB());
+ v_nodeC.start(f_GEONW_PON_GBC_NONAREA_CBF_BV_22_nodeC());
+ v_nodeD.start(f_GEONW_PON_GBC_NONAREA_CBF_BV_22_nodeD());
+
+ // Synchronization
+ f_serverSync3ClientsAndStop({c_prDone, c_tbDone});
+
+ // Cleanup
+ f_cf04Down();
+
+ } // End of function f_GEONW_PON_GBC_NONAREA_CBF_BV_22
+
+ /**
+ * @desc Behavior function for NodeB (TC_GEONW_PON_GBC_NONAREA_CBF_BV_22)
+ */
+ function f_GEONW_PON_GBC_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_geoNwBroadcastPacketWithArea(
+ mw_longPosVectorPosition(v_longPosVectorNodeA),
+ ?,
+ f_getGeoBroadcastArea(c_area2)
+ )))) {
+ tc_ac.stop;
+ log("*** " & testcasename() & ": PASS: GBC broadcasted ***");
+ f_selfOrClientSyncAndVerdict(c_tbDone, e_success);
+ }
+ [] tc_ac.timeout {
+ log("*** " & testcasename() & ": FAIL: GBC not broadcasted ***");
+ f_selfOrClientSyncAndVerdict(c_tbDone, e_error);
+ }
+ }
+
+ // Postamble
+ f_poNeighbour();
+
+ } // End of function f_GEONW_PON_GBC_NONAREA_CBF_BV_22_nodeB
+
+ /**
+ * @desc Behavior function for NodeC (TC_GEONW_PON_GBC_NONAREA_CBF_BV_22)
+ */
+ function f_GEONW_PON_GBC_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_geoNwBroadcastPacket(
+ v_longPosVectorNodeA,
+ vc_localSeqNumber,
+ f_getGeoBroadcastArea(c_area2)
+ )
+ )
+ )
+ );
+
+ t_toCbf.start;
+ tc_ac.start;
+ alt {
+ [] geoNetworkingPort.receive(mw_geoNwInd(mw_geoNwPdu(mw_geoNwBroadcastPacketWithArea(
+ mw_longPosVectorPosition(v_longPosVectorNodeA),
+ ?,
+ f_getGeoBroadcastArea(c_area2)
+ )))) {
+ 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 of function f_GEONW_PON_GBC_NONAREA_CBF_BV_22_nodeC
+
+ /**
+ * @desc Behavior function for NodeD (TC_GEONW_PON_GBC_NONAREA_CBF_BV_22)
+ */
+ function f_GEONW_PON_GBC_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_geoNwBroadcastPacketWithArea(
+ mw_longPosVectorPosition(v_longPosVectorNodeA),
+ ?,
+ f_getGeoBroadcastArea(c_area2)
+ )))) {
+ tc_ac.stop;
+ log("*** " & testcasename() & ": PASS: GBC broadcasted ***");
+ f_selfOrClientSyncAndVerdict(c_tbDone, e_success);
+ }
+ [] tc_ac.timeout {
+ log("*** " & testcasename() & ": FAIL: GBC not broadcasted ***");
+ f_selfOrClientSyncAndVerdict(c_tbDone, e_error);
+ }
+ }
+
+ // Postamble
+ f_poNeighbour();
+
+ } // End of function f_GEONW_PON_GBC_NONAREA_CBF_BV_22_nodeD
+
+ } // end GEONW_PON_GBC_NONAREA_CBF_BV_22
+
+ } // end gbcNonAreaContentionBasedForwarding
+
+ } // end gbcNonAreaForwarding
+
+ group gbcAreaForwarding {
+
+ group gbcAreaAllForwardingAlgorithm {
+
+ group GEONW_PON_GBC_AREA_ALL_BV_01 {
+
+ /**
+ * @desc TP Function for TC_GEONW_PON_GBC_AREA_ALL_BV_01
+ */
+ function f_GEONW_PON_GBC_AREA_ALL_BV_01() runs on ItsMtc {
+
+ // Local variables
+ var ItsGeoNetworking v_nodeB;
+ var ItsGeoNetworking v_nodeD;
+
+ // Test control
+ if (not PICS_GN_GBC_SRC) {
+ log("*** " & testcasename() & ": PICS_GN_GBC_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_GBC_AREA_ALL_BV_01_nodeB());
+ v_nodeD.start(f_GEONW_PON_GBC_AREA_ALL_BV_01_nodeD());
+
+ // Synchronization
+ f_serverSync2ClientsAndStop({c_prDone, c_tbDone});
+
+ // Cleanup
+ f_cf02Down();
+
+ } // End of function f_GEONW_PON_GBC_AREA_ALL_BV_01
+
+ /**
+ * @desc Behavior function for NodeB (TC_GEONW_PON_GBC_AREA_ALL_BV_01)
+ */
+ function f_GEONW_PON_GBC_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_generateGeoBroadcastMessage(f_getArea(c_area1))) ) {
+ log("*** " & testcasename() & ": INCONC: Trigger failed ***");
+ f_selfOrClientSyncAndVerdict(c_tbDone, e_timeout);
+ }
+
+ tc_ac.start;
+ alt {
+ [] a_receiveGeoBroadcastWithArea(
+ mw_longPosVectorPosition(v_longPosVectorIut),
+ ?,
+ f_getGeoBroadcastArea(c_area1)) {
+ tc_ac.stop;
+ log("*** " & testcasename() & ": PASS: GBC message received correctly ***");
+ 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 of function f_GEONW_PON_GBC_AREA_ALL_BV_01_nodeB
+
+ /**
+ * @desc Behavior function for NodeD (TC_GEONW_PON_GBC_AREA_ALL_BV_01)
+ */
+ function f_GEONW_PON_GBC_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_receiveGeoBroadcastWithArea(
+ mw_longPosVectorPosition(v_longPosVectorIut),
+ ?,
+ f_getGeoBroadcastArea(c_area1)) {
+ tc_ac.stop;
+ log("*** " & testcasename() & ": PASS: GBC message received correctly ***");
+ 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 of function f_GEONW_PON_GBC_AREA_ALL_BV_01_nodeD
+
+ } // end GEONW_PON_GBC_AREA_ALL_BV_01
+
+ group GEONW_PON_GBC_AREA_ALL_BV_03 {
+
+ /**
+ * @desc TP Function for TC_GEONW_PON_GBC_AREA_ALL_BV_03
+ */
+ function f_GEONW_PON_GBC_AREA_ALL_BV_03() 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;
+ }
+
+ // 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_GBC_AREA_ALL_BV_03_nodeB());
+ v_nodeD.start(f_GEONW_PON_GBC_AREA_ALL_BV_03_nodeD());
+
+ // Synchronization
+ f_serverSync2ClientsAndStop({c_prDone, c_tbDone});
+
+ // Cleanup
+ f_cf02Down();
+
+ } // End of function f_GEONW_PON_GBC_AREA_ALL_BV_03
+
+ /**
+ * @desc Behavior function for NodeB (TC_GEONW_PON_GBC_AREA_ALL_BV_03)
+ */
+ function f_GEONW_PON_GBC_AREA_ALL_BV_03_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_geoNwBroadcastPacket(
+ v_longPosVectorNodeB,
+ vc_localSeqNumber,
+ f_getGeoBroadcastArea(c_area1),
+ c_defaultHopLimit
+ ),
+ -,
+ c_defaultHopLimit
+ )
+ )
+ );
+
+ tc_ac.start;
+ alt {
+ [] a_receiveGeoBroadcastWithAreaWithHopLimit(
+ mw_longPosVectorPosition(v_longPosVectorNodeB),
+ ?,
+ f_getGeoBroadcastArea(c_area1),
+ c_defaultHopLimit - 1,
+ c_defaultHopLimit) {
+ tc_ac.stop;
+ log("*** " & testcasename() & ": PASS: GBC message correctly retransmitted ***");
+ f_selfOrClientSyncAndVerdict(c_tbDone, e_success);
+ }
+ [] a_receiveGeoBroadcastWithAreaWithHopLimit(
+ mw_longPosVectorPosition(v_longPosVectorNodeB),
+ ?,
+ f_getGeoBroadcastArea(c_area1),
+ ?,
+ ?) {
+ tc_ac.stop;
+ log("*** " & testcasename() & ": FAIL: GBC message fields not updated ***");
+ f_selfOrClientSyncAndVerdict(c_tbDone, e_error);
+ }
+ [] tc_ac.timeout {
+ log("*** " & testcasename() & ": INCONC: GBC message not retransmitted ***");
+ f_selfOrClientSyncAndVerdict(c_tbDone, e_timeout);
+ }
+ }
+
+ // Postamble
+ f_poNeighbour();
+
+ } // End of function f_GEONW_PON_GBC_AREA_ALL_BV_03_nodeB
+
+ /**
+ * @desc Behavior function for NodeD (TC_GEONW_PON_GBC_AREA_ALL_BV_03)
+ */
+ function f_GEONW_PON_GBC_AREA_ALL_BV_03_nodeD() runs on ItsGeoNetworking {
+
+ // Local variables
+ var LongPosVector v_longPosVectorNodeB := f_getPosition(c_compNodeB);
+ var GeoNetworkingInd v_msgInd;
+
+ // Preamble
+ f_prNeighbour();
+ f_selfOrClientSyncAndVerdict(c_prDone, e_success);
+
+ // Test Body
+ tc_ac.start;
+ alt {
+ [] a_receiveGeoBroadcastWithAreaWithHopLimit(
+ mw_longPosVectorPosition(v_longPosVectorNodeB),
+ ?,
+ f_getGeoBroadcastArea(c_area1),
+ c_defaultHopLimit - 1,
+ c_defaultHopLimit) {
+ tc_ac.stop;
+ log("*** " & testcasename() & ": PASS: GBC message correctly retransmitted ***");
+ f_selfOrClientSyncAndVerdict(c_tbDone, e_success);
+ }
+ [] tc_ac.timeout {
+ log("*** " & testcasename() & ": INCONC: GBC message not retransmitted ***");
+ f_selfOrClientSyncAndVerdict(c_tbDone, e_timeout);
+ }
+ }
+
+ // Postamble
+ f_poNeighbour();
+
+ } // End of function f_GEONW_PON_GBC_AREA_ALL_BV_03_nodeD
+
+ } // end GEONW_PON_GBC_AREA_ALL_BV_03
+
+ group GEONW_PON_GBC_AREA_ALL_BV_04 {
+
+ /**
+ * @desc TP Function for TC_GEONW_PON_GBC_AREA_ALL_BV_04
+ */
+ function f_GEONW_PON_GBC_AREA_ALL_BV_04() 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;
+ }
+
+ // 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_GBC_AREA_ALL_BV_04_nodeB());
+ v_nodeD.start(f_GEONW_PON_GBC_AREA_ALL_BV_04_nodeD());
+
+ // Synchronization
+ f_serverSync2ClientsAndStop({c_prDone, c_tbDone});
+
+ // Cleanup
+ f_cf02Down();
+
+ } // End of function f_GEONW_PON_GBC_AREA_ALL_BV_04
+
+ /**
+ * @desc Behavior function for NodeB (TC_GEONW_PON_GBC_AREA_ALL_BV_04)
+ */
+ function f_GEONW_PON_GBC_AREA_ALL_BV_04_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_geoNwBroadcastPacket(
+ v_longPosVectorNodeB,
+ vc_localSeqNumber,
+ f_getGeoBroadcastArea(c_area1)
+ ),
+ -,
+ c_hopLimit1
+ )
+ )
+ );
+
+ tc_noac.start;
+ alt {
+ [] a_receiveGeoBroadcast(
+ mw_longPosVectorPosition(v_longPosVectorNodeB),
+ ?) {
+ tc_noac.stop;
+ log("*** " & testcasename() & ": FAIL: GBC message retransmitted ***");
+ f_selfOrClientSyncAndVerdict(c_tbDone, e_error);
+ }
+ [] tc_noac.timeout {
+ log("*** " & testcasename() & ": PASS: GBC message not retransmitted ***");
+ f_selfOrClientSyncAndVerdict(c_tbDone, e_success);
+ }
+ }
+
+ // Postamble
+ f_poNeighbour();
+
+ } // End of function f_GEONW_PON_GBC_AREA_ALL_BV_04_nodeB
+
+ /**
+ * @desc Behavior function for NodeD (TC_GEONW_PON_GBC_AREA_ALL_BV_04)
+ */
+ function f_GEONW_PON_GBC_AREA_ALL_BV_04_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_receiveGeoBroadcast(
+ mw_longPosVectorPosition(v_longPosVectorNodeB),
+ ?) {
+ tc_noac.stop;
+ log("*** " & testcasename() & ": FAIL: GBC message retransmitted ***");
+ f_selfOrClientSyncAndVerdict(c_tbDone, e_error);
+ }
+ [] tc_noac.timeout {
+ log("*** " & testcasename() & ": PASS: GBC message not retransmitted ***");
+ f_selfOrClientSyncAndVerdict(c_tbDone, e_success);
+ }
+ }
+
+ // Postamble
+ f_poNeighbour();
+
+ } // End of function f_GEONW_PON_GBC_AREA_ALL_BV_04_nodeD
+
+ } // end GEONW_PON_GBC_AREA_ALL_BV_04
+
+ /**
+ * @desc TP Function for TC_GEONW_PON_GBC_AREA_ALL_BV_05
+ */
+ function f_GEONW_PON_GBC_AREA_ALL_BV_05() runs on ItsGeoNetworking {
+
+ // Local variables
+ var LongPosVector v_longPosVectorNodeB;
+ var template (value) GeoNetworkingPdu v_gnPacket;
+ var integer i;
+
+ // Test control
+ if (not PICS_GN_GBC_DST) {
+ log("*** " & testcasename() & ": PICS_GN_GBC_DST required for executing the TC ***");
+ setverdict(inconc);
+ stop;
+ }
+
+ // Test component configuration
+ f_cf01Up();
+ v_longPosVectorNodeB := f_getPosition(c_compNodeB);
+
+ // Test adapter configuration
+
+ // Preamble
+ f_prNeighbour();
+ f_selfOrClientSyncAndVerdict(c_prDone, e_success);
+
+ // Test Body
+ v_gnPacket := m_geoNwPdu(m_geoNwBroadcastPacket(
+ v_longPosVectorNodeB,
+ vc_localSeqNumber,
+ f_getGeoBroadcastArea(c_area1)
+ )
+ );
+ f_sendGeoNetMessage(m_geoNwReq_linkLayerBroadcast(v_gnPacket));
+
+ f_sleep(PX_TAC);
+
+ for(i:=0; i < lengthof(vc_utInds) and not match(vc_utInds[i].rawPayload, valueof(v_gnPacket.gnPacket.packet.payload)); 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);
+ }
+
+ // Postamble
+ f_poNeighbour();
+ f_cf01Down();
+
+ } // End of function f_GEONW_PON_GBC_AREA_ALL_BV_05
+
+ group GEONW_PON_GBC_AREA_ALL_BO_08 {
+
+ /**
+ * @desc TP Function for TC_GEONW_PON_GBC_AREA_ALL_BO_08
+ */
+ function f_GEONW_PON_GBC_AREA_ALL_BO_08() runs on ItsMtc {
+
+ // Local variables
+ var ItsGeoNetworking v_nodeB;
+ var ItsGeoNetworking v_nodeD;
+
+ // Test control
+ if (not PICS_GN_GBC_DST) {
+ log("*** " & testcasename() & ": PICS_GN_GBC_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_GBC_AREA_ALL_BO_08_nodeB());
+ v_nodeD.start(f_GEONW_PON_GBC_AREA_ALL_BO_08_nodeD());
+
+ // Synchronization
+ f_serverSync2ClientsAndStop({c_prDone, c_tbDone});
+
+ // Cleanup
+ f_cf02Down();
+
+ } // End of function f_GEONW_PON_GBC_AREA_ALL_BO_08
+
+ /**
+ * @desc Behavior function for NodeB (TC_GEONW_PON_GBC_AREA_ALL_BO_08)
+ */
+ function f_GEONW_PON_GBC_AREA_ALL_BO_08_nodeB() runs on ItsGeoNetworking {
+
+ // Local variables
+ var LongPosVector v_longPosVectorNodeB := f_getPosition(c_compNodeB);
+ var template (present) GeoNetworkingPdu v_gnPacket;
+ var integer i;
+
+ // Preamble
+ f_prNeighbour();
+ v_gnPacket := m_geoNwPdu(m_geoNwBroadcastPacket(
+ v_longPosVectorNodeB,
+ vc_localSeqNumber,
+ f_getGeoBroadcastArea(c_area1)
+ ),
+ -,
+ c_defaultHopLimit
+ );
+ f_sendGeoNetMessage(m_geoNwReq_linkLayerBroadcast(valueof(v_gnPacket)));
+
+ // IUT should also rebroadcast the packet. Get ready
+ 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() & ": INFO: GBC message rebroadcasted ***");
+ }
+ [] tc_ac.timeout {
+ log("*** " & testcasename() & ": INFO: GBC message not rebroadcasted ***");
+ }
+ }
+
+ f_sleep(PX_TAC);
+
+ for(i:=0; i < lengthof(vc_utInds) and not match(vc_utInds[i].rawPayload, valueof(v_gnPacket.gnPacket.packet.payload)); i:=i+1) {
+ // empty on purpose
+ }
+ if(i < lengthof(vc_utInds)) {
+ log("*** " & testcasename() & ": PASS: GN was transmitted to upper layer ***");
+ //flush received upper indications
+ 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
+ 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 of function f_GEONW_PON_GBC_AREA_ALL_BO_08_nodeB
+
+ /**
+ * @desc Behavior function for NodeD (TC_GEONW_PON_GBC_AREA_ALL_BO_08)
+ */
+ function f_GEONW_PON_GBC_AREA_ALL_BO_08_nodeD() runs on ItsGeoNetworking {
+
+ // Local variables
+ var LongPosVector v_longPosVectorNodeB := f_getPosition(c_compNodeB);
+ var GeoNetworkingInd v_msgInd;
+ var integer i;
+
+ // Preamble
+ f_prNeighbour();
+
+ // IUT should also rebroadcast the packet. Get ready
+ tc_ac.start;
+ alt {
+ [] geoNetworkingPort.receive(mw_geoNwInd(mw_geoNwPdu(mw_geoNwBroadcastPacketWithArea(
+ mw_longPosVectorPosition(v_longPosVectorNodeB),
+ ?,
+ f_getGeoBroadcastArea(c_area1)
+ )))) -> value v_msgInd {
+ tc_ac.stop;
+ log("*** " & testcasename() & ": INFO: Pre-conditions: GBC message rebroadcasted ***");
+ f_selfOrClientSyncAndVerdict(c_prDone, e_success);
+ }
+ [] tc_ac.timeout {
+ log("*** " & testcasename() & ": INFO: Pre-conditions: GBC message not rebroadcasted ***");
+ f_selfOrClientSyncAndVerdict(c_prDone, e_timeout);
+ }
+ }
+
+ // Test Body
+ v_msgInd.msgIn.basicHeader.routerHopLimit := valueof(v_msgInd.msgIn.basicHeader.routerHopLimit) / 2;
+ f_sendGeoNetMessage(m_geoNwReq_linkLayerBroadcast(v_msgInd.msgIn));
+ f_selfOrClientSyncAndVerdict(c_tbDone, e_success);
+
+ // Postamble
+ f_poNeighbour();
+
+ } // End of function f_GEONW_PON_GBC_AREA_ALL_BO_08_nodeD
+
+ } // end GEONW_PON_GBC_AREA_ALL_BO_08
+
+ } // end gbcAreaAllForwardingAlgorithm
+
+ group gbcAreaSimpleForwarding {
+
+ group GEONW_PON_GBC_AREA_SMP_BV_02 {
+
+ /**
+ * @desc TP Function for TC_GEONW_PON_GBC_AREA_SMP_BV_02
+ */
+ function f_GEONW_PON_GBC_AREA_SMP_BV_02() runs on ItsMtc {
+
+ // Local variables
+ var ItsGeoNetworking v_nodeB;
+ var ItsGeoNetworking v_nodeD;
+
+ // Test control
+ if (not PICS_GN_GBC_SRC) {
+ log("*** " & testcasename() & ": PICS_GN_GBC_SRC required for executing the TC ***");
+ setverdict(inconc);
+ stop;
+ }
+ if ((f_getAreaForwardingAlgorithm() != e_simple) and (f_getAreaForwardingAlgorithm() != e_unspecified)) {
+ log("*** " & testcasename() & ": PICS_GN_AREA_FORWARDING_ALGORITHM == ( e_simple or e_unspecified ) 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_GBC_AREA_SMP_BV_02_nodeB());
+ v_nodeD.start(f_GEONW_PON_GBC_AREA_SMP_BV_02_nodeD());
+
+ // Synchronization
+ f_serverSync2ClientsAndStop({c_prDone, c_tbDone});
+
+ // Cleanup
+ f_cf02Down();
+
+ } // End of function f_GEONW_PON_GBC_AREA_SMP_BV_02
+
+ /**
+ * @desc Behavior function for NodeB (TC_GEONW_PON_GBC_AREA_SMP_BV_02)
+ */
+ function f_GEONW_PON_GBC_AREA_SMP_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_geoNwBroadcastPacket(
+ v_longPosVectorNodeB,
+ vc_localSeqNumber,
+ f_getGeoBroadcastArea(c_area1)
+ )
+ )
+ )
+ );
+
+ tc_ac.start;
+ alt {
+ [] a_receiveGeoBroadcastWithArea(
+ mw_longPosVectorPosition(v_longPosVectorNodeB),
+ ?,
+ f_getGeoBroadcastArea(c_area1)) {
+ tc_ac.stop;
+ log("*** " & testcasename() & ": PASS: GBC message received correctly ***");
+ 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 of function f_GEONW_PON_GBC_AREA_SMP_BV_02_nodeB
+
+ /**
+ * @desc Behavior function for NodeD (TC_GEONW_PON_GBC_AREA_SMP_BV_02)
+ */
+ function f_GEONW_PON_GBC_AREA_SMP_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_ac.start;
+ alt {
+ [] a_receiveGeoBroadcastWithArea(
+ mw_longPosVectorPosition(v_longPosVectorNodeB),
+ ?,
+ f_getGeoBroadcastArea(c_area1)) {
+ tc_ac.stop;
+ log("*** " & testcasename() & ": PASS: GBC message received correctly ***");
+ 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 of function f_GEONW_PON_GBC_AREA_SMP_BV_02_nodeD
+
+ } // end GEONW_PON_GBC_AREA_SMP_BV_02
+
+ group GEONW_PON_GBC_AREA_SMP_BO_07 {
+
+ /**
+ * @desc TP Function for TC_GEONW_PON_GBC_AREA_SMP_BO_07
+ */
+ function f_GEONW_PON_GBC_AREA_SMP_BO_07() 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_getAreaForwardingAlgorithm() != e_simple) and (f_getAreaForwardingAlgorithm() != e_unspecified)) {
+ log("*** " & testcasename() & ": PICS_GN_AREA_FORWARDING_ALGORITHM == ( e_simple or e_unspecified ) 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_GBC_AREA_SMP_BO_07_nodeB());
+ v_nodeD.start(f_GEONW_PON_GBC_AREA_SMP_BO_07_nodeD());
+
+ // Synchronization
+ f_serverSync2ClientsAndStop({c_prDone, c_tbDone});
+
+ // Cleanup
+ f_cf02Down();
+
+ } // End of function f_GEONW_PON_GBC_BO_04
+
+ /**
+ * @desc Behavior function for NodeB (TC_GEONW_PON_GBC_AREA_SMP_BO_07)
+ */
+ function f_GEONW_PON_GBC_AREA_SMP_BO_07_nodeB() runs on ItsGeoNetworking {
+
+ // Local variables
+ var LongPosVector v_longPosVectorNodeB := f_getPosition(c_compNodeB);
+ var template (present) GeoNetworkingPdu v_gnPacket;
+
+ // Preamble
+ f_prNeighbour();
+ v_gnPacket := m_geoNwPdu(
+ m_geoNwBroadcastPacket(
+ v_longPosVectorNodeB,
+ vc_localSeqNumber,
+ f_getGeoBroadcastArea(c_area1)
+ ),
+ -,
+ c_defaultHopLimit
+ );
+ f_sendGeoNetMessage(m_geoNwReq_linkLayerBroadcast(valueof(v_gnPacket)));
+
+ 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: Pre-conditions: GBC message received correctly ***");
+ f_selfOrClientSyncAndVerdict(c_prDone, e_success);
+ }
+ [] tc_ac.timeout {
+ log("*** " & testcasename() & ": INCONC: Pre-conditions: GBC message not received ***");
+ f_selfOrClientSyncAndVerdict(c_prDone, e_timeout);
+ }
+ }
+
+ // Test Body
+ tc_noac.start;
+ alt {
+ [] a_receiveGeoBroadcast(
+ ?,
+ ?) {
+ tc_noac.stop;
+ log("*** " & testcasename() & ": FAIL: GBC message re-broadcasted ***");
+ f_selfOrClientSyncAndVerdict(c_tbDone, e_error);
+ }
+ [] tc_noac.timeout {
+ log("*** " & testcasename() & ": PASS: GBC message not re-broadcasted ***");
+ f_selfOrClientSyncAndVerdict(c_tbDone, e_success);
+ }
+ }
+
+ // Postamble
+ f_poNeighbour();
+
+ } // End of function f_GEONW_PON_GBC_AREA_SMP_BO_07_nodeB
+
+ /**
+ * @desc Behavior function for NodeD (TC_GEONW_PON_GBC_AREA_SMP_BO_07)
+ */
+ function f_GEONW_PON_GBC_AREA_SMP_BO_07_nodeD() runs on ItsGeoNetworking {
+
+ // Local variables
+ var LongPosVector v_longPosVectorNodeB := f_getPosition(c_compNodeB);
+ var GeoNetworkingInd v_msgInd;
+
+ // Preamble
+ f_prNeighbour();
+ tc_ac.start;
+ alt {
+ [] geoNetworkingPort.receive(mw_geoNwInd(mw_geoNwPdu(mw_geoNwBroadcastPacketWithArea(
+ mw_longPosVectorPosition(v_longPosVectorNodeB),
+ ?,
+ f_getGeoBroadcastArea(c_area1)
+ )))) -> value v_msgInd {
+ tc_ac.stop;
+ log("*** " & testcasename() & ": PASS: Pre-conditions: GBC message received correctly ***");
+ f_selfOrClientSyncAndVerdict(c_prDone, e_success);
+ }
+ [] tc_ac.timeout {
+ log("*** " & testcasename() & ": FAIL: Pre-conditions: GBC message not received ***");
+ f_selfOrClientSyncAndVerdict(c_prDone, e_error);
+ }
+ }
+
+ // Test Body
+ // send geoBroadcast for second time (same source + same seq Nr + lower RHL)
+ v_msgInd.msgIn.basicHeader.routerHopLimit := valueof(v_msgInd.msgIn.basicHeader.routerHopLimit) - 1;
+ f_sendGeoNetMessage(m_geoNwReq_linkLayerBroadcast(valueof(v_msgInd.msgIn)));
+
+ tc_noac.start;
+ alt {
+ [] a_receiveGeoBroadcast(
+ ?,
+ ?) {
+ tc_noac.stop;
+ log("*** " & testcasename() & ": FAIL: GBC message re-broadcasted ***");
+ f_selfOrClientSyncAndVerdict(c_tbDone, e_error);
+ }
+ [] tc_noac.timeout {
+ log("*** " & testcasename() & ": PASS: GBC message not re-broadcasted ***");
+ f_selfOrClientSyncAndVerdict(c_tbDone, e_success);
+ }
+ }
+
+ // Postamble
+ f_poNeighbour();
+
+ } // End of function f_GEONW_PON_GBC_AREA_SMP_BO_07_nodeD
+
+ } // end GEONW_PON_GBC_AREA_SMP_BO_07
+
+ } // end gbcAreaSimpleForwarding
+
+ group gbcAreaContentionBasedForwarding {
+
+ group GEONW_PON_GBC_AREA_CBF_BV_02 {
+
+ /**
+ * @desc TP Function for TC_GEONW_PON_GBC_AREA_CBF_BV_02
+ */
+ function f_GEONW_PON_GBC_AREA_CBF_BV_02() runs on ItsMtc {
+
+ // Local variables
+ var ItsGeoNetworking v_nodeB;
+ var ItsGeoNetworking v_nodeC;
+ 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_getAreaForwardingAlgorithm() != e_cbf) {
+ log("*** " & testcasename() & ": PICS_GN_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_GBC_AREA_CBF_BV_02_nodeB());
+ v_nodeC.start(f_GEONW_PON_GBC_AREA_CBF_BV_02_nodeC());
+ v_nodeD.start(f_GEONW_PON_GBC_AREA_CBF_BV_02_nodeD());
+
+ // Synchronization
+ f_serverSync3ClientsAndStop({c_prDone, c_tbDone});
+
+ // Cleanup
+ f_cf04Down();
+
+ } // End of function f_GEONW_PON_GBC_AREA_CBF_BV_02
+
+ /**
+ * @desc Behavior function for NodeB (TC_GEONW_PON_GBC_AREA_CBF_BV_02)
+ */
+ function f_GEONW_PON_GBC_AREA_CBF_BV_02_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_area1)
+ )))) {
+ tc_ac.stop;
+ log("*** " & testcasename() & ": PASS: GBC message broadcasted ***");
+ f_selfOrClientSyncAndVerdict(c_tbDone, e_success);
+ }
+ [] tc_ac.timeout {
+ log("*** " & testcasename() & ": FAIL: GBC message not broadcasted ***");
+ f_selfOrClientSyncAndVerdict(c_tbDone, e_error);
+ }
+ }
+
+ // Postamble
+ f_poNeighbour();
+
+ } // End of function f_GEONW_PON_GBC_AREA_CBF_BV_02_nodeB
+
+ /**
+ * @desc Behavior function for NodeC (TC_GEONW_PON_GBC_AREA_CBF_BV_02)
+ */
+ function f_GEONW_PON_GBC_AREA_CBF_BV_02_nodeC() runs on ItsGeoNetworking {
+
+ // Local variables
+ var LongPosVector v_longPosVectorNodeC := f_getPosition(c_compNodeC);
+ var LongPosVector v_longPosVectorIut := f_getPosition(c_compIut);
+ timer t_toCbf := (int2float(f_getCbfMaxTime())
+ + (
+ int2float(f_getCbfMinTime() - f_getCbfMaxTime())
+ / int2float(f_getCbfMaxCommunicationRange())
+ ) * f_distance(v_longPosVectorNodeC, 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_longPosVectorNodeC,
+ vc_localSeqNumber,
+ f_getGeoBroadcastArea(c_area1)
+ )
+ )
+ )
+ );
+
+ t_toCbf.start;
+ tc_ac.start;
+ alt {
+ [] geoNetworkingPort.receive(mw_geoNwInd(mw_geoNwPdu(mw_geoNwBroadcastPacketWithArea(
+ mw_longPosVectorPosition(v_longPosVectorNodeC),
+ ?,
+ 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 of function f_GEONW_PON_GBC_AREA_CBF_BV_02_nodeC
+
+ /**
+ * @desc Behavior function for NodeD (TC_GEONW_PON_GBC_AREA_CBF_BV_02)
+ */
+ function f_GEONW_PON_GBC_AREA_CBF_BV_02_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_area1)
+ )))) {
+ tc_ac.stop;
+ log("*** " & testcasename() & ": PASS: GBC message broadcasted ***");
+ f_selfOrClientSyncAndVerdict(c_tbDone, e_success);
+ }
+ [] tc_ac.timeout {
+ log("*** " & testcasename() & ": FAIL: GBC message not broadcasted ***");
+ f_selfOrClientSyncAndVerdict(c_tbDone, e_error);
+ }
+ }
+
+ // Postamble
+ f_poNeighbour();
+
+ } // End of function f_GEONW_PON_GBC_AREA_CBF_BV_02_nodeD
+
+ } // end GEONW_PON_GBC_AREA_CBF_BV_02
+
+ group GEONW_PON_GBC_AREA_CBF_BV_07 {
+
+ /**
+ * @desc TP Function for TC_GEONW_PON_GBC_AREA_CBF_BV_07
+ */
+ function f_GEONW_PON_GBC_AREA_CBF_BV_07() runs on ItsMtc {
+
+ // Local variables
+ var ItsGeoNetworking v_nodeB;
+ var ItsGeoNetworking v_nodeC;
+ var ItsGeoNetworking v_nodeD;
+ var UInt16 v_sequenceNumberC := f_getInitialSequenceNumber();
+
+ // Test control
+ if (not PICS_GN_GBC_FWD) {
+ log("*** " & testcasename() & ": PICS_GN_GBC_FWD required for executing the TC ***");
+ setverdict(inconc);
+ stop;
+ }
+ if (f_getAreaForwardingAlgorithm() != e_cbf) {
+ log("*** " & testcasename() & ": PICS_GN_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_GBC_AREA_CBF_BV_07_nodeB());
+ v_nodeC.start(f_GEONW_PON_GBC_AREA_CBF_BV_07_nodeC(v_sequenceNumberC));
+ v_nodeD.start(f_GEONW_PON_GBC_AREA_CBF_BV_07_nodeD(v_sequenceNumberC));
+
+ // Synchronization
+ f_serverSync3ClientsAndStop({c_prDone, c_tbDone});
+
+ // Cleanup
+ f_cf04Down();
+
+ } // End of function f_GEONW_PON_BCA_BV_01
+
+ /**
+ * @desc Behavior function for NodeB (TC_GEONW_PON_GBC_AREA_CBF_BV_07)
+ */
+ function f_GEONW_PON_GBC_AREA_CBF_BV_07_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_noac.start;
+ alt {
+ [] geoNetworkingPort.receive(mw_geoNwInd(mw_geoNwPdu(mw_geoNwBroadcastPacketWithArea(
+ mw_longPosVectorPosition(v_longPosVectorNodeC),
+ ?,
+ f_getGeoBroadcastArea(c_area1)
+ )))) {
+ tc_noac.stop;
+ log("*** " & testcasename() & ": FAIL: GBC message re-broadcasted ***");
+ f_selfOrClientSyncAndVerdict(c_tbDone, e_error);
+ }
+ [] tc_noac.timeout {
+ log("*** " & testcasename() & ": PASS: GBC message not re-broadcasted ***");
+ f_selfOrClientSyncAndVerdict(c_tbDone, e_success);
+ }
+ }
+
+ // Postamble
+ f_poNeighbour();
+
+ } // End of function f_GEONW_PON_GBC_AREA_CBF_BV_07_nodeB
+
+ /**
+ * @desc Behavior function for NodeC (TC_GEONW_PON_GBC_AREA_CBF_BV_07)
+ */
+ function f_GEONW_PON_GBC_AREA_CBF_BV_07_nodeC(in UInt16 p_sequenceNumberC) runs on ItsGeoNetworking {
+
+ // Local variables
+ var LongPosVector v_longPosVectorNodeC := f_getPosition(c_compNodeC);
+
+ // Preamble
+ f_prNeighbour();
+ f_sendGeoNetMessage(
+ m_geoNwReq_linkLayerBroadcast(
+ m_geoNwPdu(
+ m_geoNwBroadcastPacket(
+ v_longPosVectorNodeC,
+ p_sequenceNumberC,
+ f_getGeoBroadcastArea(c_area1)
+ )
+ )
+ )
+ );
+ f_selfOrClientSyncAndVerdict(c_prDone, e_success);
+
+ // Test Body
+ tc_noac.start;
+ alt {
+ [] geoNetworkingPort.receive(mw_geoNwInd(mw_geoNwPdu(mw_geoNwBroadcastPacketWithArea(
+ mw_longPosVectorPosition(v_longPosVectorNodeC),
+ ?,
+ f_getGeoBroadcastArea(c_area1)
+ )))) {
+ tc_noac.stop;
+ log("*** " & testcasename() & ": FAIL: GBC message re-broadcasted ***");
+ f_selfOrClientSyncAndVerdict(c_tbDone, e_error);
+ }
+ [] tc_noac.timeout {
+ log("*** " & testcasename() & ": PASS: GBC message not re-broadcasted ***");
+ f_selfOrClientSyncAndVerdict(c_tbDone, e_success);
+ }
+ }
+
+ // Postamble
+ f_poNeighbour();
+
+ } // End of function f_GEONW_PON_GBC_AREA_CBF_BV_07_nodeC
+
+ /**
+ * @desc Behavior function for NodeD (TC_GEONW_PON_GBC_AREA_CBF_BV_07)
+ */
+ function f_GEONW_PON_GBC_AREA_CBF_BV_07_nodeD(in UInt16 p_sequenceNumberC) runs on ItsGeoNetworking {
+
+ // Local variables
+ var LongPosVector v_longPosVectorNodeC := f_getPosition(c_compNodeC);
+
+ // Preamble
+ f_prNeighbour();
+ f_selfOrClientSyncAndVerdict(c_prDone, e_success);
+
+ // Test Body
+ f_sendGeoNetMessage(
+ m_geoNwReq_linkLayerBroadcast(
+ m_geoNwPdu(
+ m_geoNwBroadcastPacket(
+ v_longPosVectorNodeC,
+ p_sequenceNumberC,
+ f_getGeoBroadcastArea(c_area1)
+ )
+ )
+ )
+ );
+
+ tc_noac.start;
+ alt {
+ [] geoNetworkingPort.receive(mw_geoNwInd(mw_geoNwPdu(mw_geoNwBroadcastPacketWithArea(
+ mw_longPosVectorPosition(v_longPosVectorNodeC),
+ ?,
+ f_getGeoBroadcastArea(c_area1)
+ )))) {
+ tc_noac.stop;
+ log("*** " & testcasename() & ": FAIL: GBC message re-broadcasted ***");
+ f_selfOrClientSyncAndVerdict(c_tbDone, e_error);
+ }
+ [] tc_noac.timeout {
+ log("*** " & testcasename() & ": PASS: GBC message not re-broadcasted ***");
+ f_selfOrClientSyncAndVerdict(c_tbDone, e_success);
+ }
+ }
+
+ // Postamble
+ f_poNeighbour();
+
+ } // End of function f_GEONW_PON_GBC_AREA_CBF_BV_071_nodeD
+
+ } // end GEONW_PON_GBC_AREA_CBF_BV_07
+
+ group GEONW_PON_GBC_AREA_CBF_BV_21 {
+
+ /**
+ * @desc TP Function for TC_GEONW_PON_GBC_AREA_CBF_BV_21
+ */
+ function f_GEONW_PON_GBC_AREA_CBF_BV_21() runs on ItsMtc {
+
+ // Local variables
+ var ItsGeoNetworking v_nodeB;
+ var ItsGeoNetworking v_nodeC;
+ 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_getAreaForwardingAlgorithm() != e_cbf) {
+ log("*** " & testcasename() & ": PICS_GN_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_GBC_AREA_CBF_BV_21_nodeB());
+ v_nodeC.start(f_GEONW_PON_GBC_AREA_CBF_BV_21_nodeC());
+ v_nodeD.start(f_GEONW_PON_GBC_AREA_CBF_BV_21_nodeD());
+
+ // Synchronization
+ f_serverSync3ClientsAndStop({c_prDone, c_tbDone});
+
+ // Cleanup
+ f_cf04Down();
+
+ } // End of function f_GEONW_PON_GBC_AREA_CBF_BV_21
+
+ /**
+ * @desc Behavior function for NodeB (TC_GEONW_PON_GBC_AREA_CBF_BV_21)
+ */
+ function f_GEONW_PON_GBC_AREA_CBF_BV_21_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_area1)
+ )))) {
+ tc_ac.stop;
+ log("*** " & testcasename() & ": PASS: GBC message broadcasted ***");
+ f_selfOrClientSyncAndVerdict(c_tbDone, e_success);
+ }
+ [] tc_ac.timeout {
+ log("*** " & testcasename() & ": FAIL: GBC message not broadcasted ***");
+ f_selfOrClientSyncAndVerdict(c_tbDone, e_error);
+ }
+ }
+
+ // Postamble
+ f_poNeighbour();
+
+ } // End of function f_GEONW_PON_GBC_AREA_CBF_BV_21_nodeB
+
+ /**
+ * @desc Behavior function for NodeC (TC_GEONW_PON_GBC_AREA_CBF_BV_21)
+ */
+ function f_GEONW_PON_GBC_AREA_CBF_BV_21_nodeC() 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_area1)
+ )))) {
+ tc_ac.stop;
+ log("*** " & testcasename() & ": PASS: GBC message broadcasted ***");
+ f_selfOrClientSyncAndVerdict(c_tbDone, e_success);
+ }
+ [] tc_ac.timeout {
+ log("*** " & testcasename() & ": FAIL: GBC message not broadcasted ***");
+ f_selfOrClientSyncAndVerdict(c_tbDone, e_error);
+ }
+ }
+
+ // Postamble
+ f_poNeighbour();
+
+ } // End of function f_GEONW_PON_GBC_AREA_CBF_BV_21_nodeC
+
+ /**
+ * @desc Behavior function for NodeD (TC_GEONW_PON_GBC_AREA_CBF_BV_21)
+ */
+ function f_GEONW_PON_GBC_AREA_CBF_BV_21_nodeD() runs on ItsGeoNetworking {
+
+ // Local variables
+ var LongPosVector v_longPosVectorNodeC := f_getPosition(c_compNodeC);
+ timer t_toCbf := int2float(f_getCbfMaxTime()) * 0.95 / 1000.0;
+
+ // Preamble
+ f_prNonNeighbour();
+ f_selfOrClientSyncAndVerdict(c_prDone, e_success);
+
+ // Test Body
+ f_sendGeoNetMessage(
+ m_geoNwReq_linkLayerBroadcast(
+ m_geoNwPdu(
+ m_geoNwBroadcastPacket(
+ v_longPosVectorNodeC,
+ vc_localSeqNumber,
+ f_getGeoBroadcastArea(c_area1)
+ )
+ )
+ )
+ );
+
+ t_toCbf.start;
+ tc_ac.start;
+ alt {
+ [] geoNetworkingPort.receive(mw_geoNwInd(mw_geoNwPdu(mw_geoNwBroadcastPacketWithArea(
+ mw_longPosVectorPosition(v_longPosVectorNodeC),
+ ?,
+ 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_poDefault();
+
+ } // End of function f_GEONW_PON_GBC_AREA_CBF_BV_21_nodeD
+
+ } // end GEONW_PON_GBC_AREA_CBF_BV_21
+
+ group GEONW_PON_GBC_AREA_CBF_BV_22 {
+
+ /**
+ * @desc TP Function for TC_GEONW_PON_GBC_AREA_CBF_BV_22
+ */
+ function f_GEONW_PON_GBC_AREA_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_GBC_FWD) {
+ log("*** " & testcasename() & ": PICS_GN_GBC_FWD required for executing the TC ***");
+ setverdict(inconc);
+ stop;
+ }
+ if (f_getAreaForwardingAlgorithm() != e_cbf) {
+ log("*** " & testcasename() & ": PICS_GN_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_GBC_AREA_CBF_BV_22_nodeB());
+ v_nodeC.start(f_GEONW_PON_GBC_AREA_CBF_BV_22_nodeC());
+ v_nodeD.start(f_GEONW_PON_GBC_AREA_CBF_BV_22_nodeD());
+
+ // Synchronization
+ f_serverSync3ClientsAndStop({c_prDone, c_tbDone});
+
+ // Cleanup
+ f_cf04Down();
+
+ } // End of function f_GEONW_PON_GBC_AREA_CBF_BV_22
+
+ /**
+ * @desc Behavior function for NodeB (TC_GEONW_PON_GBC_AREA_CBF_BV_22)
+ */
+ function f_GEONW_PON_GBC_AREA_CBF_BV_22_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_area1)
+ )))) {
+ tc_ac.stop;
+ log("*** " & testcasename() & ": PASS: GBC message broadcasted ***");
+ f_selfOrClientSyncAndVerdict(c_tbDone, e_success);
+ }
+ [] tc_ac.timeout {
+ log("*** " & testcasename() & ": FAIL: GBC message not broadcasted ***");
+ f_selfOrClientSyncAndVerdict(c_tbDone, e_error);
+ }
+ }
+
+ // Postamble
+ f_poNeighbour();
+
+ } // End of function f_GEONW_PON_GBC_AREA_CBF_BV_22_nodeB
+
+ /**
+ * @desc Behavior function for NodeC (TC_GEONW_PON_GBC_AREA_CBF_BV_22)
+ */
+ function f_GEONW_PON_GBC_AREA_CBF_BV_22_nodeC() 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_area1)
+ )))) {
+ tc_ac.stop;
+ log("*** " & testcasename() & ": PASS: GBC message broadcasted ***");
+ f_selfOrClientSyncAndVerdict(c_tbDone, e_success);
+ }
+ [] tc_ac.timeout {
+ log("*** " & testcasename() & ": FAIL: GBC message not broadcasted ***");
+ f_selfOrClientSyncAndVerdict(c_tbDone, e_error);
+ }
+ }
+
+ // Postamble
+ f_poNeighbour();
+
+ } // End of function f_GEONW_PON_GBC_AREA_CBF_BV_22_nodeC
+
+ /**
+ * @desc Behavior function for NodeD (TC_GEONW_PON_GBC_AREA_CBF_BV_22)
+ */
+ function f_GEONW_PON_GBC_AREA_CBF_BV_22_nodeD() runs on ItsGeoNetworking {
+
+ // Local variables
+ var LongPosVector v_longPosVectorNodeC := f_getPosition(c_compNodeC);
+ var LongPosVector v_longPosVectorNodeD := f_getPosition(c_compNodeD);
+ timer t_toCbf := int2float(f_getCbfMaxTime()) * 0.95 / 1000.0;
+
+ // Preamble
+ v_longPosVectorNodeD.pai := int2bit(0,1);
+ f_changePositon(c_compNodeD, v_longPosVectorNodeD);
+ f_prNeighbour();
+ f_selfOrClientSyncAndVerdict(c_prDone, e_success);
+
+ // Test Body
+ f_sendGeoNetMessage(
+ m_geoNwReq_linkLayerBroadcast(
+ m_geoNwPdu(
+ m_geoNwBroadcastPacket(
+ v_longPosVectorNodeC,
+ vc_localSeqNumber,
+ f_getGeoBroadcastArea(c_area1)
+ )
+ )
+ )
+ );
+
+ t_toCbf.start;
+ tc_ac.start;
+ alt {
+ [] geoNetworkingPort.receive(mw_geoNwInd(mw_geoNwPdu(mw_geoNwBroadcastPacketWithArea(
+ mw_longPosVectorPosition(v_longPosVectorNodeC),
+ ?,
+ 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_poDefault();
+
+ } // End of function f_GEONW_PON_GBC_AREA_CBF_BV_22_nodeD
+
+ } // end GEONW_PON_GBC_AREA_CBF_BV_22
+
+ } // end gbcAreaContentionBasedForwarding
+
+ group gbcAreaAdvancedForwarding {
+
+ group GEONW_PON_GBC_AREA_ADV_BV_21 {
+
+ /**
+ * @desc TP Function for TC_GEONW_PON_GBC_AREA_ADV_BV_21
+ */
+ function f_GEONW_PON_GBC_AREA_ADV_BV_21() runs on ItsMtc {
+
+ // Local variables
+ var ItsGeoNetworking v_nodeB;
+ var ItsGeoNetworking v_nodeE;
+
+ // Test control
+ if (not PICS_GN_GBC_FWD) {
+ log("*** " & testcasename() & ": PICS_GN_GBC_FWD required for executing the TC ***");
+ setverdict(inconc);
+ stop;
+ }
+ if (f_getAreaForwardingAlgorithm() != e_advanced) {
+ log("*** " & testcasename() & ": PICS_GN_AREA_FORWARDING_ALGORITHM == e_advanced 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_cf05Up();
+
+ // Preamble
+
+ // Start components
+ v_nodeB := f_getComponent(c_compNodeB);
+ v_nodeE := f_getComponent(c_compNodeE);
+ v_nodeB.start(f_GEONW_PON_GBC_AREA_ADV_BV_21_nodeB());
+ v_nodeE.start(f_GEONW_PON_GBC_AREA_ADV_BV_21_nodeE());
+
+ // Synchronization
+ f_serverSync2ClientsAndStop({c_prDone, c_tbDone});
+
+ // Cleanup
+ f_cf05Down();
+
+ } // End of function f_GEONW_PON_GBC_AREA_ADV_BV_21
+
+ /**
+ * @desc Behavior function for NodeB (TC_GEONW_PON_GBC_AREA_ADV_BV_21)
+ */
+ function f_GEONW_PON_GBC_AREA_ADV_BV_21_nodeB() runs on ItsGeoNetworking {
+
+ // Local variables
+ var LongPosVector v_longPosVectorNodeB := f_getPosition(c_compNodeB);
+ timer t_toCbf := int2float(f_getCbfMaxTime()) * 0.95 / 1000.0;
+
+ // Preamble
+ f_prNeighbour();
+ f_selfOrClientSyncAndVerdict(c_prDone, e_success);
+
+ // Test Body
+ 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: Expected message not received ***");
+ f_selfOrClientSyncAndVerdict(c_tbDone, e_error);
+ }
+ }
+
+ // Postamble
+ f_poNeighbour();
+
+ } // End of function f_GEONW_PON_GBC_AREA_ADV_BV_21_nodeB
+
+ /**
+ * @desc Behavior function for NodeE (TC_GEONW_PON_GBC_AREA_ADV_BV_21)
+ */
+ function f_GEONW_PON_GBC_AREA_ADV_BV_21_nodeE() runs on ItsGeoNetworking {
+
+ // Local variables
+ var LongPosVector v_longPosVectorNodeB := f_getPosition(c_compNodeB);
+ timer t_toCbf := int2float(f_getCbfMaxTime()) * 0.95 / 1000.0;
+
+ // Preamble
+ f_prNonNeighbour();
+ 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: Expected message not received ***");
+ f_selfOrClientSyncAndVerdict(c_tbDone, e_error);
+ }
+ }
+
+ // Postamble
+ f_poNeighbour();
+
+ } // End of function f_GEONW_PON_GBC_AREA_ADV_BV_21_nodeE
+
+ } // end GEONW_PON_GBC_AREA_ADV_BV_21
+
+ group GEONW_PON_GBC_AREA_ADV_BV_23 {
+
+ /**
+ * @desc TP Function for TC_GEONW_PON_GBC_AREA_ADV_BV_23
+ */
+ function f_GEONW_PON_GBC_AREA_ADV_BV_23() runs on ItsMtc {
+
+ // Local variables
+ var ItsGeoNetworking v_nodeB;
+ var ItsGeoNetworking v_nodeF;
+
+ // Test control
+ if (not PICS_GN_GBC_FWD) {
+ log("*** " & testcasename() & ": PICS_GN_GBC_FWD required for executing the TC ***");
+ setverdict(inconc);
+ stop;
+ }
+ if (f_getAreaForwardingAlgorithm() != e_advanced) {
+ log("*** " & testcasename() & ": PICS_GN_AREA_FORWARDING_ALGORITHM == e_advanced 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_cf06Up();
+
+ // Preamble
+
+ // Start components
+ v_nodeB := f_getComponent(c_compNodeB);
+ v_nodeF := f_getComponent(c_compNodeF);
+ v_nodeB.start(f_GEONW_PON_GBC_AREA_ADV_BV_23_nodeB());
+ v_nodeF.start(f_GEONW_PON_GBC_AREA_ADV_BV_23_nodeF());
+
+ // Synchronization
+ f_serverSync2ClientsAndStop({c_prDone, c_tbDone});
+
+ // Cleanup
+ f_cf06Down();
+
+ } // End of function f_GEONW_PON_GBC_AREA_ADV_BV_23
+
+ /**
+ * @desc Behavior function for NodeB (TC_GEONW_PON_GBC_AREA_ADV_BV_23)
+ */
+ function f_GEONW_PON_GBC_AREA_ADV_BV_23_nodeB() runs on ItsGeoNetworking {
+
+ // Local variables
+
+ // Preamble
+ f_prNeighbour();
+ f_selfOrClientSyncAndVerdict(c_prDone, e_success);
+
+ // Test Body
+ tc_noac.start;
+ alt {
+ [] geoNetworkingPort.receive(mw_geoNwInd(mw_geoNwPdu(?))) {
+ tc_noac.stop;
+ log("*** " & testcasename() & ": FAIL: Message not discarded ***");
+ f_selfOrClientSyncAndVerdict(c_tbDone, e_error);
+ }
+ [] tc_noac.timeout {
+ log("*** " & testcasename() & ": PASS: No message received ***");
+ f_selfOrClientSyncAndVerdict(c_tbDone, e_success);
+ }
+ }
+
+ // Postamble
+ f_poNeighbour();
+
+ } // End of function f_GEONW_PON_GBC_AREA_ADV_BV_23_nodeB
+
+ /**
+ * @desc Behavior function for NodeF (TC_GEONW_PON_GBC_AREA_ADV_BV_23)
+ */
+ function f_GEONW_PON_GBC_AREA_ADV_BV_23_nodeF() runs on ItsGeoNetworking {
+
+ // Local variables
+ var integer i;
+ var template (value) GeoNetworkingPdu v_gnPacket;
+ var LongPosVector v_longPosVectorNodeB := f_getPosition(c_compNodeB);
+
+ // Preamble
+ f_prNeighbour();
+ v_gnPacket := m_geoNwPdu(m_geoNwBroadcastPacket(
+ v_longPosVectorNodeB,
+ vc_localSeqNumber,
+ f_getGeoBroadcastArea(c_area1)
+ )
+ );
+ f_sendGeoNetMessage(m_geoNwReq_linkLayerBroadcast(v_gnPacket));
+ f_selfOrClientSyncAndVerdict(c_prDone, e_success);
+
+ // Test Body
+ for(i:=1; i < f_getAdvancedGbcForwardingMaxCounter(); i:=i+1) {
+ f_sendGeoNetMessage(m_geoNwReq_linkLayerBroadcast(v_gnPacket));
+ f_sleepIgnoreDef(0.5);
+ }
+ tc_noac.start;
+ alt {
+ [] geoNetworkingPort.receive(mw_geoNwInd(mw_geoNwPdu(?))) {
+ tc_noac.stop;
+ log("*** " & testcasename() & ": FAIL: Message not discarded ***");
+ f_selfOrClientSyncAndVerdict(c_tbDone, e_error);
+ }
+ [] tc_noac.timeout {
+ log("*** " & testcasename() & ": PASS: No message received ***");
+ f_selfOrClientSyncAndVerdict(c_tbDone, e_success);
+ }
+ }
+
+ // Postamble
+ f_poNeighbour();
+
+ } // End of function f_GEONW_PON_GBC_AREA_ADV_BV_23_nodeF
+
+ } // end GEONW_PON_GBC_AREA_ADV_BV_23
+
+ group GEONW_PON_GBC_AREA_ADV_BV_24 {
+
+ /**
+ * @desc TP Function for TC_GEONW_PON_GBC_AREA_ADV_BV_24
+ */
+ function f_GEONW_PON_GBC_AREA_ADV_BV_24() runs on ItsMtc {
+
+ // Local variables
+ var ItsGeoNetworking v_nodeB;
+ var ItsGeoNetworking v_nodeE;
+
+ // Test control
+ if (not PICS_GN_GBC_FWD) {
+ log("*** " & testcasename() & ": PICS_GN_GBC_FWD required for executing the TC ***");
+ setverdict(inconc);
+ stop;
+ }
+ if (f_getAreaForwardingAlgorithm() != e_advanced) {
+ log("*** " & testcasename() & ": PICS_GN_AREA_FORWARDING_ALGORITHM == e_advanced 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_cf05Up();
+
+ // Preamble
+
+ // Start components
+ v_nodeB := f_getComponent(c_compNodeB);
+ v_nodeE := f_getComponent(c_compNodeE);
+ v_nodeB.start(f_GEONW_PON_GBC_AREA_ADV_BV_24_nodeB());
+ v_nodeE.start(f_GEONW_PON_GBC_AREA_ADV_BV_24_nodeE());
+
+ // Synchronization
+ f_serverSync2ClientsAndStop({c_prDone, c_tbDone});
+
+ // Cleanup
+ f_cf05Down();
+
+ } // End of function f_GEONW_PON_GBC_AREA_ADV_BV_24
+
+ /**
+ * @desc Behavior function for NodeB (TC_GEONW_PON_GBC_AREA_ADV_BV_24)
+ */
+ function f_GEONW_PON_GBC_AREA_ADV_BV_24_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_noac.start;
+ alt {
+ [] geoNetworkingPort.receive(mw_geoNwInd(mw_geoNwPdu(?))) {
+ tc_noac.stop;
+ log("*** " & testcasename() & ": FAIL: Message not discarded ***");
+ f_selfOrClientSyncAndVerdict(c_tbDone, e_error);
+ }
+ [] tc_noac.timeout {
+ log("*** " & testcasename() & ": PASS: No message received ***");
+ f_selfOrClientSyncAndVerdict(c_tbDone, e_success);
+ }
+ }
+
+ // Postamble
+ f_poNeighbour();
+
+ } // End of function f_GEONW_PON_GBC_AREA_ADV_BV_24_nodeB
+
+ /**
+ * @desc Behavior function for NodeE (TC_GEONW_PON_GBC_AREA_ADV_BV_24)
+ */
+ function f_GEONW_PON_GBC_AREA_ADV_BV_24_nodeE() 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_geoNwBroadcastPacket(
+ v_longPosVectorNodeB,
+ 0,
+ f_getGeoBroadcastArea(c_area1)
+ )
+ )
+ ));
+ tc_noac.start;
+ alt {
+ [] geoNetworkingPort.receive (mw_geoNwInd(mw_geoNwPdu(?))){
+ tc_noac.stop;
+ log("*** " & testcasename() & ": FAIL: Message not discarded ***");
+ f_selfOrClientSyncAndVerdict(c_tbDone, e_error);
+ }
+ [] tc_noac.timeout {
+ log("*** " & testcasename() & ": PASS: No message received ***");
+ f_selfOrClientSyncAndVerdict(c_tbDone, e_success);
+ }
+ }
+
+ // Postamble
+ f_poNeighbour();
+
+ } // End of function f_GEONW_PON_GBC_AREA_ADV_BV_24_nodeE
+
+ } // end GEONW_PON_GBC_AREA_ADV_BV_24
+
+ group GEONW_PON_GBC_AREA_ADV_BV_25 {
+
+ /**
+ * @desc TP Function for TC_GEONW_PON_GBC_AREA_ADV_BV_25
+ */
+ function f_GEONW_PON_GBC_AREA_ADV_BV_25() runs on ItsMtc {
+
+ // Local variables
+ var ItsGeoNetworking v_nodeB;
+ var ItsGeoNetworking v_nodeF;
+
+ // Test control
+ if (not PICS_GN_GBC_FWD) {
+ log("*** " & testcasename() & ": PICS_GN_GBC_FWD required for executing the TC ***");
+ setverdict(inconc);
+ stop;
+ }
+ if (f_getAreaForwardingAlgorithm() != e_advanced) {
+ log("*** " & testcasename() & ": PICS_GN_AREA_FORWARDING_ALGORITHM == e_advanced 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_cf06Up();
+
+ // Preamble
+
+ // Start components
+ v_nodeB := f_getComponent(c_compNodeB);
+ v_nodeF := f_getComponent(c_compNodeF);
+ v_nodeB.start(f_GEONW_PON_GBC_AREA_ADV_BV_25_nodeB());
+ v_nodeF.start(f_GEONW_PON_GBC_AREA_ADV_BV_25_nodeF());
+
+ // Synchronization
+ f_serverSync2ClientsAndStop({c_prDone, c_tbDone});
+
+ // Cleanup
+ f_cf06Down();
+
+ } // End of function f_GEONW_PON_GBC_AREA_ADV_BV_25
+
+ /**
+ * @desc Behavior function for NodeB (TC_GEONW_PON_GBC_AREA_ADV_BV_25)
+ */
+ function f_GEONW_PON_GBC_AREA_ADV_BV_25_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 of function f_GEONW_PON_GBC_AREA_ADV_BV_25_nodeB
+
+ /**
+ * @desc Behavior function for NodeF (TC_GEONW_PON_GBC_AREA_ADV_BV_25)
+ */
+ function f_GEONW_PON_GBC_AREA_ADV_BV_25_nodeF() runs on ItsGeoNetworking {
+
+ // Local variables
+ var LongPosVector v_longPosVectorNodeB := f_getPosition(c_compNodeB);
+ var LongPosVector v_longPosVectorNodeF := f_getPosition(c_compNodeF);
+ var LongPosVector v_longPosVectorIut := f_getPosition(c_compIut);
+ timer t_toCbf := (int2float(f_getCbfMaxTime())
+ + (
+ int2float(f_getCbfMinTime() - f_getCbfMaxTime())
+ / int2float(f_getCbfMaxCommunicationRange())
+ ) * f_distance(v_longPosVectorNodeF, 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 of function f_GEONW_PON_GBC_AREA_ADV_BV_25_nodeF
+
+ } // end GEONW_PON_GBC_AREA_ADV_BV_25
+
+ group GEONW_PON_GBC_AREA_ADV_BV_26 {
+
+ /**
+ * @desc TP Function for TC_GEONW_PON_GBC_AREA_ADV_BV_26
+ */
+ function f_GEONW_PON_GBC_AREA_ADV_BV_26() 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_getAreaForwardingAlgorithm() != e_advanced) {
+ log("*** " & testcasename() & ": PICS_GN_AREA_FORWARDING_ALGORITHM == e_advanced 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_cf07Up();
+
+ // Preamble
+
+ // Start components
+ v_nodeB := f_getComponent(c_compNodeB);
+ v_nodeD := f_getComponent(c_compNodeD);
+ v_nodeB.start(f_GEONW_PON_GBC_AREA_ADV_BV_26_nodeB());
+ v_nodeD.start(f_GEONW_PON_GBC_AREA_ADV_BV_26_nodeD());
+
+ // Synchronization
+ f_serverSync2ClientsAndStop({c_prDone, c_tbDone});
+
+ // Cleanup
+ f_cf06Down();
+
+ } // End of function f_GEONW_PON_GBC_AREA_ADV_BV_26
+
+ /**
+ * @desc Behavior function for NodeB (TC_GEONW_PON_GBC_AREA_ADV_BV_26)
+ */
+ function f_GEONW_PON_GBC_AREA_ADV_BV_26_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 of function f_GEONW_PON_GBC_AREA_ADV_BV_26_nodeB
+
+ /**
+ * @desc Behavior function for NodeD (TC_GEONW_PON_GBC_AREA_ADV_BV_26)
+ */
+ function f_GEONW_PON_GBC_AREA_ADV_BV_26_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_getCbfMaxTime())
+ + (
+ int2float(f_getCbfMinTime() - f_getCbfMaxTime())
+ / 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 of function f_GEONW_PON_GBC_AREA_ADV_BV_26_nodeD
+
+ } // end GEONW_PON_GBC_AREA_ADV_BV_26
+
+
+ group GEONW_PON_GBC_AREA_ADV_BV_27 {
+
+ /**
+ * @desc TP Function for TC_GEONW_PON_GBC_AREA_ADV_BV_27
+ */
+ function f_GEONW_PON_GBC_AREA_ADV_BV_27() runs on ItsMtc {
+
+ // Local variables
+ var ItsGeoNetworking v_nodeB;
+ var ItsGeoNetworking v_nodeE;
+
+ // Test control
+ if (not PICS_GN_GBC_FWD) {
+ log("*** " & testcasename() & ": PICS_GN_GBC_FWD required for executing the TC ***");
+ setverdict(inconc);
+ stop;
+ }
+ if (f_getAreaForwardingAlgorithm() != e_advanced) {
+ log("*** " & testcasename() & ": PICS_GN_AREA_FORWARDING_ALGORITHM == e_advanced 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_cf05Up();
+
+ // Preamble
+
+ // Start components
+ v_nodeB := f_getComponent(c_compNodeB);
+ v_nodeE := f_getComponent(c_compNodeE);
+ v_nodeB.start(f_GEONW_PON_GBC_AREA_ADV_BV_27_nodeB());
+ v_nodeE.start(f_GEONW_PON_GBC_AREA_ADV_BV_27_nodeE());
+
+ // Synchronization
+ f_serverSync2ClientsAndStop({c_prDone, c_tbDone});
+
+ // Cleanup
+ f_cf05Down();
+
+ } // End of function f_GEONW_PON_GBC_AREA_ADV_BV_27
+
+ /**
+ * @desc Behavior function for NodeB (TC_GEONW_PON_GBC_AREA_ADV_BV_27)
+ */
+ function f_GEONW_PON_GBC_AREA_ADV_BV_27_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_geoNwBroadcastPacketWithArea(
+ mw_longPosVectorPosition(v_longPosVectorNodeA),
+ ?,
+ f_getGeoBroadcastArea(c_area1)
+ )))) {
+ 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 of function f_GEONW_PON_GBC_AREA_ADV_BV_27_nodeB
+
+ /**
+ * @desc Behavior function for NodeE (TC_GEONW_PON_GBC_AREA_ADV_BV_27)
+ */
+ function f_GEONW_PON_GBC_AREA_ADV_BV_27_nodeE() runs on ItsGeoNetworking {
+
+ // Local variables
+ var LongPosVector v_longPosVectorNodeA := f_getPosition(c_compNodeA);
+
+ // Preamble
+ f_prNeighbour();
+ f_selfOrClientSyncAndVerdict(c_prDone, e_success);
+
+ // Test Body
+ f_sendGeoNetMessage(
+ m_geoNwReq_withLinkLayerDestination(
+ m_geoNwPdu(m_geoNwBroadcastPacket(
+ v_longPosVectorNodeA,
+ 0,
+ f_getGeoBroadcastArea(c_area1)
+ )
+ ),
+ -,
+ f_getIutMacAddress()
+ )
+ );
+ f_selfOrClientSyncAndVerdict(c_tbDone, e_success);
+
+ // Postamble
+ f_poNeighbour();
+
+ } // End of function f_GEONW_PON_GBC_AREA_ADV_BV_27_nodeE
+
+ } // end GEONW_PON_GBC_AREA_ADV_BV_27
+
+ group GEONW_PON_GBC_AREA_ADV_BV_28 {
+
+ /**
+ * @desc TP Function for TC_GEONW_PON_GBC_AREA_ADV_BV_28
+ */
+ function f_GEONW_PON_GBC_AREA_ADV_BV_28() runs on ItsMtc {
+
+ // Local variables
+ var ItsGeoNetworking v_nodeB;
+ var ItsGeoNetworking v_nodeE;
+
+ // Test control
+ if (not PICS_GN_GBC_FWD) {
+ log("*** " & testcasename() & ": PICS_GN_GBC_FWD required for executing the TC ***");
+ setverdict(inconc);
+ stop;
+ }
+ if (f_getAreaForwardingAlgorithm() != e_advanced) {
+ log("*** " & testcasename() & ": PICS_GN_AREA_FORWARDING_ALGORITHM == e_advanced 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_cf05Up();
+
+ // Preamble
+
+ // Start components
+ v_nodeB := f_getComponent(c_compNodeB);
+ v_nodeE := f_getComponent(c_compNodeE);
+ v_nodeB.start(f_GEONW_PON_GBC_AREA_ADV_BV_28_nodeB());
+ v_nodeE.start(f_GEONW_PON_GBC_AREA_ADV_BV_28_nodeE());
+
+ // Synchronization
+ f_serverSync2ClientsAndStop({c_prDone, c_tbDone});
+
+ // Cleanup
+ f_cf05Down();
+
+ } // End of function f_GEONW_PON_GBC_AREA_ADV_BV_28
+
+ /**
+ * @desc Behavior function for NodeB (TC_GEONW_PON_GBC_AREA_ADV_BV_28)
+ */
+ function f_GEONW_PON_GBC_AREA_ADV_BV_28_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_geoNwBroadcastPacketWithArea(
+ mw_longPosVectorPosition(v_longPosVectorNodeA),
+ ?,
+ f_getGeoBroadcastArea(c_area1)
+ )))) {
+ tc_ac.stop;
+ log("*** " & testcasename() & ": PASS: packet correctly broadcasted ***");
+ 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 of function f_GEONW_PON_GBC_AREA_ADV_BV_28_nodeB
+
+ /**
+ * @desc Behavior function for NodeE (TC_GEONW_PON_GBC_AREA_ADV_BV_28)
+ */
+ function f_GEONW_PON_GBC_AREA_ADV_BV_28_nodeE() runs on ItsGeoNetworking {
+
+ // Local variables
+ var LongPosVector v_longPosVectorNodeA := f_getPosition(c_compNodeA);
+
+ // Preamble
+ f_prNeighbour();
+ f_selfOrClientSyncAndVerdict(c_prDone, e_success);
+
+ // Test Body
+ f_sendGeoNetMessage(
+ m_geoNwReq_withLinkLayerDestination(
+ m_geoNwPdu(m_geoNwBroadcastPacket(
+ v_longPosVectorNodeA,
+ 0,
+ f_getGeoBroadcastArea(c_area1)
+ )
+ ),
+ -,
+ f_getIutMacAddress()
+ )
+ );
+ tc_ac.start;
+ alt {
+ [] geoNetworkingPort.receive(mw_geoNwInd(mw_geoNwPdu(mw_geoNwBroadcastPacketWithArea(
+ mw_longPosVectorPosition(v_longPosVectorNodeA),
+ ?,
+ f_getGeoBroadcastArea(c_area1)
+ )))) {
+ tc_ac.stop;
+ log("*** " & testcasename() & ": PASS: packet correctly broadcasted ***");
+ 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 of function f_GEONW_PON_GBC_AREA_ADV_BV_28_nodeE
+
+ } // end GEONW_PON_GBC_AREA_ADV_BV_28
+
+ group GEONW_PON_GBC_AREA_ADV_BV_29 {
+
+ /**
+ * @desc TP Function for TC_GEONW_PON_GBC_AREA_ADV_BV_29
+ */
+ function f_GEONW_PON_GBC_AREA_ADV_BV_29() runs on ItsMtc {
+
+ // Local variables
+ var ItsGeoNetworking v_nodeB;
+ var ItsGeoNetworking v_nodeE;
+
+ // Test control
+ if (not PICS_GN_GBC_FWD) {
+ log("*** " & testcasename() & ": PICS_GN_GBC_FWD required for executing the TC ***");
+ setverdict(inconc);
+ stop;
+ }
+ if (f_getAreaForwardingAlgorithm() != e_advanced) {
+ log("*** " & testcasename() & ": PICS_GN_AREA_FORWARDING_ALGORITHM == e_advanced 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_cf05Up();
+
+ // Preamble
+
+ // Start components
+ v_nodeB := f_getComponent(c_compNodeB);
+ v_nodeE := f_getComponent(c_compNodeE);
+ v_nodeB.start(f_GEONW_PON_GBC_AREA_ADV_BV_29_nodeB());
+ v_nodeE.start(f_GEONW_PON_GBC_AREA_ADV_BV_29_nodeE());
+
+ // Synchronization
+ f_serverSync2ClientsAndStop({c_prDone, c_tbDone});
+
+ // Cleanup
+ f_cf05Down();
+
+ } // End of function f_GEONW_PON_GBC_AREA_ADV_BV_29
+
+ /**
+ * @desc Behavior function for NodeB (TC_GEONW_PON_GBC_AREA_ADV_BV_29)
+ */
+ function f_GEONW_PON_GBC_AREA_ADV_BV_29_nodeB() runs on ItsGeoNetworking {
+
+ // Local variables
+ var LongPosVector v_longPosVectorNodeE := f_getPosition(c_compNodeE);
+ var LongPosVector v_longPosVectorIut := f_getPosition(c_compIut);
+ timer t_toCbf := (int2float(f_getCbfMaxTime())
+ + (
+ int2float(f_getCbfMinTime() - f_getCbfMaxTime())
+ / int2float(f_getCbfMaxCommunicationRange())
+ ) * f_distance(v_longPosVectorNodeE, v_longPosVectorIut)) * 0.95 / 1000.0;
+
+ // Preamble
+ f_prNeighbour();
+ f_selfOrClientSyncAndVerdict(c_prDone, e_success);
+
+ // Test Body
+ t_toCbf.start;
+ tc_ac.start;
+ alt {
+ [] geoNetworkingPort.receive(mw_geoNwInd(mw_geoNwPdu(mw_geoNwBroadcastPacketWithArea(
+ mw_longPosVectorPosition(v_longPosVectorNodeE),
+ ?,
+ 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: Expected message not received ***");
+ f_selfOrClientSyncAndVerdict(c_tbDone, e_error);
+ }
+ }
+
+ // Postamble
+ f_poNeighbour();
+
+ } // End of function f_GEONW_PON_GBC_AREA_ADV_BV_29_nodeB
+
+ /**
+ * @desc Behavior function for NodeE (TC_GEONW_PON_GBC_AREA_ADV_BV_29)
+ */
+ function f_GEONW_PON_GBC_AREA_ADV_BV_29_nodeE() runs on ItsGeoNetworking {
+
+ // Local variables
+ var LongPosVector v_longPosVectorNodeE := f_getPosition(c_compNodeE);
+ var LongPosVector v_longPosVectorIut := f_getPosition(c_compIut);
+ timer t_toCbf := (int2float(f_getCbfMaxTime())
+ + (
+ int2float(f_getCbfMinTime() - f_getCbfMaxTime())
+ / int2float(f_getCbfMaxCommunicationRange())
+ ) * f_distance(v_longPosVectorNodeE, 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_longPosVectorNodeE,
+ 0,
+ f_getGeoBroadcastArea(c_area1)
+ )
+ )
+ )
+ );
+
+ t_toCbf.start;
+ tc_ac.start;
+ alt {
+ [] geoNetworkingPort.receive(mw_geoNwInd(mw_geoNwPdu(mw_geoNwBroadcastPacketWithArea(
+ mw_longPosVectorPosition(v_longPosVectorNodeE),
+ ?,
+ 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: Expected message not received ***");
+ f_selfOrClientSyncAndVerdict(c_tbDone, e_error);
+ }
+ }
+
+ // Postamble
+ f_poNeighbour();
+
+ } // End of function f_GEONW_PON_GBC_AREA_ADV_BV_29_nodeE
+
+ } // end GEONW_PON_GBC_AREA_ADV_BV_29
+
+ } // end gbcAreaAdvancedForwarding
+
+ } // end gbcAreaForwarding
+
+ } // end geoGeoBroadcast
+
+ // 6.2.2.10
+ group geoTopologicallyScopedBroadcast {
+
+ group GEONW_PON_TSB_BV_01 {
+
+ /**
+ * @desc TP Function for TC_GEONW_PON_TSB_BV_01
+ */
+ function f_GEONW_PON_TSB_BV_01() runs on ItsMtc {
+
+ // Local variables
+ var ItsGeoNetworking v_nodeB;
+ var ItsGeoNetworking v_nodeD;
+
+ // Test control
+ if (not PICS_GN_TSB_SRC) {
+ log("*** " & testcasename() & ": PICS_GN_TSB_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_TSB_BV_01_nodeB());
+ v_nodeD.start(f_GEONW_PON_TSB_BV_01_nodeD());
+
+ // Synchronization
+ f_serverSync2ClientsAndStop({c_prDone, c_tbDone});
+
+ // Cleanup
+ f_cf02Down();
+
+ } // End of function f_GEONW_PON_TSB_BV_01
+
+ /**
+ * @desc Behavior function for NodeB (TC_GEONW_PON_TSB_BV_01)
+ */
+ function f_GEONW_PON_TSB_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_generateTsbMessage) ) {
+ log("*** " & testcasename() & ": INCONC: Trigger failed ***");
+ f_selfOrClientSyncAndVerdict(c_tbDone, e_timeout);
+ }
+ tc_ac.start;
+ alt {
+ [] geoNetworkingPort.receive(
+ mw_geoNwInd(
+ mw_geoNwPdu(
+ mw_geoNwTsbPacket(?, mw_longPosVectorPosition(v_longPosVectorIut))
+ )
+ )
+ ) {
+ tc_ac.stop;
+ log("*** " & testcasename() & ": PASS: TSB packet received correctly ***");
+ f_selfOrClientSyncAndVerdict(c_tbDone, e_success);
+ }
+ [] tc_ac.timeout {
+ log("*** " & testcasename() & ": FAIL: Expected TSB message not received ***");
+ f_selfOrClientSyncAndVerdict(c_tbDone, e_error);
+ }
+ }
+
+ // Postamble
+ f_poNeighbour();
+
+ } // End of function f_GEONW_PON_TSB_BV_01_nodeB
+
+ /**
+ * @desc Behavior function for NodeD (TC_GEONW_PON_TSB_BV_01)
+ */
+ function f_GEONW_PON_TSB_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 {
+ [] geoNetworkingPort.receive(
+ mw_geoNwInd(
+ mw_geoNwPdu(
+ mw_geoNwTsbPacket(?, mw_longPosVectorPosition(v_longPosVectorIut))
+ )
+ )
+ ) {
+ tc_ac.stop;
+ log("*** " & testcasename() & ": PASS: TSB packet received correctly ***");
+ f_selfOrClientSyncAndVerdict(c_tbDone, e_success);
+ }
+ [] tc_ac.timeout {
+ log("*** " & testcasename() & ": FAIL: Expected TSB message not received ***");
+ f_selfOrClientSyncAndVerdict(c_tbDone, e_error);
+ }
+ }
+
+ // Postamble
+ f_poNeighbour();
+
+ } // End of function f_GEONW_PON_TSB_BV_01_nodeD
+
+ } // end GEONW_PON_TSB_BV_01
+
+ group GEONW_PON_TSB_BV_02 {
+
+ /**
+ * @desc TP Function for TC_GEONW_PON_TSB_BV_02
+ */
+ function f_GEONW_PON_TSB_BV_02() runs on ItsMtc {
+
+ // Local variables
+ var ItsGeoNetworking v_nodeB;
+ var ItsGeoNetworking v_nodeD;
+
+ // Test control
+ if (not PICS_GN_TSB_FWD) {
+ log("*** " & testcasename() & ": PICS_GN_TSB_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_TSB_BV_02_nodeB());
+ v_nodeD.start(f_GEONW_PON_TSB_BV_02_nodeD());
+
+ // Synchronization
+ f_serverSync2ClientsAndStop({c_prDone, c_tbDone});
+
+ // Cleanup
+ f_cf02Down();
+
+ } // End of function f_GEONW_PON_TSB_BV_02
+
+ /**
+ * @desc Behavior function for NodeB (TC_GEONW_PON_TSB_BV_02)
+ */
+ function f_GEONW_PON_TSB_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_geoNwTsbPacket(
+ vc_localSeqNumber,
+ v_longPosVectorNodeB
+ ),
+ -,
+ c_defaultHopLimit
+ )
+ )
+ );
+
+ tc_ac.start;
+ alt {
+ [] geoNetworkingPort.receive(
+ mw_geoNwInd(
+ mw_geoNwPdu(
+ mw_geoNwTsbPacket(
+ ?,
+ mw_longPosVectorPosition(v_longPosVectorNodeB)
+ )
+ )
+ )
+ ) {
+ tc_ac.stop;
+ log("*** " & testcasename() & ": PASS: TSB packet received correctly ***");
+ f_selfOrClientSyncAndVerdict(c_tbDone, e_success);
+ }
+ [] tc_ac.timeout {
+ log("*** " & testcasename() & ": FAIL: Expected TSB message not received ***");
+ f_selfOrClientSyncAndVerdict(c_tbDone, e_error);
+ }
+ }
+
+ // Postamble
+ f_poNeighbour();
+
+ } // End of function f_GEONW_PON_TSB_BV_02_nodeB
+
+ /**
+ * @desc Behavior function for NodeD (TC_GEONW_PON_TSB_BV_02)
+ */
+ function f_GEONW_PON_TSB_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_ac.start;
+ alt {
+ [] geoNetworkingPort.receive(
+ mw_geoNwInd(
+ mw_geoNwPdu(
+ mw_geoNwTsbPacket(
+ ?,
+ mw_longPosVectorPosition(v_longPosVectorNodeB)
+ )
+ )
+ )
+ ) {
+ tc_ac.stop;
+ log("*** " & testcasename() & ": PASS: TSB packet received correctly ***");
+ f_selfOrClientSyncAndVerdict(c_tbDone, e_success);
+ }
+ [] tc_ac.timeout {
+ log("*** " & testcasename() & ": FAIL: Expected TSB message not received ***");
+ f_selfOrClientSyncAndVerdict(c_tbDone, e_error);
+ }
+ }
+
+ // Postamble
+ f_poNeighbour();
+
+ } // End of function f_GEONW_PON_TSB_BV_02_nodeD
+
+ } // end GEONW_PON_TSB_BV_02
+
+ group GEONW_PON_TSB_BV_03 {
+
+ /**
+ * @desc TP Function for TC_GEONW_PON_TSB_BV_03
+ */
+ function f_GEONW_PON_TSB_BV_03() runs on ItsMtc {
+
+ // Local variables
+ var ItsGeoNetworking v_nodeB;
+ var ItsGeoNetworking v_nodeD;
+
+ // Test control
+ if (not PICS_GN_TSB_FWD) {
+ log("*** " & testcasename() & ": PICS_GN_TSB_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_TSB_BV_03_nodeB());
+ v_nodeD.start(f_GEONW_PON_TSB_BV_03_nodeD());
+
+ // Synchronization
+ f_serverSync2ClientsAndStop({c_prDone, c_tbDone});
+
+ // Cleanup
+ f_cf02Down();
+
+ } // End of function f_GEONW_PON_TSB_BV_03
+
+ /**
+ * @desc Behavior function for NodeB (TC_GEONW_PON_TSB_BV_03)
+ */
+ function f_GEONW_PON_TSB_BV_03_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_geoNwTsbPacket(
+ vc_localSeqNumber,
+ v_longPosVectorNodeB,
+ c_defaultHopLimit
+ ),
+ -,
+ c_defaultHopLimit
+ )
+ )
+ );
+
+ tc_ac.start;
+ alt {
+ [] geoNetworkingPort.receive(
+ mw_geoNwInd(
+ mw_geoNwPdu(
+ mw_geoNwTsbPacket(
+ ?,
+ mw_longPosVectorPosition(v_longPosVectorNodeB)
+ ),
+ -,
+ c_defaultHopLimit - 1
+ )
+ )
+ ) {
+ tc_ac.stop;
+ log("*** " & testcasename() & ": PASS: TSB packet received correctly ***");
+ f_selfOrClientSyncAndVerdict(c_tbDone, e_success);
+ }
+ [] geoNetworkingPort.receive(
+ mw_geoNwInd(
+ mw_geoNwPdu(
+ mw_geoNwTsbPacket(
+ ?,
+ mw_longPosVectorPosition(v_longPosVectorNodeB)
+ ),
+ -,
+ ?
+ )
+ )
+ ) {
+ tc_ac.stop;
+ log("*** " & testcasename() & ": FAIL: TSB packet received with incorrect HopLimit ***");
+ f_selfOrClientSyncAndVerdict(c_tbDone, e_error);
+ }
+ [] tc_ac.timeout {
+ log("*** " & testcasename() & ": INCONC: Expected TSB message not received ***");
+ f_selfOrClientSyncAndVerdict(c_tbDone, e_timeout);
+ }
+ }
+
+ // Postamble
+ f_poNeighbour();
+
+ } // End of function f_GEONW_PON_TSB_BV_03_nodeB
+
+ /**
+ * @desc Behavior function for NodeD (TC_GEONW_PON_TSB_BV_03)
+ */
+ function f_GEONW_PON_TSB_BV_03_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_ac.start;
+ alt {
+ [] geoNetworkingPort.receive(
+ mw_geoNwInd(
+ mw_geoNwPdu(
+ mw_geoNwTsbPacketWithHl(
+ ?,
+ mw_longPosVectorPosition(v_longPosVectorNodeB),
+ c_defaultHopLimit
+ ),
+ -,
+ c_defaultHopLimit - 1
+ )
+ )
+ ) {
+ tc_ac.stop;
+ log("*** " & testcasename() & ": PASS: TSB packet received correctly ***");
+ f_selfOrClientSyncAndVerdict(c_tbDone, e_success);
+ }
+ [] geoNetworkingPort.receive(
+ mw_geoNwInd(
+ mw_geoNwPdu(
+ mw_geoNwTsbPacket(
+ ?,
+ mw_longPosVectorPosition(v_longPosVectorNodeB)
+ ),
+ -,
+ ?
+ )
+ )
+ ) {
+ tc_ac.stop;
+ log("*** " & testcasename() & ": FAIL: TSB packet received with incorrect HopLimit ***");
+ f_selfOrClientSyncAndVerdict(c_tbDone, e_error);
+ }
+ [] tc_ac.timeout {
+ log("*** " & testcasename() & ": INCONC: Expected TSB message not received ***");
+ f_selfOrClientSyncAndVerdict(c_tbDone, e_timeout);
+ }
+ }
+
+ // Postamble
+ f_poNeighbour();
+
+ } // End of function f_GEONW_PON_TSB_BV_03_nodeD
+
+ } // end GEONW_PON_TSB_BV_03
+
+ group GEONW_PON_TSB_BO_04 {
+
+ /**
+ * @desc TP Function for TC_GEONW_PON_TSB_BO_04
+ */
+ function f_GEONW_PON_TSB_BO_04() runs on ItsMtc {
+
+ // Local variables
+ var ItsGeoNetworking v_nodeB;
+ var ItsGeoNetworking v_nodeD;
+
+ // Test control
+ if (not PICS_GN_TSB_FWD) {
+ log("*** " & testcasename() & ": PICS_GN_TSB_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_TSB_BO_04_nodeB());
+ v_nodeD.start(f_GEONW_PON_TSB_BO_04_nodeD());
+
+ // Synchronization
+ f_serverSync2ClientsAndStop({c_prDone, c_tbDone});
+
+ // Cleanup
+ f_cf02Down();
+
+ } // End of function f_GEONW_PON_TSB_BO_04
+
+ /**
+ * @desc Behavior function for NodeB (TC_GEONW_PON_TSB_BO_04)
+ */
+ function f_GEONW_PON_TSB_BO_04_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_geoNwTsbPacket(
+ vc_localSeqNumber,
+ v_longPosVectorNodeB
+ ),
+ -,
+ 1
+ )
+ )
+ );
+ f_selfOrClientSyncAndVerdict(c_tbDone, e_success);
+
+ // Postamble
+ f_poNeighbour();
+
+ } // End of function f_GEONW_PON_TSB_BO_04_nodeB
+
+ /**
+ * @desc Behavior function for NodeD (TC_GEONW_PON_TSB_BO_04)
+ */
+ function f_GEONW_PON_TSB_BO_04_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 {
+ [] geoNetworkingPort.receive(
+ mw_geoNwInd(
+ mw_geoNwPdu(
+ mw_geoNwTsbPacket(
+ ?,
+ mw_longPosVectorPosition(v_longPosVectorNodeB)
+ )
+ )
+ )
+ ) {
+ tc_noac.stop;
+ log("*** " & testcasename() & ": FAIL: TSB message was re-broadcasted ***");
+ f_selfOrClientSyncAndVerdict(c_tbDone, e_error);
+ }
+ [] tc_noac.timeout {
+ log("*** " & testcasename() & ": PASS: TSB message was not re-broadcasted ***");
+ f_selfOrClientSyncAndVerdict(c_tbDone, e_success);
+ }
+ }
+
+ // Postamble
+ f_poNeighbour();
+
+ } // End of function f_GEONW_PON_TSB_BO_04_nodeD
+
+ } // end GEONW_PON_TSB_BO_04
+
+ /**
+ * @desc TP Function for TC_GEONW_PON_TSB_BV_05
+ */
+ function f_GEONW_PON_TSB_BV_05() runs on ItsGeoNetworking {
+
+ // Local variables
+ var LongPosVector v_longPosVectorNodeB;
+ var template (value) GeoNetworkingPdu v_gnPacket;
+ var integer i;
+
+ // Test control
+ if (not PICS_GN_TSB_DST) {
+ log("*** " & testcasename() & ": PICS_GN_TSB_DST required for executing the TC ***");
+ setverdict(inconc);
+ stop;
+ }
+
+ // Test component configuration
+ f_cf01Up();
+ v_longPosVectorNodeB := f_getPosition(c_compNodeB);
+
+ // Test adapter configuration
+
+ // Preamble
+ f_prDefault();
+ f_selfOrClientSyncAndVerdict(c_prDone, e_success);
+
+ // Test Body
+ v_gnPacket := m_geoNwPdu(m_geoNwTsbPacket(
+ vc_localSeqNumber,
+ v_longPosVectorNodeB
+ )
+ );
+ f_sendGeoNetMessage(m_geoNwReq_linkLayerBroadcast(v_gnPacket));
+
+ f_sleep(PX_TAC);
+
+ for(i:=0; i < lengthof(vc_utInds) and not match(vc_utInds[i].rawPayload, valueof(v_gnPacket.gnPacket.packet.payload)); 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() & ": TSB packet passed to Upper Layer ***");
+ f_selfOrClientSyncAndVerdict(c_tbDone, e_success);
+
+ // Postamble
+ f_poDefault();
+ f_cf01Down();
+
+ } // End of function f_GEONW_PON_TSB_BV_05
+
+ group GEONW_PON_TSB_BO_07 {
+
+ /**
+ * @desc TP Function for TC_GEONW_PON_TSB_BO_07
+ */
+ function f_GEONW_PON_TSB_BO_07() runs on ItsMtc {
+
+ // Local variables
+ var ItsGeoNetworking v_nodeB;
+ var ItsGeoNetworking v_nodeD;
+
+ // Test control
+ if (not PICS_GN_TSB_FWD) {
+ log("*** " & testcasename() & ": PICS_GN_TSB_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_TSB_BO_07_nodeB());
+ v_nodeD.start(f_GEONW_PON_TSB_BO_07_nodeD());
+
+ // Synchronization
+ f_serverSync2ClientsAndStop({c_prDone, c_tbDone});
+
+ // Cleanup
+ f_cf02Down();
+
+ } // End of function f_GEONW_PON_TSB_BO_07
+
+ /**
+ * @desc Behavior function for NodeB (TC_GEONW_PON_TSB_BO_07)
+ */
+ function f_GEONW_PON_TSB_BO_07_nodeB() runs on ItsGeoNetworking {
+
+ // Local variables
+ var LongPosVector v_longPosVectorNodeB := f_getPosition(c_compNodeB);
+ var template GeoNetworkingPdu v_gnPacket;
+
+ // Preamble
+ f_prNeighbour();
+ v_gnPacket := m_geoNwPdu(
+ m_geoNwTsbPacket(
+ vc_localSeqNumber,
+ v_longPosVectorNodeB
+ ),
+ -,
+ c_defaultHopLimit
+ );
+
+ f_sendGeoNetMessage(m_geoNwReq_linkLayerBroadcast(valueof(v_gnPacket)));
+ v_gnPacket.basicHeader.routerHopLimit := ?;
+ tc_noac.start;
+ alt {
+ [] geoNetworkingPort.receive(
+ mw_geoNwInd(
+ mw_geoNwPdu(
+ mw_geoNwTsbPacket(
+ ?,
+ mw_longPosVectorPosition(v_longPosVectorNodeB)
+ )
+ )
+ )
+ ) {
+ tc_noac.stop;
+ log("*** " & testcasename() & ": PASS: Pre-conditions: TSB packet received correctly ***");
+ f_selfOrClientSyncAndVerdict(c_prDone, e_success);
+ }
+ [] tc_noac.timeout {
+ log("*** " & testcasename() & ": INCONC: Pre-conditions: Expected TSB message not received ***");
+ f_selfOrClientSyncAndVerdict(c_prDone, e_timeout);
+ }
+ }
+
+ // Test Body
+ tc_noac.start;
+ alt {
+ [] geoNetworkingPort.receive(
+ mw_geoNwInd(
+ mw_geoNwPdu(
+ mw_geoNwTsbPacket(
+ ?,
+ mw_longPosVectorPosition(v_longPosVectorNodeB)
+ )
+ )
+ )
+ ) {
+ tc_noac.stop;
+ log("*** " & testcasename() & ": FAIL: The same TSB packet was re-broadcasted ***");
+ f_selfOrClientSyncAndVerdict(c_tbDone, e_error);
+ }
+ [] tc_noac.timeout {
+ log("*** " & testcasename() & ": PASS: The same TSB packet was not re-broadcasted ***");
+ f_selfOrClientSyncAndVerdict(c_tbDone, e_success);
+ }
+ }
+
+ // Postamble
+ f_poNeighbour();
+
+ } // End of function f_GEONW_PON_TSB_BO_07_nodeB
+
+ /**
+ * @desc Behavior function for NodeD (TC_GEONW_PON_TSB_BO_07)
+ */
+ function f_GEONW_PON_TSB_BO_07_nodeD() runs on ItsGeoNetworking {
+
+ // Local variables
+ var LongPosVector v_longPosVectorNodeB := f_getPosition(c_compNodeB);
+ var GeoNetworkingInd v_msgInd;
+
+ // Preamble
+ f_prNeighbour();
+ tc_ac.start;
+ alt {
+ [] geoNetworkingPort.receive(
+ mw_geoNwInd(
+ mw_geoNwPdu(
+ mw_geoNwTsbPacket(
+ ?,
+ mw_longPosVectorPosition(v_longPosVectorNodeB)
+ )
+ )
+ )
+ ) -> value v_msgInd {
+ tc_ac.stop;
+ log("*** " & testcasename() & ": PASS: Pre-conditions: TSB packet received correctly ***");
+ f_selfOrClientSyncAndVerdict(c_prDone, e_success);
+ }
+ [] tc_ac.timeout {
+ log("*** " & testcasename() & ": INCONC: Pre-conditions: Expected TSB message not received ***");
+ f_selfOrClientSyncAndVerdict(c_prDone, e_timeout);
+ }
+ }
+
+ // Test Body
+ v_msgInd.msgIn.basicHeader.routerHopLimit := valueof(v_msgInd.msgIn.basicHeader.routerHopLimit) -1;
+ f_sendGeoNetMessage(m_geoNwReq_linkLayerBroadcast(v_msgInd.msgIn));
+
+ tc_noac.start;
+ alt {
+ [] geoNetworkingPort.receive(v_msgInd) {
+ tc_noac.stop;
+ log("*** " & testcasename() & ": FAIL: The same TSB packet was re-broadcasted ***");
+ f_selfOrClientSyncAndVerdict(c_tbDone, e_error);
+ }
+ [] tc_noac.timeout {
+ log("*** " & testcasename() & ": PASS: The same TSB packet was not re-broadcasted ***");
+ f_selfOrClientSyncAndVerdict(c_tbDone, e_success);
+ }
+ }
+
+ // Postamble
+ f_poNeighbour();
+
+ } // End of function f_GEONW_PON_TSB_BO_07_nodeD
+
+ } // end GEONW_PON_TSB_BO_07
+
+ group GEONW_PON_TSB_BO_08 {
+
+ /**
+ * @desc TP Function for TC_GEONW_PON_TSB_BV_08
+ */
+ function f_GEONW_PON_TSB_BO_08() runs on ItsMtc {
+
+ // Local variables
+ var ItsGeoNetworking v_nodeB;
+ var ItsGeoNetworking v_nodeD;
+
+ // Test control
+ if (not PICS_GN_TSB_DST) {
+ log("*** " & testcasename() & ": PICS_GN_TSB_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_TSB_BO_08_nodeB());
+ v_nodeD.start(f_GEONW_PON_TSB_BO_08_nodeD());
+
+ // Synchronization
+ f_serverSync2ClientsAndStop({c_prDone, c_tbDone});
+
+ // Cleanup
+ f_cf02Down();
+
+ } // End of function f_GEONW_PON_TSB_BO_08
+
+ /**
+ * @desc Behavior function for NodeB (TC_GEONW_PON_TSB_BO_08)
+ */
+ function f_GEONW_PON_TSB_BO_08_nodeB() runs on ItsGeoNetworking {
+
+ // Local variables
+ var LongPosVector v_longPosVectorNodeB := f_getPosition(c_compNodeB);
+ var template (value) GeoNetworkingPdu v_gnPacket;
+ var integer i;
+
+ // Preamble
+ f_prNeighbour();
+ v_gnPacket := m_geoNwPdu(m_geoNwTsbPacket(
+ vc_localSeqNumber,
+ v_longPosVectorNodeB
+ ),
+ -,
+ c_defaultHopLimit
+ );
+ f_sendGeoNetMessage(m_geoNwReq_linkLayerBroadcast(valueof(v_gnPacket)));
+
+ tc_ac.start;
+ alt {
+ [] geoNetworkingPort.receive(
+ mw_geoNwInd(
+ mw_geoNwPdu(
+ mw_geoNwTsbPacket(
+ ?,
+ mw_longPosVectorPosition(v_longPosVectorNodeB)
+ )
+ )
+ )
+ ) {
+ tc_ac.stop;
+
+ f_sleep(PX_TAC);
+
+ for(i:=0; i < lengthof(vc_utInds) and not match(vc_utInds[i].rawPayload, valueof(v_gnPacket.gnPacket.packet.payload)); i:=i+1) {
+ // empty on purpose
+ }
+ if(i < lengthof(vc_utInds)) {
+ log("*** " & testcasename() & ": PASS: Pre-conditions: TSB correctly rebroadcasted and passed to Upper Layer ***");
+ vc_utInds := {};
+ f_selfOrClientSyncAndVerdict(c_prDone, e_success);
+ }
+ else {
+ log("*** " & testcasename() & ": INCONC: TSB was not transmitted to upper layer ***");
+ f_selfOrClientSyncAndVerdict(c_prDone, e_error);
+ }
+ }
+ [] tc_ac.timeout {
+ log("*** " & testcasename() & ": INCONC: Pre-conditions: TSB not rebroadcasted ***");
+ f_selfOrClientSyncAndVerdict(c_prDone, e_timeout);
+ }
+ }
+
+ // Test Body
+ f_sleep(PX_TAC);
+
+ for(i:=0; i < lengthof(vc_utInds) and not match(vc_utInds[i].rawPayload, valueof(v_gnPacket.gnPacket.packet.payload)); i:=i+1) {
+ // empty on purpose
+ }
+ if(i < lengthof(vc_utInds)) {
+ log("*** " & testcasename() & ": FAIL: Same TSB packet was transmitted to upper layer ***");
+ f_selfOrClientSyncAndVerdict(c_tbDone, e_error);
+ }
+ else {
+ log("*** " & testcasename() & ": PASS: Same TSB packet was not passed to Upper Layer ***");
+ f_selfOrClientSyncAndVerdict(c_tbDone, e_success);
+ }
+
+ // Postamble
+ f_poNeighbour();
+
+ } // End of function f_GEONW_PON_TSB_BO_08_nodeB
+
+ /**
+ * @desc Behavior function for NodeD (TC_GEONW_PON_TSB_BO_08)
+ */
+ function f_GEONW_PON_TSB_BO_08_nodeD() runs on ItsGeoNetworking {
+
+ // Local variables
+ var LongPosVector v_longPosVectorNodeB := f_getPosition(c_compNodeB);
+ var GeoNetworkingInd v_msgInd;
+ var integer i;
+ var template (value) GeoNetworkingPdu v_gnPacket;
+
+ // Preamble
+ f_prNeighbour();
+
+ tc_ac.start;
+ alt {
+ [] geoNetworkingPort.receive(
+ mw_geoNwInd(
+ mw_geoNwPdu(
+ mw_geoNwTsbPacket(
+ ?,
+ mw_longPosVectorPosition(v_longPosVectorNodeB)
+ )
+ )
+ )
+ ) -> value v_msgInd {
+ tc_ac.stop;
+ log("*** " & testcasename() & ": PASS: Pre-conditions: TSB correctly rebroadcasted ***");
+ f_selfOrClientSyncAndVerdict(c_prDone, e_success);
+ }
+ [] tc_ac.timeout {
+ log("*** " & testcasename() & ": INCONC: Pre-conditions: TSB not rebroadcasted ***");
+ f_selfOrClientSyncAndVerdict(c_prDone, e_timeout);
+ }
+ }
+
+ // Test Body
+ v_msgInd.msgIn.basicHeader.routerHopLimit := valueof(v_msgInd.msgIn.basicHeader.routerHopLimit) - 1;
+ v_gnPacket := v_msgInd.msgIn;
+ f_sendGeoNetMessage(m_geoNwReq_linkLayerBroadcast(v_msgInd.msgIn));
+ f_selfOrClientSyncAndVerdict(c_tbDone, e_success);
+
+ // Postamble
+ f_poNeighbour();
+
+ } // End of function f_GEONW_PON_TSB_BO_08_nodeD
+
+ } // end GEONW_PON_TSB_BO_08
+
+ } // end geoTopologicallyScopedBroadcast
+
+ // 6.2.2.11
+ group geoSingleHopBroadcast {
+
+ group GEONW_PON_SHB_BV_01 {
+
+ /**
+ * @desc TP Function for TC_GEONW_PON_SHB_BV_01
+ */
+ function f_GEONW_PON_SHB_BV_01() runs on ItsMtc {
+
+ // Local variables
+ var ItsGeoNetworking v_nodeB;
+ var ItsGeoNetworking v_nodeD;
+
+ // Test control
+ if (not PICS_GN_SHB_SRC) {
+ log("*** " & testcasename() & ": PICS_GN_SHB_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_SHB_BV_01_nodeB());
+ v_nodeD.start(f_GEONW_PON_SHB_BV_01_nodeD());
+
+ // Synchronization
+ f_serverSync2ClientsAndStop({c_prDone, c_tbDone});
+
+ // Cleanup
+ f_cf02Down();
+
+ } // End of function f_GEONW_PON_SHB_BV_01
+
+ /**
+ * @desc Behavior function for NodeB (TC_GEONW_PON_SHB_BV_01)
+ */
+ function f_GEONW_PON_SHB_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_generateShbMessage) ) {
+ log("*** " & testcasename() & ": INCONC: Trigger failed ***");
+ f_selfOrClientSyncAndVerdict(c_tbDone, e_timeout);
+ }
+
+ tc_ac.start;
+ alt {
+ [] geoNetworkingPort.receive(
+ mw_geoNwInd(
+ mw_geoNwPdu(
+ mw_geoNwShbPacket(mw_longPosVectorPosition(v_longPosVectorIut))
+ )
+ )
+ ) {
+ tc_ac.stop;
+ log("*** " & testcasename() & ": PASS: SHB packet received correctly ***");
+ f_selfOrClientSyncAndVerdict(c_tbDone, e_success);
+ }
+ [] tc_ac.timeout {
+ log("*** " & testcasename() & ": FAIL: Expected SHB message not received ***");
+ f_selfOrClientSyncAndVerdict(c_tbDone, e_error);
+ }
+ }
+
+ // Postamble
+ f_poNeighbour();
+
+ } // End of function f_GEONW_PON_SHB_BV_01_nodeB
+
+ /**
+ * @desc Behavior function for NodeD (TC_GEONW_PON_SHB_BV_01)
+ */
+ function f_GEONW_PON_SHB_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 {
+ [] geoNetworkingPort.receive(
+ mw_geoNwInd(
+ mw_geoNwPdu(
+ mw_geoNwShbPacket(mw_longPosVectorPosition(v_longPosVectorIut))
+ )
+ )
+ ) {
+ tc_ac.stop;
+ log("*** " & testcasename() & ": PASS: SHB packet received correctly ***");
+ f_selfOrClientSyncAndVerdict(c_tbDone, e_success);
+ }
+ [] tc_ac.timeout {
+ log("*** " & testcasename() & ": FAIL: Expected SHB message not received ***");
+ f_selfOrClientSyncAndVerdict(c_tbDone, e_error);
+ }
+ }
+
+ // Postamble
+ f_poNeighbour();
+
+ } // End of function f_GEONW_PON_SHB_BV_01_nodeD
+
+ } // end GEONW_PON_SHB_BV_01
+
+ /**
+ * @desc TP Function for TC_GEONW_PON_SHB_BV_05
+ */
+ function f_GEONW_PON_SHB_BV_05() runs on ItsGeoNetworking {
+
+ // Local variables
+ var LongPosVector v_longPosVectorNodeB;
+ var template (value) GeoNetworkingPdu v_gnPacket;
+ var integer i;
+
+ // Test control
+ if (not PICS_GN_SHB_DST) {
+ log("*** " & testcasename() & ": PICS_GN_SHB_DST required for executing the TC ***");
+ setverdict(inconc);
+ stop;
+ }
+
+ // Test component configuration
+ f_cf01Up();
+ v_longPosVectorNodeB:= f_getPosition(c_compNodeB);
+
+ // Test adapter configuration
+
+ // Preamble
+ f_prNeighbour();
+ f_selfOrClientSyncAndVerdict(c_prDone, e_success);
+
+ // Test Body
+ v_gnPacket := m_geoNwPdu(m_geoNwShbPacket(v_longPosVectorNodeB));
+ f_sendGeoNetMessage(m_geoNwReq_linkLayerBroadcast(v_gnPacket));
+
+ f_sleep(PX_TAC);
+
+ for(i:=0; i < lengthof(vc_utInds) and not match(vc_utInds[i].rawPayload, valueof(v_gnPacket.gnPacket.packet.payload)); 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);
+ }
+
+ // Postamble
+ f_poNeighbour();
+ f_cf01Down();
+
+ } // End of function f_GEONW_PON_SHB_BV_05
+
+ } // end geoSingleHopBroadcast
+
+ // 6.2.2.12
+ group geoGeoAnycast {
+
+ group gacNonAreaForwarding {
+
+ group gacNonAreaAllForwardingAlgorithm {
+
+ group GEONW_PON_GAC_NONAREA_ALL_BV_03 {
+
+ /**
+ * @desc TP Function for TC_GEONW_PON_GAC_NONAREA_ALL_BV_03
+ */
+ function f_GEONW_PON_GAC_NONAREA_ALL_BV_03() runs on ItsMtc {
+
+ // Local variables
+ var ItsGeoNetworking v_nodeB;
+ var ItsGeoNetworking v_nodeC;
+
+ // 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_cf03Up();
+
+ // Preamble
+
+ // Start components
+ v_nodeB := f_getComponent(c_compNodeB);
+ v_nodeC := f_getComponent(c_compNodeC);
+ v_nodeB.start(f_GEONW_PON_GAC_NONAREA_ALL_BV_03_nodeB());
+ v_nodeC.start(f_GEONW_PON_GAC_NONAREA_ALL_BV_03_nodeC());
+
+ // Synchronization
+ f_serverSync2ClientsAndStop({c_prDone, c_tbDone});
+
+ // Cleanup
+ f_cf03Down();
+
+ } // End of function f_GEONW_PON_GAC_NONAREA_ALL_BV_03
+
+ /**
+ * @desc Behavior function for NodeB (TC_GEONW_PON_GAC_NONAREA_ALL_BV_03)
+ */
+ function f_GEONW_PON_GAC_NONAREA_ALL_BV_03_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 {
+ [] a_receiveGeoAnycastWithAreaWithHopLimit(
+ mw_longPosVectorPosition(v_longPosVectorNodeC),
+ ?,
+ f_getGeoAnycastArea(c_area2),
+ c_defaultHopLimit - 1,
+ c_defaultHopLimit) {
+ tc_ac.stop;
+ log("*** " & testcasename() & ": PASS: GAC message correctly retransmitted ***");
+ f_selfOrClientSyncAndVerdict(c_tbDone, e_success);
+ }
+ [] a_receiveGeoAnycastWithAreaWithHopLimit(
+ mw_longPosVectorPosition(v_longPosVectorNodeC),
+ ?,
+ f_getGeoAnycastArea(c_area2),
+ ?,
+ ?) {
+ tc_ac.stop;
+ log("*** " & testcasename() & ": FAIL: GAC message fields not updated ***");
+ f_selfOrClientSyncAndVerdict(c_tbDone, e_error);
+ }
+ [] tc_ac.timeout {
+ log("*** " & testcasename() & ": INCONC: GAC message not retransmitted ***");
+ f_selfOrClientSyncAndVerdict(c_tbDone, e_error);
+ }
+ }
+
+ // Postamble
+ f_poNeighbour();
+
+ } // End of function f_GEONW_PON_GAC_NONAREA_ALL_BV_03_nodeB
+
+ /**
+ * @desc Behavior function for NodeC (TC_GEONW_PON_GAC_NONAREA_ALL_BV_03)
+ */
+ function f_GEONW_PON_GAC_NONAREA_ALL_BV_03_nodeC() runs on ItsGeoNetworking {
+
+ // Local variables
+ var LongPosVector v_longPosVectorNodeC := f_getPosition(c_compNodeC);
+ var GeoNetworkingInd v_msgInd;
+
+ // Preamble
+ f_prNeighbour();
+ f_selfOrClientSyncAndVerdict(c_prDone, e_success);
+
+ // Test Body
+ f_sendGeoNetMessage(
+ m_geoNwReq_linkLayerBroadcast(
+ m_geoNwPdu(
+ m_geoNwAnycastPacket(
+ v_longPosVectorNodeC,
+ vc_localSeqNumber,
+ f_getGeoAnycastArea(c_area2),
+ c_defaultHopLimit
+ ),
+ -,
+ c_defaultHopLimit
+ )
+ )
+ );
+ f_selfOrClientSyncAndVerdict(c_tbDone, e_success);
+
+ // Postamble
+ f_poNeighbour();
+
+ } // End of function f_GEONW_PON_GAC_NONAREA_ALL_BV_03_nodeC
+
+ } // end GEONW_PON_GAC_NONAREA_ALL_BV_03
+
+ group GEONW_PON_GAC_NONAREA_ALL_BO_04 {
+
+ /**
+ * @desc TP Function for TC_GEONW_PON_GAC_NONAREA_ALL_BO_04
+ */
+ function f_GEONW_PON_GAC_NONAREA_ALL_BO_04() runs on ItsMtc {
+
+ // Local variables
+ var ItsGeoNetworking v_nodeB;
+ var ItsGeoNetworking v_nodeC;
+
+ // 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_cf03Up();
+
+ // Preamble
+
+ // Start components
+ v_nodeB := f_getComponent(c_compNodeB);
+ v_nodeC := f_getComponent(c_compNodeC);
+ v_nodeB.start(f_GEONW_PON_GAC_NONAREA_ALL_BO_04_nodeB());
+ v_nodeC.start(f_GEONW_PON_GAC_NONAREA_ALL_BO_04_nodeC());
+
+ // Synchronization
+ f_serverSync2ClientsAndStop({c_prDone, c_tbDone});
+
+ // Cleanup
+ f_cf03Down();
+
+ } // End of function f_GEONW_PON_GAC_NONAREA_ALL_BO_04
+
+ /**
+ * @desc Behavior function for NodeB (TC_GEONW_PON_GAC_NONAREA_ALL_BO_04)
+ */
+ function f_GEONW_PON_GAC_NONAREA_ALL_BO_04_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_noac.start;
+ alt {
+ [] a_receiveGeoAnycastWithArea(
+ mw_longPosVectorPosition(v_longPosVectorNodeC),
+ ?,
+ f_getGeoAnycastArea(c_area2)) {
+ 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 of function f_GEONW_PON_GAC_NONAREA_ALL_BO_04_nodeB
+
+ /**
+ * @desc Behavior function for NodeC (TC_GEONW_PON_GAC_NONAREA_ALL_BO_04)
+ */
+ function f_GEONW_PON_GAC_NONAREA_ALL_BO_04_nodeC() runs on ItsGeoNetworking {
+
+ // Local variables
+ var LongPosVector v_longPosVectorNodeC := f_getPosition(c_compNodeC);
+
+ // Preamble
+ f_prNeighbour();
+ f_selfOrClientSyncAndVerdict(c_prDone, e_success);
+
+ // Test Body
+ f_sendGeoNetMessage(
+ m_geoNwReq_linkLayerBroadcast(
+ m_geoNwPdu(
+ m_geoNwAnycastPacket(
+ v_longPosVectorNodeC,
+ vc_localSeqNumber,
+ f_getGeoAnycastArea(c_area2)
+ ),
+ -,
+ c_hopLimit1
+ )
+ )
+ );
+
+ tc_noac.start;
+ alt {
+ [] a_receiveGeoAnycastWithArea(
+ mw_longPosVectorPosition(v_longPosVectorNodeC),
+ ?,
+ f_getGeoAnycastArea(c_area2)) {
+ 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 of function f_GEONW_PON_GAC_NONAREA_ALL_BO_04_nodeC
+
+ } // end GEONW_PON_GAC_NONAREA_ALL_BO_04
+
+ /**
+ * @desc TP Function for TC_GEONW_PON_GAC_NONAREA_ALL_BV_06
+ */
+ function f_GEONW_PON_GAC_NONAREA_ALL_BV_06() runs on ItsGeoNetworking {
+
+ // Local variables
+ var LongPosVector v_longPosVectorNodeB;
+ var template (value) GeoNetworkingPdu v_gnPacket;
+ var integer i;
+
+ // 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_cf01Up();
+ v_longPosVectorNodeB := f_getPosition(c_compNodeB);
+
+ // Test adapter configuration
+
+ // Preamble
+ f_prNeighbour();
+ f_selfOrClientSyncAndVerdict(c_prDone, e_success);
+
+ // Test Body
+ v_gnPacket := m_geoNwPdu(m_geoNwAnycastPacket(
+ v_longPosVectorNodeB,
+ vc_localSeqNumber,
+ f_getGeoAnycastArea(c_area2)
+ )
+ );
+ 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();
+ f_cf01Down();
+
+ } // End of function f_GEONW_PON_GAC_NONAREA_ALL_BV_06
+
+ group GEONW_PON_GAC_NONAREA_ALL_BO_09 {
+
+ /**
+ * @desc TP Function for TC_GEONW_PON_GAC_NONAREA_ALL_BO_09
+ */
+ function f_GEONW_PON_GAC_NONAREA_ALL_BO_09() runs on ItsMtc {
+
+ // Local variables
+ var ItsGeoNetworking v_nodeB;
+ var ItsGeoNetworking v_nodeC;
+ var ItsGeoNetworking v_nodeD;
+ var UInt16 v_distanceTooBig;
+
+ // 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_cf04Up();
+ v_distanceTooBig := float2int(1.1 * f_radiusFromCircularArea(f_getGnMaxAreaSize()*c_squareKm));
+
+ // 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_ALL_BO_09_nodeB(v_distanceTooBig));
+ v_nodeC.start(f_GEONW_PON_GAC_NONAREA_ALL_BO_09_nodeC(v_distanceTooBig));
+ v_nodeD.start(f_GEONW_PON_GAC_NONAREA_ALL_BO_09_nodeD(v_distanceTooBig));
+
+ // Synchronization
+ f_serverSync3ClientsAndStop({c_prDone, c_tbDone});
+
+ // Cleanup
+ f_cf04Down();
+
+ } // End of function f_GEONW_PON_GAC_NONAREA_ALL_BO_09
+
+ /**
+ * @desc Behavior function for NodeB (TC_GEONW_PON_GAC_NONAREA_ALL_BO_09)
+ */
+ function f_GEONW_PON_GAC_NONAREA_ALL_BO_09_nodeB(in UInt16 p_distanceTooBig) runs on ItsGeoNetworking {
+
+ // Local variables
+ var LongPosVector v_longPosVectorNodeC := f_getPosition(c_compNodeC);
+ var GeoArea v_areaTooBig;
+
+ // Preamble
+ f_prNeighbour();
+ v_areaTooBig := f_computeCircularArea(
+ f_computePosition(f_getPosition(c_compNodeB), 1000, 0),
+ p_distanceTooBig
+ );
+ f_selfOrClientSyncAndVerdict(c_prDone, e_success);
+
+ // Test Body
+ tc_noac.start;
+ alt {
+ [] geoNetworkingPort.receive(mw_geoNwInd(mw_geoNwPdu(mw_geoNwAnycastPacketWithArea(
+ mw_longPosVectorPosition(v_longPosVectorNodeC),
+ ?,
+ f_geoArea2GeoAnycastArea(v_areaTooBig)
+ )))) {
+ 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 of function f_GEONW_PON_GAC_NONAREA_ALL_BO_09_nodeB
+
+ /**
+ * @desc Behavior function for NodeC (TC_GEONW_PON_GAC_NONAREA_ALL_BO_09)
+ */
+ function f_GEONW_PON_GAC_NONAREA_ALL_BO_09_nodeC(in UInt16 p_distanceTooBig) runs on ItsGeoNetworking {
+
+ // Local variables
+ var LongPosVector v_longPosVectorNodeC := f_getPosition(c_compNodeC);
+ var GeoArea v_areaTooBig;
+
+ // Preamble
+ f_prNeighbour();
+ v_areaTooBig := f_computeCircularArea(
+ f_computePosition(f_getPosition(c_compNodeB), 1000, 0),
+ p_distanceTooBig
+ );
+ f_sendGeoNetMessage(
+ m_geoNwReq_linkLayerBroadcast(
+ m_geoNwPdu(
+ m_geoNwAnycastPacket(
+ v_longPosVectorNodeC,
+ vc_localSeqNumber,
+ f_geoArea2GeoAnycastArea(v_areaTooBig)
+ )
+ )
+ )
+ );
+
+ tc_noac.start;
+ alt {
+ [] geoNetworkingPort.receive(mw_geoNwInd(mw_geoNwPdu(mw_geoNwAnycastPacketWithArea(
+ mw_longPosVectorPosition(v_longPosVectorNodeC),
+ ?,
+ f_geoArea2GeoAnycastArea(v_areaTooBig)
+ )))) {
+ 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);
+ }
+ }
+
+
+ // Test Body
+ f_selfOrClientSyncAndVerdict(c_tbDone, e_success);
+
+ // Postamble
+ f_poNeighbour();
+
+ } // End of function f_GEONW_PON_GAC_NONAREA_ALL_BO_09_nodeC
+
+ /**
+ * @desc Behavior function for NodeD (TC_GEONW_PON_GAC_NONAREA_ALL_BO_09)
+ */
+ function f_GEONW_PON_GAC_NONAREA_ALL_BO_09_nodeD(in UInt16 p_distanceTooBig) runs on ItsGeoNetworking {
+
+ // Local variables
+ var LongPosVector v_longPosVectorNodeC := f_getPosition(c_compNodeC);
+ var GeoArea v_areaTooBig;
+
+ // Preamble
+ f_prNeighbour();
+ v_areaTooBig := f_computeCircularArea(
+ f_computePosition(f_getPosition(c_compNodeB), 1000, 0),
+ p_distanceTooBig
+ );
+ f_selfOrClientSyncAndVerdict(c_prDone, e_success);
+
+ // Test Body
+ tc_noac.start;
+ alt {
+ [] geoNetworkingPort.receive(mw_geoNwInd(mw_geoNwPdu(mw_geoNwAnycastPacketWithArea(
+ mw_longPosVectorPosition(v_longPosVectorNodeC),
+ ?,
+ f_geoArea2GeoAnycastArea(v_areaTooBig)
+ )))) {
+ 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 of function f_GEONW_PON_GAC_NONAREA_ALL_BO_09_nodeD
+
+ } // end GEONW_PON_GAC_NONAREA_ALL_BO_09
+
+ group GEONW_PON_GAC_NONAREA_ALL_BV_10 {
+
+ /**
+ * @desc TP Function for TC_GEONW_PON_GAC_NONAREA_ALL_BV_10
+ */
+ function f_GEONW_PON_GAC_NONAREA_ALL_BV_10() 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_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_ALL_BV_10_nodeB());
+ v_nodeC.start(f_GEONW_PON_GAC_NONAREA_ALL_BV_10_nodeC());
+ v_nodeD.start(f_GEONW_PON_GAC_NONAREA_ALL_BV_10_nodeD());
+
+ // Synchronization
+ f_serverSync3ClientsAndStop({c_prDone, c_tbDone});
+
+ // Cleanup
+ f_cf04Down();
+
+ } // End of function f_GEONW_PON_GAC_NONAREA_ALL_BV_10
+
+ /**
+ * @desc Behavior function for NodeB (TC_GEONW_PON_GAC_NONAREA_ALL_BV_10)
+ */
+ function f_GEONW_PON_GAC_NONAREA_ALL_BV_10_nodeB() runs on ItsGeoNetworking {
+
+ // Local variables
+
+ // Preamble
+ f_prNeighbour();
+ f_selfOrClientSyncAndVerdict(c_prDone, e_success);
+
+ // Test Body
+ tc_noac.start;
+ alt {
+ [] geoNetworkingPort.receive(mw_geoNwInd(mw_geoNwPdu(?))) {
+ tc_noac.stop;
+ log("*** " & testcasename() & ": FAIL: GAC received and not discarded ***");
+ f_selfOrClientSyncAndVerdict(c_tbDone, e_error);
+ }
+ [] tc_noac.timeout {
+ log("*** " & testcasename() & ": PASS: GAC message discarded ***");
+ f_selfOrClientSyncAndVerdict(c_tbDone, e_success);
+ }
+ }
+
+ // Postamble
+ f_poNeigh