Rev

Rev 2398 | Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | Download | SVN | Bug Tracker

/**
 *  @author     ETSI / STF405 / STF449 / STF484
 *  @version    $URL: file:///D:/RepositoriesNew/ITS/trunk/ttcn/AtsGeoNetworking/ItsGeoNetworking_TpFunctions.ttcn $
 *              $Id: ItsGeoNetworking_TpFunctions.ttcn 2655 2017-01-26 10:46:08Z filatov $
 *  @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
                var LongPosVector v_longPosVectorNodeB;
               
                // 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(vc_componentName);
               
                // 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 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;
                var integer i;
                var GnRawPayload v_sentRawPayload;
               
                // 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(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(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 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 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.rawPayload)) {
                                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.rawPayload))
                                    & ")***");
                                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 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 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 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(
                        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 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 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 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 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 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 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 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_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_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 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 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 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 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 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_longPosVectorNodeB := f_getPosition(c_compNodeB);
                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_longPosVectorNodeB
                        ) {
                        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 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 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 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 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 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 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 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 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 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 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(
                        m_geoNwReq_linkLayerBroadcast(m_geoNwPdu(p_packet, -, c_hopLimit1))
                    );
                    f_selfOrClientSyncAndVerdict(c_prDone, e_success);
                } // end 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 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(m_geoNwReq_linkLayerBroadcast(m_geoNwPdu(m_geoNwBeaconPacket(f_getPosition(c_compNodeB)), -, 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 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 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 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 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 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 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 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 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 - 1;
                   
                    // Test adapter configuration
                   
                    // Preamble
                    f_prDefault();
                   
                    // Act as a neighbor and send one beacon
                    f_sendGeoNetMessage(m_geoNwReq_linkLayerBroadcast(m_geoNwPdu(m_geoNwBeaconPacket(f_getPosition(c_compNodeB)), -, c_hopLimit1)));
                } // end 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(
                        m_geoNwReq_linkLayerBroadcast(m_geoNwPdu(p_packet))
                    );
                    f_selfOrClientSyncAndVerdict(c_prDone, e_success);
                } // end 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 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 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 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 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 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 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(
                    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)<f_getMaxPacketLifeTime()) {
                            log("*** " & testcasename() & ": Lifetime was handled properly ***");
                            f_selfOrClientSyncAndVerdict(c_tbDone, e_success);
                        }
                        else {
                            log("*** " & testcasename() & ": Lifetime was not handled properly ***");
                            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 f_GEONW_PON_LOS_BV_03
           
            /**
             * @desc    TP Function for TC_GEONW_PON_LOS_BV_04
             */

            function f_GEONW_PON_LOS_BV_04() runs on ItsGeoNetworking {
               
                // Local variables
                var LongPosVector v_longPosVectorNodeA;
                var LongPosVector v_longPosVectorIut;
                var octetstring v_payload1 := char2oct("PAYLOAD_1");
                var octetstring v_payload2 := char2oct("PAYLOAD_2");
                var boolean v_msg1Received := false;
                var boolean v_msg2Received := false;
                var boolean v_firstLsRequestReceived := 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);
               
                // Test adapter configuration
               
                // Preamble
                f_prNeighbour();
               
                 if ( not f_utTriggerEvent(m_generateGeoUnicastMessageWithPayload(v_longPosVectorNodeA.gnAddr, 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) {
                        if ( v_firstLsRequestReceived == true ) {
                            log("*** " & testcasename() & ": Second LsRequest received ***");
                            tc_ac.stop;
                            f_sendGeoNetMessage ( m_geoNwReq_linkLayerBroadcast(
                                                    m_geoNwPdu (
                                                        m_geoNwLsReplyPacket(
                                                            v_longPosVectorNodeA,
                                                            f_longPosVector2ShortPosVector(v_longPosVectorIut),
                                                            vc_localSeqNumber ) ) ) );
                            f_selfOrClientSyncAndVerdict(c_prDone, e_success);
                        }
                        else {
                            log("*** " & testcasename() & ": First LsRequest received ***");
                            v_firstLsRequestReceived := true;
                            if ( not f_utTriggerEvent(m_generateGeoUnicastMessageWithPayload(v_longPosVectorNodeA.gnAddr, v_payload2)) ) {
                                log("*** " & testcasename() & ": INCONC: Trigger failed ***");
                                f_selfOrClientSyncAndVerdict(c_prDone, e_timeout);
                            }
                            tc_ac.start;
                            repeat;
                        }
                    }
                    [] tc_ac.timeout{
                        log("*** " & testcasename() & ": Pre-conditions: Expected message not received ***");
                        f_selfOrClientSyncAndVerdict(c_prDone, e_timeout);
                    }
                }
               
                // Test Body
                tc_ac.start;
                alt {
                    [] geoNetworkingPort.receive(
                        f_receiveGeoNetMessageWithPayload(
                            mw_geoNwInd(
                                mw_geoNwPdu(
                                    mw_geoNwUnicastPacket(
                                        mw_shortPosVectorPosition(f_longPosVector2ShortPosVector(v_longPosVectorNodeA)),
                                        ?
                                    )
                                )
                            ),
                            f_adaptPayload_mw(v_payload1)
                        )
                    ) {
                        v_msg1Received := true;
                        if ( v_msg2Received ) {
                            log("*** " & testcasename() & ": FAIL: Messages received in incorrect order ***");
                            f_selfOrClientSyncAndVerdict(c_tbDone, e_error);
                        }
                        else {
                            log("*** " & testcasename() & ": First Message received ***");
                            repeat;
                        }
                    }
                    [] geoNetworkingPort.receive(
                        f_receiveGeoNetMessageWithPayload(
                            mw_geoNwInd(
                                mw_geoNwPdu(
                                    mw_geoNwUnicastPacket(
                                        mw_shortPosVectorPosition(f_longPosVector2ShortPosVector(v_longPosVectorNodeA)),
                                        ?
                                    )
                                )
                            ),
                            f_adaptPayload_mw(v_payload2)
                        )
                    ) {
                        v_msg2Received := true;
                        if ( v_msg1Received ) {
                            log("*** " & testcasename() & ": PASS: Messages received in correct order ***");
                            f_selfOrClientSyncAndVerdict(c_tbDone, e_success);
                        }
                        else {
                            log("*** " & testcasename() & ": Second Message received ***");
                            repeat;
                        }
                    }
                    [] tc_ac.timeout {
                        log("*** " & testcasename() & ": Expected messages not received ***");
                        f_selfOrClientSyncAndVerdict(c_tbDone, e_timeout);
                    }
                }
               
                // Postamble
                f_poNeighbour();
                f_cf01Down();
               
            } // end f_GEONW_PON_LOS_BV_04
           
            /**
             * @desc    TP Function for TC_GEONW_PON_LOS_BV_05
             */

            function f_GEONW_PON_LOS_BV_05() runs on ItsGeoNetworking {
               
                // Local variables
                var LongPosVector v_longPosVectorNodeA;
                var LongPosVector v_longPosVectorIut;
                var octetstring v_payload1 := char2oct("PAYLOAD_1");
                var octetstring v_payload2 := char2oct("PAYLOAD_2");
               
                // 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_generateGeoUnicastMessageWithPayload(v_longPosVectorNodeA.gnAddr, v_payload1)) ) {
                    log("*** " & testcasename() & ": INCONC: Trigger failed ***");
                    f_selfOrClientSyncAndVerdict(c_prDone, e_timeout);
                }
                 if ( not f_utTriggerEvent(m_generateGeoUnicastMessageWithPayload(v_longPosVectorNodeA.gnAddr, v_payload2)) ) {
                    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);
                        //start retransmission timer
                        tc_ac.start(int2float(c_defaultLifetime) + f_getDeltaTimer());
                    }
                    [] tc_ac.timeout{
                        log("*** " & testcasename() & ": Pre-conditions: Expected message not received ***");
                        f_selfOrClientSyncAndVerdict(c_prDone, e_timeout);
                    }
                }
               
                // Test Body
                // Awaiting expiration of LT
                alt {
                    [] tc_ac.timeout {
                        // LT expired
                    }
                    [] a_receiveLsRequest(?, v_longPosVectorNodeA.gnAddr.mid, v_longPosVectorIut) {
                        // retransmitted LS_REQUEST
                        repeat;
                    }
                }
               
                f_sendGeoNetMessage(
                    m_geoNwReq_linkLayerBroadcast(
                        m_geoNwPdu(
                            m_geoNwLsReplyPacket(
                                v_longPosVectorNodeA,
                                f_longPosVector2ShortPosVector(v_longPosVectorIut),
                                vc_localSeqNumber
                            )
                        )
                    )
                );
               
                // Check for messages send to Tester
                tc_noac.start;
                alt {
                    [] geoNetworkingPort.receive (mw_geoNwInd(mw_geoNwPdu(?))){
                        tc_noac.stop;
                        log("*** " & testcasename() & ": Message received ***");
                        f_selfOrClientSyncAndVerdict(c_tbDone, e_error);
                    }
                    [] tc_noac.timeout {
                        log("*** " & testcasename() & ": No message received ***");
                        f_selfOrClientSyncAndVerdict(c_tbDone, e_success);
                    }
                }
               
                // Postamble
                f_poNeighbour();
                f_cf01Down();
               
            } // end f_GEONW_PON_LOS_BV_05
           
            /**
             * @desc    TP Function for TC_GEONW_PON_LOS_TI_06
             */

            function f_GEONW_PON_LOS_TI_06() runs on ItsGeoNetworking {
               
                // Local variables
                var LongPosVector v_longPosVectorNodeA;
                var LongPosVector v_longPosVectorIut;
                var integer v_maxNbrRetrans := f_getLsMaxRetrans();
                var integer v_rtc := 0;
                var boolean v_retransmitOk := false;
                timer t_minRetrans :=  f_getLsRetransmitTimer() - f_getDeltaTimer();
               
                // Test control
                if (not PICS_GN_LS_REQ_RETRANSMISSION) {
                    log("*** " & testcasename() & ": PICS_GN_LS_REQ_RETRANSMISSION 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_generateGeoUnicastMessageWithLifetime(v_longPosVectorNodeA.gnAddr, float2int(int2float(v_maxNbrRetrans + 2) * f_getLsRetransmitTimer() * 1000.0))) ) {
                    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);
                        //start retransmission timer
                        t_minRetrans.start;
                    }
                    [] tc_ac.timeout {
                        log("*** " & testcasename() & ": Pre-conditions: Expected message not received ***");
                        f_selfOrClientSyncAndVerdict(c_prDone, e_timeout);
                    }
                }
               
                // Test Body
                tc_ac.start;
                alt {
                    [] t_minRetrans.timeout {
                        log("*** " & testcasename() & ": Ready for retransmission ***");
                        v_retransmitOk := true;
                        repeat;
                    }
                    [] a_receiveLsRequest(?, v_longPosVectorNodeA.gnAddr.mid, v_longPosVectorIut) {
                        tc_ac.stop;
                        if(v_retransmitOk == true) {
                            log("*** " & testcasename() & ": LS_REQUEST correctly retransmitted ***");
                            f_selfOrClientSyncAndVerdict(c_tbDone, e_success);
                        }
                        else {
                            log("*** " & testcasename() & ": LS_REQUEST retransmitted too early ***");
                            f_selfOrClientSyncAndVerdict(c_tbDone, e_error);
                        }
                    }
                    [] tc_ac.timeout {
                        log("*** " & testcasename() & ": No LS_REQUEST retransmitted ***");
                        f_selfOrClientSyncAndVerdict(c_tbDone, e_error);
                    }
                }
               
                // Postamble
                f_poNeighbour();
                f_cf01Down();
               
            } // end f_GEONW_PON_LOS_TI_06
           
            /**
             * @desc    TP Function for TC_GEONW_PON_LOS_BV_07
             */

            function f_GEONW_PON_LOS_BV_07() runs on ItsGeoNetworking {
               
                // Local variables
                var LongPosVector v_longPosVectorNodeA;
                var LongPosVector v_longPosVectorIut;
                var integer v_maxNbrRetrans := f_getLsMaxRetrans();
                var integer v_nbLsReceived := 0;
               
                // Test control
                if (not PICS_GN_LS_REQ_RETRANSMISSION) {
                    log("*** " & testcasename() & ": PICS_GN_LS_REQ_RETRANSMISSION 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_generateGeoUnicastMessageWithLifetime(
                    v_longPosVectorNodeA.gnAddr,
                                            float2int(int2float(v_maxNbrRetrans + 2) * f_getLsRetransmitTimer() * 1000.0))) ) {
                    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() & ": Pre-conditions: Expected message not received ***");
                        f_selfOrClientSyncAndVerdict(c_prDone, e_timeout);
                    }
                }
               
                // Test Body
                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() & ": 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 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 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 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 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_longPosVectorNodeD := f_getPosition(c_compNodeD);
                    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(
                        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 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 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 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(
                        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 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 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 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(
                        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 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(
                    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 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(
                    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)),
                                        ?
                                    )
                                )
                            ),
                            f_adaptPayload_mw(v_payload1)
                        )
                    ) {
                        v_msg1Received := true;
                        repeat;
                    }
                    [] geoNetworkingPort.receive(
                        f_receiveGeoNetMessageWithPayload(
                            mw_geoNwInd(
                                mw_geoNwPdu(
                                    mw_geoNwUnicastPacket(
                                        mw_shortPosVectorPosition(f_longPosVector2ShortPosVector(v_longPosVectorNodeA)),
                                        ?
                                    )
                                )
                            ),
                            f_adaptPayload_mw(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 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(
                        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 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;
                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);
                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(
                    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 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;
                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);
                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(
                    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 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;
                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);
                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(
                    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 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 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);
                    var LongPosVector v_longPosVectorIut := f_getPosition(c_compIut);
                   
                    // 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 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(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 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;
                    const 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 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);
                    var LongPosVector v_longPosVectorIut := f_getPosition(c_compIut);
                   
                    // 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 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(
                        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 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;
                    const 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 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 LongPosVector v_longPosVectorIut := f_getPosition(c_compIut);
                    var GeoNetworkingInd v_geoNetInd;
                    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 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(
                            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 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 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);
                    var LongPosVector v_longPosVectorIut := f_getPosition(c_compIut);
                    var GeoNetworkingInd v_geoNetInd;
                    var integer v_nbReceivedPackets := 0;
                   
                    // 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 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(
                        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 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 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 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 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 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 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;
                    var integer i := 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 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 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);
                    var GeoNetworkingInd v_geoNetInd;
                   
                    // 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 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);
                    var GeoNetworkingInd v_geoNetInd;
                   
                    // 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 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 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_longPosVectorIut := f_getPosition(c_compIut);
                    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 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);
                    var GeoNetworkingInd v_geoNetInd;
                   
                    // Preamble
                    f_prNeighbour();
                   
                    // Make sure IUT has LocE for NodeA by sending unsolicited LS_REPLY
                    f_sendGeoNetMessage(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 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 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 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 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 :=