ItsGeoNetworking_TpFunctions.ttcn 718 KB
Newer Older
                    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_withDelta(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_withDelta(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_withDelta(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_withDelta(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;
                        [] geoNetworkingPort.receive(mw_geoNwInd(mw_geoNwPdu(mw_geoNwBroadcastPacket(
                            mw_longPosVectorPosition_withDelta(v_longPosVectorIut),
                            ?)))) {
                            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_withDelta(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;
                        [] geoNetworkingPort.receive(mw_geoNwInd(mw_geoNwPdu(mw_geoNwBroadcastPacket(
                            mw_longPosVectorPosition_withDelta(v_longPosVectorIut),
                            ?)))) {
                            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_withDelta(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_withDelta(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_withDelta(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_withDelta(v_longPosVectorIut),
                            ?)))) {
4697 4698 4699 4700 4701 4702 4703 4704 4705 4706 4707 4708 4709 4710 4711 4712 4713 4714 4715 4716 4717 4718 4719 4720 4721 4722 4723 4724 4725 4726 4727 4728 4729 4730 4731 4732 4733 4734 4735 4736 4737 4738 4739 4740 4741 4742 4743 4744 4745 4746 4747 4748 4749 4750 4751 4752 4753 4754 4755 4756 4757 4758 4759 4760 4761 4762 4763 4764 4765 4766 4767 4768 4769 4770 4771 4772 4773 4774 4775 4776 4777 4778 4779 4780 4781 4782 4783 4784 4785 4786 4787 4788 4789 4790 4791 4792 4793 4794 4795 4796 4797 4798 4799 4800 4801 4802 4803 4804 4805 4806 4807 4808 4809 4810 4811 4812 4813 4814 4815 4816 4817 4818 4819 4820 4821 4822 4823 4824 4825 4826 4827 4828 4829 4830 4831 4832 4833 4834 4835 4836 4837 4838 4839 4840 4841 4842 4843 4844 4845 4846 4847 4848 4849 4850 4851 4852 4853 4854 4855 4856 4857 4858 4859 4860 4861 4862 4863 4864 4865 4866 4867 4868 4869 4870 4871 4872 4873 4874 4875 4876 4877 4878 4879 4880 4881 4882 4883 4884 4885 4886 4887 4888 4889 4890 4891 4892 4893 4894 4895 4896 4897 4898 4899 4900 4901 4902 4903 4904 4905 4906 4907 4908 4909 4910 4911 4912 4913 4914 4915 4916 4917 4918 4919 4920 4921 4922 4923 4924 4925 4926 4927 4928 4929 4930 4931 4932 4933 4934 4935 4936 4937 4938 4939 4940 4941 4942 4943 4944 4945 4946 4947 4948 4949 4950 4951 4952 4953 4954 4955 4956 4957 4958 4959 4960 4961 4962 4963 4964 4965 4966 4967 4968 4969 4970 4971 4972 4973 4974 4975 4976 4977 4978 4979 4980 4981 4982 4983 4984 4985 4986 4987 4988 4989 4990 4991 4992 4993 4994 4995 4996 4997 4998 4999 5000
                            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 := f_getComponent(c_compNodeB);
                    v_nodeC := f_getComponent(c_compNodeC);
                    v_nodeB.start(f_GEONW_PON_FPB_BV_11_01_nodeB());
                    v_nodeC.start(f_GEONW_PON_FPB_BV_11_01_nodeC());
                    
                    // Synchronization
                    f_serverSync2ClientsAndStop({c_prDone, c_tbDone});
                    
                    // Cleanup
                    f_cf03Down();
                    
                } // end f_GEONW_PON_FPB_BV_11_01

                /**
                 * @desc    Behavior function for NodeB (TC_GEONW_PON_FPB_BV_11_01)
                 */
                function f_GEONW_PON_FPB_BV_11_01_nodeB() runs on ItsGeoNetworking {
                    
                    // Local variablesa
                    var LongPosVector v_longPosVectorNodeA := f_getPosition(c_compNodeA);
                    
                    // Preamble
                    f_prNonNeighbour();
                    f_selfOrClientSyncAndVerdict(c_prDone, e_success);
                    
                    // Test Body
                    tc_ac.start;
                    alt {
                        [] geoNetworkingPort.receive(
                                mw_geoNwInd(
                                    mw_geoNwPdu(
                                        mw_geoNwUnicastPacket(
                                            f_longPosVector2ShortPosVector(v_longPosVectorNodeA),
                                            ?
                                        )
                                    )
                                )
                            ) {
                            tc_ac.stop;
                            log("*** " & testcasename() & ": PASS: Pre-conditions: TSB correctly broadcasted ***");
                            f_selfOrClientSyncAndVerdict(c_tbDone, e_success);
                        }
                        [] tc_ac.timeout {
                            log("*** " & testcasename() & ": FAIL: Pre-conditions: TSB not broadcasted ***");
                            f_selfOrClientSyncAndVerdict(c_tbDone, e_error);
                        }
                    }
                    
                    // Postamble
                    f_poDefault();
                    
                } // end f_GEONW_PON_FPB_BV_11_01_nodeB
                
                /**
                 * @desc    Behavior function for NodeC (TC_GEONW_PON_FPB_BV_11_01)
                 */
                function f_GEONW_PON_FPB_BV_11_01_nodeC() runs on ItsGeoNetworking {
                    
                    // Local variables
                    var LongPosVector v_longPosVectorNodeA := f_getPosition(c_compNodeA);
                    var LongPosVector v_longPosVectorIut := f_getPosition(c_compIut);
                    
                    // Preamble
                    f_prNonNeighbour();
                    // Make sure IUT has LocE for NodeA by sending unsolicited LS_REPLY
                    f_sendGeoNetMessage(m_geoNwReq_linkLayerBroadcast(m_geoNwPdu(
                        m_geoNwLsReplyPacket(
                            v_longPosVectorNodeA,
                            f_longPosVector2ShortPosVector(v_longPosVectorIut),
                            vc_localSeqNumber
                        )
                    )));
                    f_selfOrClientSyncAndVerdict(c_prDone, e_success);
                    
                    // Test Body
                    if(not f_utTriggerEvent(m_generateGeoUnicastMessageWithTrafficClass(
                            v_longPosVectorNodeA.gnAddr,
                            valueof(m_trafficClass(e_scfDisabled))))) {
                        log("*** " & testcasename() & ": INCONC: Trigger failed ***");
                        f_selfOrClientSyncAndVerdict(c_tbDone, e_timeout);
                    }
                    tc_ac.start;
                    alt {
                        [] geoNetworkingPort.receive(
                                mw_geoNwInd(
                                    mw_geoNwPdu(
                                        mw_geoNwUnicastPacket(
                                            f_longPosVector2ShortPosVector(v_longPosVectorNodeA),
                                            ?
                                        )
                                    )
                                )
                            ) {
                            tc_ac.stop;
                            log("*** " & testcasename() & ": PASS: Pre-conditions: TSB correctly broadcasted ***");
                            f_selfOrClientSyncAndVerdict(c_tbDone, e_success);
                        }
                        [] tc_ac.timeout {
                            log("*** " & testcasename() & ": FAIL: Pre-conditions: TSB not broadcasted ***");
                            f_selfOrClientSyncAndVerdict(c_tbDone, e_error);
                        }
                    }
                    
                    // Postamble
                    f_poDefault();
                    
                } // end f_GEONW_PON_FPB_BV_11_01_nodeC

                /**
                 * @desc    TP Function for TC_GEONW_PON_FPB_BV_11_02
                 */
                 function f_GEONW_PON_FPB_BV_11_02() runs on ItsMtc {
                    
                    // Local variables
                    var ItsGeoNetworking v_nodeB;
                    var ItsGeoNetworking v_nodeC;
                    
                    // Test control
                    if (not PICS_GN_GAC_SRC) {
                        log("*** " & testcasename() & ": PICS_GN_GAC_SRC required for executing the TC ***");
                        setverdict(inconc);
                        stop;
                    }
                    
                    // Test component configuration
                    f_cf03Up(c_compNodeC);
                    
                    // Preamble
                    
                    // Start components
                    v_nodeB := f_getComponent(c_compNodeB);
                    v_nodeC := f_getComponent(c_compNodeC);
                    v_nodeB.start(f_GEONW_PON_FPB_BV_11_02_nodeB());
                    v_nodeC.start(f_GEONW_PON_FPB_BV_11_02_nodeC());
                    
                    // Synchronization
                    f_serverSync2ClientsAndStop({c_prDone, c_tbDone});
                    
                    // Cleanup
                    f_cf03Down();
                    
                } // end f_GEONW_PON_FPB_BV_11_02
                
                /**
                 * @desc    Behavior function for NodeB (TC_GEONW_PON_FPB_BV_11_02)
                 */
                function f_GEONW_PON_FPB_BV_11_02_nodeB() runs on ItsGeoNetworking {
                    
                    // Local variables
                    var LongPosVector v_longPosVectorIut := f_getPosition(c_compIut);
                    
                    // Preamble
                    f_prNonNeighbour();
                    f_selfOrClientSyncAndVerdict(c_prDone, e_success);
                    
                    // Test Body
                    tc_ac.start;
                    alt {
                        [] geoNetworkingPort.receive(
                                mw_geoNwInd(
                                    mw_geoNwPdu(
                                        mw_geoNwAnycastPacket(
                                            mw_longPosVectorPosition_withDelta(v_longPosVectorIut),
                                            ?
                                        )
                                    )
                                )
                            ) {
                            tc_ac.stop;
                            log("*** " & testcasename() & ": PASS: Pre-conditions: TSB correctly broadcasted ***");
                            f_selfOrClientSyncAndVerdict(c_tbDone, e_success);
                        }
                        [] tc_ac.timeout {
                            log("*** " & testcasename() & ": FAIL: Pre-conditions: TSB not broadcasted ***");
                            f_selfOrClientSyncAndVerdict(c_tbDone, e_error);
                        }
                    }
                    
                    // Postamble
                    f_poDefault();
                    
                } // end f_GEONW_PON_FPB_BV_11_02_nodeB
                
                /**
                 * @desc    Behavior function for NodeC (TC_GEONW_PON_FPB_BV_11_02)
                 */
                function f_GEONW_PON_FPB_BV_11_02_nodeC() runs on ItsGeoNetworking {
                    
                    // Local variables
                    var LongPosVector v_longPosVectorIut := f_getPosition(c_compIut);
                    
                    // Preamble
                    f_prNonNeighbour();
                    f_selfOrClientSyncAndVerdict(c_prDone, e_success);
                    
                    // Test Body
                    if(not f_utTriggerEvent(m_generateGeoAnycastMessageWithTrafficClass(
                            f_getArea(c_area2),
                            valueof(m_trafficClass(e_scfDisabled))))) {
                        log("*** " & testcasename() & ": INCONC: Trigger failed ***");
                        f_selfOrClientSyncAndVerdict(c_tbDone, e_timeout);
                    }
                    tc_ac.start;
                    alt {
                        [] geoNetworkingPort.receive(
                                mw_geoNwInd(
                                    mw_geoNwPdu(
                                        mw_geoNwAnycastPacket(
                                            mw_longPosVectorPosition_withDelta(v_longPosVectorIut),
                                            ?
                                        )
                                    )
                                )
                            ) {
                            tc_ac.stop;
                            log("*** " & testcasename() & ": PASS: Pre-conditions: TSB correctly broadcasted ***");
                            f_selfOrClientSyncAndVerdict(c_tbDone, e_success);
                        }
                        [] tc_ac.timeout {
                            log("*** " & testcasename() & ": FAIL: Pre-conditions: TSB not broadcasted ***");
                            f_selfOrClientSyncAndVerdict(c_tbDone, e_error);
                        }
                    }
                    
                    // Postamble
                    f_poDefault();
                    
                } // end f_GEONW_PON_FPB_BV_11_02_nodeC
                
                /**
                 * @desc    TP Function for TC_GEONW_PON_FPB_BV_11_03
                 */
                 function f_GEONW_PON_FPB_BV_11_03() runs on ItsMtc {
                    
                    // Local variables
                    var ItsGeoNetworking v_nodeB;
                    var ItsGeoNetworking v_nodeC;
                    
                    // Test control
                    if (not PICS_GN_GBC_SRC) {
                        log("*** " & testcasename() & ": PICS_GN_GBC_SRC required for executing the TC ***");
                        setverdict(inconc);
                        stop;
                    }
                    
                    // Test component configuration
                    f_cf03Up(c_compNodeC);
                    
                    // Preamble
                    
                    // Start components
                    v_nodeB := f_getComponent(c_compNodeB);
                    v_nodeC := f_getComponent(c_compNodeC);
                    v_nodeB.start(f_GEONW_PON_FPB_BV_11_03_nodeB());
                    v_nodeC.start(f_GEONW_PON_FPB_BV_11_03_nodeC());
                    
                    // Synchronization
                    f_serverSync2ClientsAndStop({c_prDone, c_tbDone});
                    
                    // Cleanup
                    f_cf03Down();