From 4186d1ae048db33a7fd490732cd37aa3f53dc2ff Mon Sep 17 00:00:00 2001 From: Denis Filatov Date: Fri, 23 Jul 2021 12:42:03 +0200 Subject: [PATCH 1/5] Initial --- ItsGeoNetworking_TestCases.ttcn | 6267 ++++++ ItsGeoNetworking_TestControl.ttcn | 494 + ItsGeoNetworking_TpFunctions.ttcn | 17107 ++++++++++++++++ ...ibItsGeoNetworking_EncdecDeclarations.ttcn | 55 + lib/LibItsGeoNetworking_Functions.ttcn | 2836 +++ lib/LibItsGeoNetworking_Pics.ttcn | 389 + lib/LibItsGeoNetworking_Pixits.ttcn | 207 + lib/LibItsGeoNetworking_Templates.ttcn | 2320 +++ lib/LibItsGeoNetworking_TestSystem.ttcn | 180 + lib/LibItsGeoNetworking_TypesAndValues.ttcn | 1182 ++ lib/module.mk | 8 + module.mk | 31 + 12 files changed, 31076 insertions(+) create mode 100755 ItsGeoNetworking_TestCases.ttcn create mode 100755 ItsGeoNetworking_TestControl.ttcn create mode 100755 ItsGeoNetworking_TpFunctions.ttcn create mode 100755 lib/LibItsGeoNetworking_EncdecDeclarations.ttcn create mode 100755 lib/LibItsGeoNetworking_Functions.ttcn create mode 100755 lib/LibItsGeoNetworking_Pics.ttcn create mode 100755 lib/LibItsGeoNetworking_Pixits.ttcn create mode 100755 lib/LibItsGeoNetworking_Templates.ttcn create mode 100755 lib/LibItsGeoNetworking_TestSystem.ttcn create mode 100755 lib/LibItsGeoNetworking_TypesAndValues.ttcn create mode 100755 lib/module.mk create mode 100755 module.mk diff --git a/ItsGeoNetworking_TestCases.ttcn b/ItsGeoNetworking_TestCases.ttcn new file mode 100755 index 0000000..af43f88 --- /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 100755 index 0000000..3cc3c88 --- /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 100755 index 0000000..ccb186c --- /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 + + /** +