/** * @author ETSI / STF405 / STF449 / STF484 / STF525 * @version $URL$ * $Id$ * @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; // import from LibItsGeoNetworking_EncdecDeclarations 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(valueof(m_geoNwReq_linkLayerBroadcast(v_gnPacket))); f_sleep(PX_TAC); if(0 < lengthof(vc_utInds)) { log("*** " & testcasename() & ": PASS: GN was transmitted to upper layer ***"); //flush received upper indications vc_utInds := {}; f_selfOrClientSyncAndVerdict(c_prDone, e_success); } else { log("*** " & testcasename() & ": INCONC: GN was not transmitted to upper layer ***"); f_selfOrClientSyncAndVerdict(c_prDone, e_error); } // Test Body v_gnPacket.basicHeader.version := valueof(v_gnPacket.basicHeader.version) + 1; f_sendGeoNetMessage(valueof(m_geoNwReq_linkLayerBroadcast(v_gnPacket))); f_sleep(PX_TAC); if(0 != lengthof(vc_utInds)) { log("*** " & testcasename() & ": FAIL: GN was transmitted to upper layer ***"); f_selfOrClientSyncAndVerdict(c_tbDone, e_error); } else { log("*** " & testcasename() & ": PASS: GN was discarded and not transmitted to upper layer ***"); f_selfOrClientSyncAndVerdict(c_tbDone, e_success); } // Postamble f_poNeighbour(); f_cf01Down(); } // end 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)) { log("*** " & testcasename() & ": PASS: PL field correctly indicates payload size ***"); f_selfOrClientSyncAndVerdict(c_tbDone, e_success); } else { log("*** " & testcasename() & ": FAIL: PL does correctly not indicate payload size (" & int2str(v_geoNwInd.msgIn.gnPacket.packet.commonHeader.plLength) & " != " & int2str(lengthof(v_geoNwInd.msgIn.gnPacket.packet.payload)) & ")***"); f_selfOrClientSyncAndVerdict(c_tbDone, e_error); } } else { if(v_geoNwInd.msgIn.gnPacket.packet.commonHeader.plLength == 0) { log("*** " & testcasename() & ": PASS: PL field correctly indicates empty payload ***"); f_selfOrClientSyncAndVerdict(c_tbDone, e_success); } else { log("*** " & testcasename() & ": FAIL: PL does not indicate empty payload ***"); f_selfOrClientSyncAndVerdict(c_tbDone, e_error); } } } [] tc_ac.timeout { log("*** " & testcasename() & ": INCONC: Expected message not received ***"); f_selfOrClientSyncAndVerdict(c_tbDone, e_timeout); } } // Postamble f_poNeighbour(); f_cf01Down(); } // end 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( valueof(m_geoNwReq_linkLayerBroadcast( m_geoNwPdu( m_geoNwTsbPacket( vc_localSeqNumber, v_longPosVectorNodeB, v_hopLimit-1 ), -, v_hopLimit ) ) )); tc_noac.start; alt { [] geoNetworkingPort.receive( mw_geoNwInd( mw_geoNwPdu( mw_geoNwTsbPacket( ?, mw_longPosVectorPosition(v_longPosVectorNodeB) ) ) ) ) { tc_noac.stop; log("*** " & testcasename() & ": FAIL: TSB packet was not discarded ***"); f_selfOrClientSyncAndVerdict(c_tbDone, e_error); } [] tc_noac.timeout { log("*** " & testcasename() & ": PASS: TSB was correctly discarded ***"); f_selfOrClientSyncAndVerdict(c_tbDone, e_success); } } // Postamble f_poNeighbour(); } // end 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( valueof(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(valueof(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(valueof(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( valueof(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( valueof(m_geoNwReq_linkLayerBroadcast( m_geoNwPdu( m_geoNwLsReplyPacket( v_longPosVectorNodeA, f_longPosVector2ShortPosVector(v_longPosVectorIut), vc_localSeqNumber ) ) ) )); tc_ac.start; alt { [] geoNetworkingPort.receive( mw_geoNwInd( mw_geoNwPdu( mw_geoNwUnicastPacket( mw_shortPosVectorPosition(f_longPosVector2ShortPosVector(v_longPosVectorNodeA)), ? ) ) ) ) -> value v_geoNetInd { tc_ac.stop; //we only check that the lifetime is less than the default lifetime due to //we do not know exactly the time passed at IUT if (f_getLifetimeValue(v_geoNetInd.msgIn.basicHeader.lifeTime) v_maxNbrRetrans) { //first LS request is not counted as a retransmission log("*** " & testcasename() & ": LS_REQUEST retransmitted more than itsGnLocationServiceMaxRetrans times ***"); f_selfOrClientSyncAndVerdict(c_tbDone, e_error); } else { tc_ac.start; repeat; } } [] tc_ac.timeout { if(v_nbLsReceived == (v_maxNbrRetrans)) { //first LS request is not counted as a retransmission log("*** " & testcasename() & ": LS_REQUEST retransmitted itsGnLocationServiceMaxRetrans times ***"); f_selfOrClientSyncAndVerdict(c_tbDone, e_success); } else { log("*** " & testcasename() & ": LS_REQUEST retransmitted less than itsGnLocationServiceMaxRetrans times ***"); f_selfOrClientSyncAndVerdict(c_tbDone, e_error); } } } // Postamble f_poNeighbour(); f_cf01Down(); } // end 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( valueof(m_geoNwReq_linkLayerBroadcast( m_geoNwPdu( m_geoNwLsRequestPacket( v_longPosVectorNodeB, vc_localSeqNumber, v_iutGnAddress ) ) ) )); tc_noac.start; alt { [] geoNetworkingPort.receive( mw_geoNwInd( mw_geoNwPdu( mw_geoNwLsReplyPacket( mw_longPosVectorPosition(v_longPosVectorIut), mw_shortPosVectorPosition(f_longPosVector2ShortPosVector(v_longPosVectorNodeB)) ) ) ) ) { tc_noac.stop; log("*** " & testcasename() & ": FAIL: LS_REQUEST has not been discarded ***"); f_selfOrClientSyncAndVerdict(c_tbDone, e_error); } [] tc_noac.timeout { log("*** " & testcasename() & ": PASS: LS_REQUEST discarded ***"); f_selfOrClientSyncAndVerdict(c_tbDone, e_success); } } // Postamble f_poNeighbour(); } // end 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( valueof(m_geoNwReq_linkLayerBroadcast( m_geoNwPdu( m_geoNwLsRequestPacket( f_getPosition(c_compNodeA), vc_localSeqNumber, f_getPosition(c_compNodeB).gnAddr ), -, c_defaultHopLimit ) ) )); f_selfOrClientSyncAndVerdict(c_tbDone, e_success); // Postamble f_poNeighbour(); } // end 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( valueof(m_geoNwReq_linkLayerBroadcast( m_geoNwPdu( m_geoNwLsReplyPacket( f_getPosition(c_compNodeA), f_longPosVector2ShortPosVector(f_getPosition(c_compNodeB)), vc_localSeqNumber ), -, c_defaultHopLimit ) ) )); f_selfOrClientSyncAndVerdict(c_tbDone, e_success); // Postamble f_poNeighbour(); } // end f_GEONW_PON_LOS_BV_11_nodeC } // end GEONW_PON_LOS_BV_11 /** * @desc TP Function for TC_GEONW_PON_LOS_BV_12 */ function f_GEONW_PON_LOS_BV_12() runs on ItsGeoNetworking { // Local variables var LongPosVector v_longPosVectorNodeA; var LongPosVector v_longPosVectorIut; var UInt16 v_seqNbr := vc_localSeqNumber; // Test control if (not PICS_GN_LS_REQ_SRC) { log("*** " & testcasename() & ": PICS_GN_LS_REQ_SRC required for executing the TC ***"); setverdict(inconc); stop; } // Test component configuration f_cf01Up(); v_longPosVectorNodeA := f_getPosition(c_compNodeA); // Test adapter configuration // Preamble f_prNeighbour(); if ( not f_utTriggerEvent(m_generateGeoUnicastMessage(v_longPosVectorNodeA.gnAddr)) ) { log("*** " & testcasename() & ": INCONC: Trigger failed ***"); f_selfOrClientSyncAndVerdict(c_prDone, e_timeout); } tc_ac.start; alt { [] a_receiveLsRequest(?, v_longPosVectorNodeA.gnAddr.mid, v_longPosVectorIut) { tc_ac.stop; f_selfOrClientSyncAndVerdict(c_tbDone, e_success); } [] tc_ac.timeout { log("*** " & testcasename() & ": INCONC: Pre-conditions: LS Request not received ***"); f_selfOrClientSyncAndVerdict(c_prDone, e_timeout); } } // Test Body f_sendGeoNetMessage( valueof(m_geoNwReq_linkLayerBroadcast( m_geoNwPdu( m_geoNwUnicastPacket( v_longPosVectorNodeA, f_longPosVector2ShortPosVector(v_longPosVectorIut), vc_localSeqNumber ) ) ) )); tc_ac.start; alt { [] a_receiveGeoUnicastWithDestination(mw_shortPosVectorPosition(f_longPosVector2ShortPosVector(v_longPosVectorNodeA))) { tc_ac.stop; log("*** " & testcasename() & ": PASS: GUC packet received correctly ***"); f_selfOrClientSyncAndVerdict(c_tbDone, e_success); } [] tc_ac.timeout { log("*** " & testcasename() & ": FAIL: Expected message not received ***"); f_selfOrClientSyncAndVerdict(c_tbDone, e_error); } } // Postamble f_poNeighbour(); f_cf01Down(); } // end f_GEONW_PON_LOS_BV_12 /** * @desc TP Function for TC_GEONW_PON_LOS_BV_13 */ function f_GEONW_PON_LOS_BV_13() runs on ItsGeoNetworking { // Local variables var LongPosVector v_longPosVectorNodeA; var LongPosVector v_longPosVectorIut; var integer v_lt1 := f_getLsMaxRetrans()*float2int(f_getLsRetransmitTimer()); var integer v_lt2 := float2int(int2float(v_lt1)/2.0); var octetstring v_payload1 := char2oct("PAYLOAD_1"); var octetstring v_payload2 := char2oct("PAYLOAD_2"); var boolean v_msg1Received := false; // Test control if (not PICS_GN_LS_REQ_SRC) { log("*** " & testcasename() & ": PICS_GN_LS_REQ_SRC required for executing the TC ***"); setverdict(inconc); stop; } // Test component configuration f_cf01Up(); v_longPosVectorNodeA := f_getPosition(c_compNodeA); // Test adapter configuration // Preamble f_prNeighbour(); if ( not f_utTriggerEvent(m_generateGeoUnicastMessageWithLifetimeWithPayload(v_longPosVectorNodeA.gnAddr, v_lt2*1000, v_payload2)) ) { log("*** " & testcasename() & ": INCONC: Trigger failed ***"); f_selfOrClientSyncAndVerdict(c_prDone, e_timeout); } if ( not f_utTriggerEvent(m_generateGeoUnicastMessageWithLifetimeWithPayload(v_longPosVectorNodeA.gnAddr, v_lt1*1000, v_payload1)) ) { log("*** " & testcasename() & ": INCONC: Trigger failed ***"); f_selfOrClientSyncAndVerdict(c_prDone, e_timeout); } tc_ac.start; alt { [] a_receiveLsRequest(?, v_longPosVectorNodeA.gnAddr.mid, v_longPosVectorIut) { tc_ac.stop; f_selfOrClientSyncAndVerdict(c_prDone, e_success); } [] tc_ac.timeout { log("*** " & testcasename() & ": INCONC: Pre-conditions: LS Request not received ***"); f_selfOrClientSyncAndVerdict(c_prDone, e_timeout); } } f_selfOrClientSyncAndVerdict(c_prDone, e_success); // Test Body //Send LS-REPLY after LT2 expiry f_sleepIgnoreDef(int2float(v_lt2)); f_sendGeoNetMessage( valueof(m_geoNwReq_linkLayerBroadcast( m_geoNwPdu( m_geoNwLsReplyPacket( v_longPosVectorNodeA, f_longPosVector2ShortPosVector(v_longPosVectorIut), vc_localSeqNumber ) ) ) )); tc_ac.start; alt { [] a_receiveLsRequest(?, v_longPosVectorNodeA.gnAddr.mid, v_longPosVectorIut) { log("*** " & testcasename() & ": INFO: LS Request retransmission ignored ***"); repeat; } [] geoNetworkingPort.receive( f_receiveGeoNetMessageWithPayload( mw_geoNwInd( mw_geoNwPdu( mw_geoNwUnicastPacket( mw_shortPosVectorPosition(f_longPosVector2ShortPosVector(v_longPosVectorNodeA)), ? ) ) ), v_payload1 ) ) { v_msg1Received := true; repeat; } [] geoNetworkingPort.receive( f_receiveGeoNetMessageWithPayload( mw_geoNwInd( mw_geoNwPdu( mw_geoNwUnicastPacket( mw_shortPosVectorPosition(f_longPosVector2ShortPosVector(v_longPosVectorNodeA)), ? ) ) ), v_payload2 ) ) { tc_ac.stop; log("*** " & testcasename() & ": FAIL: message with elapsed lifetime received ***"); f_selfOrClientSyncAndVerdict(c_tbDone, e_error); } [] tc_ac.timeout { if(v_msg1Received == true) { log("*** " & testcasename() & ": PASS: message with running lifetime received ***"); f_selfOrClientSyncAndVerdict(c_tbDone, e_success); } else { log("*** " & testcasename() & ": FAIL: message with running lifetime not received ***"); f_selfOrClientSyncAndVerdict(c_tbDone, e_error); } } } // Postamble f_poNeighbour(); f_cf01Down(); } // end f_GEONW_PON_LOS_BV_13 /** * @desc TP Function for TC_GEONW_PON_LOS_BV_13 */ function f_GEONW_PON_LOS_BV_14() runs on ItsGeoNetworking { // Local variables var LongPosVector v_longPosVectorNodeA; var LongPosVector v_longPosVectorIut; var integer v_maxNbrRetrans := f_getLsMaxRetrans(); var integer v_nbLsReceived := 0; var UInt16 v_LT1; // Test control if (not PICS_GN_LS_REQ_SRC) { log("*** " & testcasename() & ": PICS_GN_LS_REQ_SRC required for executing the TC ***"); setverdict(inconc); stop; } // Test component configuration f_cf01Up(); v_longPosVectorNodeA := f_getPosition(c_compNodeA); // Test adapter configuration // Preamble f_prNeighbour(); v_LT1 := float2int(int2float(v_maxNbrRetrans + 2) * f_getLsRetransmitTimer() * 1000.0); if ( not f_utTriggerEvent(m_generateGeoUnicastMessageWithLifetime(v_longPosVectorNodeA.gnAddr,v_LT1)) ) { log("*** " & testcasename() & ": INCONC: Trigger failed ***"); f_selfOrClientSyncAndVerdict(c_prDone, e_timeout); } tc_wait.start(int2float(v_LT1)); tc_ac.start; alt { [] a_receiveLsRequest(?, v_longPosVectorNodeA.gnAddr.mid, v_longPosVectorIut) { tc_ac.stop; f_selfOrClientSyncAndVerdict(c_prDone, e_success); } [] tc_ac.timeout { log("*** " & testcasename() & ": Pre-conditions: Expected message not received ***"); f_selfOrClientSyncAndVerdict(c_prDone, e_timeout); } } tc_ac.start; alt { [] a_receiveLsRequest(?, v_longPosVectorNodeA.gnAddr.mid, v_longPosVectorIut) { tc_ac.stop; v_nbLsReceived := v_nbLsReceived + 1; if(v_nbLsReceived > v_maxNbrRetrans) { //first LS request is not counted as a retransmission log("*** " & testcasename() & ": Pre-conditions: LS_REQUEST retransmitted more than itsGnLocationServiceMaxRetrans times ***"); f_selfOrClientSyncAndVerdict(c_prDone, e_error); } else { tc_ac.start; repeat; } } [] tc_ac.timeout { if(v_nbLsReceived == (v_maxNbrRetrans)) { //first LS request is not counted as a retransmission log("*** " & testcasename() & ": Pre-conditions: LS_REQUEST retransmitted itsGnLocationServiceMaxRetrans times ***"); f_selfOrClientSyncAndVerdict(c_prDone, e_success); } else { log("*** " & testcasename() & ": Pre-conditions: LS_REQUEST retransmitted less than itsGnLocationServiceMaxRetrans times ***"); f_selfOrClientSyncAndVerdict(c_prDone, e_error); } } } // Test Body if (tc_wait.running) { f_sendGeoNetMessage( valueof(m_geoNwReq_linkLayerBroadcast( m_geoNwPdu( m_geoNwUnicastPacket( v_longPosVectorNodeA, f_longPosVector2ShortPosVector(v_longPosVectorIut), vc_localSeqNumber ) ) ) )); tc_wait.stop; tc_noac.start; alt { // no check for ItsNodeA address as no other trigger for messages exists [] geoNetworkingPort.receive { tc_noac.stop; log("*** " & testcasename() & ": FAIL: Unexpected message received ***"); f_selfOrClientSyncAndVerdict(c_tbDone, e_error); } [] tc_noac.timeout { log("*** " & testcasename() & ": PASS: No message was sent ***"); f_selfOrClientSyncAndVerdict(c_tbDone, e_success); } } } else { log("*** " & testcasename() & ": FAIL: LT1 expired ***"); f_selfOrClientSyncAndVerdict(c_tbDone, e_error); } // Postamble f_poNeighbour(); f_cf01Down(); } // end 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( valueof(m_geoNwReq_linkLayerBroadcast( m_geoNwPdu( m_geoNwUnicastPacket( v_longPosVectorNodeA, f_longPosVector2ShortPosVector(v_longPosVectorNodeB), vc_localSeqNumber ) ) ) )); tc_ac.start; alt { [] a_receiveGeoUnicastWithDestination(mw_shortPosVectorPosition(f_longPosVector2ShortPosVector(v_longPosVectorNodeA))) { tc_ac.stop; log("*** " & testcasename() & ": PASS: GUC packet received correctly ***"); f_selfOrClientSyncAndVerdict(c_tbDone, e_success); } [] tc_ac.timeout { log("*** " & testcasename() & ": FAIL: Expected message not received ***"); f_selfOrClientSyncAndVerdict(c_tbDone, e_error); } } // Postamble f_poNeighbour(); f_cf01Down(); } // end 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( valueof(m_geoNwReq_linkLayerBroadcast( m_geoNwPdu( m_geoNwUnicastPacket( v_longPosVectorNodeA, f_longPosVector2ShortPosVector(v_longPosVectorIut), vc_localSeqNumber ) ) ) )); tc_noac.start; alt { [] a_receiveLsRequest(?, v_longPosVectorNodeA.gnAddr.mid, v_longPosVectorIut) { tc_noac.stop; log("*** " & testcasename() & ": FAIL: LS Request retransmitted ***"); f_selfOrClientSyncAndVerdict(c_tbDone, e_error); } [] a_receiveGeoUnicastWithDestination(mw_shortPosVectorPosition(f_longPosVector2ShortPosVector(v_longPosVectorNodeA))) { log("*** " & testcasename() & ": INFO: GUC packet received ***"); repeat; } [] tc_noac.timeout { log("*** " & testcasename() & ": PASS: LS Request not retransmitted ***"); f_selfOrClientSyncAndVerdict(c_tbDone, e_success); } } // Postamble f_poNeighbour(); f_cf01Down(); } // end 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( valueof(m_geoNwReq_linkLayerBroadcast( m_geoNwPdu( m_geoNwUnicastPacket( v_longPosVectorNodeA, f_longPosVector2ShortPosVector(v_longPosVectorNodeB), vc_localSeqNumber ) ) ) )); tc_noac.start; alt { [] a_receiveLsRequest(?, v_longPosVectorNodeA.gnAddr.mid, v_longPosVectorIut) { tc_noac.stop; log("*** " & testcasename() & ": FAIL: LS Request retransmitted ***"); f_selfOrClientSyncAndVerdict(c_tbDone, e_error); } [] a_receiveGeoUnicastWithDestination(mw_shortPosVectorPosition(f_longPosVector2ShortPosVector(v_longPosVectorNodeA))) { log("*** " & testcasename() & ": INFO: GUC packet received ***"); repeat; } [] tc_noac.timeout { log("*** " & testcasename() & ": PASS: LS Request not retransmitted ***"); f_selfOrClientSyncAndVerdict(c_tbDone, e_success); } } // Postamble f_poNeighbour(); f_cf01Down(); } // end 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(valueof(m_geoNwReq_linkLayerBroadcast(m_geoNwPdu( m_geoNwLsReplyPacket( v_longPosVectorNodeA, f_longPosVector2ShortPosVector(v_longPosVectorIut), vc_localSeqNumber ) )))); f_selfOrClientSyncAndVerdict(c_prDone, e_success); // Test Body // /!\ This pre-condition has impact on test body if ( not f_utTriggerEvent(m_generateGeoUnicastMessage(v_longPosVectorNodeA.gnAddr)) ) { log("*** " & testcasename() & ": INCONC: Trigger failed ***"); f_selfOrClientSyncAndVerdict(c_tbDone, e_timeout); } tc_noac.start; alt { [] geoNetworkingPort.receive(mw_geoNwInd(mw_geoNwPdu(?))) { tc_noac.stop; log("*** " & testcasename() & ": FAIL: GUC packet received ***"); f_selfOrClientSyncAndVerdict(c_tbDone, e_error); } [] tc_noac.timeout { log("*** " & testcasename() & ": PASS: No message received ***"); f_selfOrClientSyncAndVerdict(c_tbDone, e_success); } } // Postamble f_poNeighbour(); } // end 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; //FIXME RGY c_sequenceNumberC shall not be constant as calls a function returning a variable // const UInt16 c_sequenceNumberC := f_getInitialSequenceNumber(); var UInt16 c_sequenceNumberC := f_getInitialSequenceNumber(); // Test control if (not PICS_GN_GUC_SRC) { log("*** " & testcasename() & ": PICS_GN_GUC_SRC required for executing the TC ***"); setverdict(inconc); stop; } // Test component configuration f_cf03Up(); // Preamble // Start components v_nodeB := f_getComponent(c_compNodeB); v_nodeC := f_getComponent(c_compNodeC); v_nodeB.start(f_GEONW_PON_FPB_BV_02_nodeB(c_sequenceNumberC)); v_nodeC.start(f_GEONW_PON_FPB_BV_02_nodeC(c_sequenceNumberC)); // Synchronization f_serverSync2ClientsAndStop({c_prDone, c_tbDone}); // Cleanup f_cf03Down(); } // end 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( valueof(m_geoNwReq_linkLayerBroadcast( m_geoNwPdu( m_geoNwUnicastPacket( v_longPosVectorNodeC, f_longPosVector2ShortPosVector(v_longPosVectorNodeA), vc_localSeqNumber ), -, c_defaultHopLimit ) ) )); f_selfOrClientSyncAndVerdict(c_prDone, e_success); // Test Body f_selfOrClientSyncAndVerdict(c_tbDone, e_success); // Postamble f_poNeighbour(); } // end 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; //FIXME RGY c_sequenceNumberC shall not be constant as calls a function returning a variable // const UInt16 c_sequenceNumberC := f_getInitialSequenceNumber(); var UInt16 c_sequenceNumberC := f_getInitialSequenceNumber(); const integer c_messageCount := 2; // Test control if (not PICS_GN_GUC_SRC) { log("*** " & testcasename() & ": PICS_GN_GUC_SRC required for executing the TC ***"); setverdict(inconc); stop; } // Test component configuration f_cf03Up(); // Preamble // Start components v_nodeB := f_getComponent(c_compNodeB); v_nodeC := f_getComponent(c_compNodeC); v_nodeB.start(f_GEONW_PON_FPB_BV_03_nodeB(c_sequenceNumberC, c_messageCount)); v_nodeC.start(f_GEONW_PON_FPB_BV_03_nodeC(c_sequenceNumberC, c_messageCount)); // Synchronization f_serverSync2ClientsAndStop({c_prDone, c_tbDone}); // Cleanup f_cf03Down(); } // end 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( valueof(m_geoNwReq_linkLayerBroadcast( m_geoNwPdu( m_geoNwUnicastPacket( v_longPosVectorNodeC, f_longPosVector2ShortPosVector(v_longPosVectorNodeA), vc_localSeqNumber ) ) ) )); } f_selfOrClientSyncAndVerdict(c_prDone, e_success); // Test Body f_selfOrClientSyncAndVerdict(c_tbDone, e_success); // Postamble f_poNeighbour(); } // end 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( valueof(m_geoNwReq_linkLayerBroadcast( m_geoNwPdu( m_geoNwUnicastPacket( v_longPosVectorNodeC, f_longPosVector2ShortPosVector(v_longPosVectorNodeA), vc_localSeqNumber ), m_lifetimeBase1s(p_packetLifetime), c_defaultHopLimit ) ) )); f_selfOrClientSyncAndVerdict(c_prDone, e_success); // Test Body f_selfOrClientSyncAndVerdict(c_tbDone, e_success); // Postamble f_poNeighbour(); } // end 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(valueof(m_geoNwReq_linkLayerBroadcast(m_geoNwPdu( m_geoNwLsReplyPacket( v_longPosVectorNodeA, f_longPosVector2ShortPosVector(v_longPosVectorIut), vc_localSeqNumber ) )))); if ( not f_utTriggerEvent(m_generateGeoUnicastMessage(v_longPosVectorNodeA.gnAddr)) ) { log("*** " & testcasename() & ": INCONC: Trigger failed ***"); f_selfOrClientSyncAndVerdict(c_prDone, e_timeout); } f_selfOrClientSyncAndVerdict(c_prDone, e_success); // Test Body f_selfOrClientSyncAndVerdict(c_tbDone, e_success); // Postamble f_poNeighbour(); } // end 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 := 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(valueof(m_geoNwReq_linkLayerBroadcast(m_geoNwPdu( m_geoNwLsReplyPacket( v_longPosVectorNodeA, f_longPosVector2ShortPosVector(v_longPosVectorIut), vc_localSeqNumber ) )))); f_selfOrClientSyncAndVerdict(c_prDone, e_success); // Test Body if(not f_utTriggerEvent(m_generateGeoUnicastMessageWithTrafficClass( v_longPosVectorNodeA.gnAddr, valueof(m_trafficClass(e_scfDisabled))))) { log("*** " & testcasename() & ": INCONC: Trigger failed ***"); f_selfOrClientSyncAndVerdict(c_tbDone, e_timeout); } tc_ac.start; alt { [] geoNetworkingPort.receive( mw_geoNwInd( mw_geoNwPdu( mw_geoNwUnicastPacket( f_longPosVector2ShortPosVector(v_longPosVectorNodeA), ? ) ) ) ) { tc_ac.stop; log("*** " & testcasename() & ": PASS: Pre-conditions: TSB correctly broadcasted ***"); f_selfOrClientSyncAndVerdict(c_tbDone, e_success); } [] tc_ac.timeout { log("*** " & testcasename() & ": FAIL: Pre-conditions: TSB not broadcasted ***"); f_selfOrClientSyncAndVerdict(c_tbDone, e_error); } } // Postamble f_poDefault(); } // end 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(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(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(); } // end f_GEONW_PON_FPB_BV_11_03 /** * @desc Behavior function for NodeB (TC_GEONW_PON_FPB_BV_11_03) */ function f_GEONW_PON_FPB_BV_11_03_nodeB() runs on ItsGeoNetworking { // Local variables var LongPosVector v_longPosVectorIut := f_getPosition(c_compIut); // Preamble f_prNonNeighbour(); f_selfOrClientSyncAndVerdict(c_prDone, e_success); // Test Body tc_ac.start; alt { [] geoNetworkingPort.receive( mw_geoNwInd( mw_geoNwPdu( mw_geoNwBroadcastPacket( mw_longPosVectorPosition(v_longPosVectorIut), ? ) ) ) ) { tc_ac.stop; log("*** " & testcasename() & ": PASS: Pre-conditions: TSB correctly broadcasted ***"); f_selfOrClientSyncAndVerdict(c_tbDone, e_success); } [] tc_ac.timeout { log("*** " & testcasename() & ": FAIL: Pre-conditions: TSB not broadcasted ***"); f_selfOrClientSyncAndVerdict(c_tbDone, e_error); } } // Postamble f_poDefault(); } // end f_GEONW_PON_FPB_BV_11_03_nodeB /** * @desc Behavior function for NodeC (TC_GEONW_PON_FPB_BV_11_03) */ function f_GEONW_PON_FPB_BV_11_03_nodeC() runs on ItsGeoNetworking { // Local variables var LongPosVector v_longPosVectorIut := f_getPosition(c_compIut); // Preamble f_prNonNeighbour(); f_selfOrClientSyncAndVerdict(c_prDone, e_success); // Test Body if(not f_utTriggerEvent(m_generateGeoBroadcastMessageWithTrafficClass( f_getArea(c_area2), valueof(m_trafficClass(e_scfDisabled))))) { log("*** " & testcasename() & ": INCONC: Trigger failed ***"); f_selfOrClientSyncAndVerdict(c_tbDone, e_timeout); } tc_ac.start; alt { [] geoNetworkingPort.receive( mw_geoNwInd( mw_geoNwPdu( mw_geoNwBroadcastPacket( mw_longPosVectorPosition(v_longPosVectorIut), ? ) ) ) ) { tc_ac.stop; log("*** " & testcasename() & ": PASS: Pre-conditions: TSB correctly broadcasted ***"); f_selfOrClientSyncAndVerdict(c_tbDone, e_success); } [] tc_ac.timeout { log("*** " & testcasename() & ": FAIL: Pre-conditions: TSB not broadcasted ***"); f_selfOrClientSyncAndVerdict(c_tbDone, e_error); } } // Postamble f_poDefault(); } // end f_GEONW_PON_FPB_BV_11_03_nodeC /** * @desc TP Function for TC_GEONW_PON_FPB_BV_11_04 */ function f_GEONW_PON_FPB_BV_11_04() runs on ItsMtc { // Local variables var ItsGeoNetworking v_nodeB; var ItsGeoNetworking v_nodeC; // Test control if (not PICS_GN_TSB_SRC) { log("*** " & testcasename() & ": PICS_GN_TSB_SRC required for executing the TC ***"); setverdict(inconc); stop; } // Test component configuration f_cf03Up(c_compNodeC); // Preamble // Start components v_nodeB := f_getComponent(c_compNodeB); v_nodeC := f_getComponent(c_compNodeC); v_nodeB.start(f_GEONW_PON_FPB_BV_11_04_nodeB()); v_nodeC.start(f_GEONW_PON_FPB_BV_11_04_nodeC()); // Synchronization f_serverSync2ClientsAndStop({c_prDone, c_tbDone}); // Cleanup f_cf03Down(); } // end f_GEONW_PON_FPB_BV_11_04 /** * @desc Behavior function for NodeB (TC_GEONW_PON_FPB_BV_11_04) */ function f_GEONW_PON_FPB_BV_11_04_nodeB() runs on ItsGeoNetworking { // Local variables var LongPosVector v_longPosVectorIut := f_getPosition(c_compIut); // Preamble f_prNonNeighbour(); f_selfOrClientSyncAndVerdict(c_prDone, e_success); // Test Body tc_ac.start; alt { [] geoNetworkingPort.receive( mw_geoNwInd( mw_geoNwPdu( mw_geoNwTsbPacket( ?, mw_longPosVectorPosition(v_longPosVectorIut) ) ) ) ) { tc_ac.stop; log("*** " & testcasename() & ": PASS: Pre-conditions: TSB correctly broadcasted ***"); f_selfOrClientSyncAndVerdict(c_tbDone, e_success); } [] tc_ac.timeout { log("*** " & testcasename() & ": FAIL: Pre-conditions: TSB not broadcasted ***"); f_selfOrClientSyncAndVerdict(c_tbDone, e_error); } } // Postamble f_poDefault(); } // end f_GEONW_PON_FPB_BV_11_04_nodeB /** * @desc Behavior function for NodeC (TC_GEONW_PON_FPB_BV_11_04) */ function f_GEONW_PON_FPB_BV_11_04_nodeC() runs on ItsGeoNetworking { // Local variables var LongPosVector v_longPosVectorIut := f_getPosition(c_compIut); // Preamble f_prNonNeighbour(); f_selfOrClientSyncAndVerdict(c_prDone, e_success); // Test Body if(not f_utTriggerEvent(valueof(m_generateTsbMessageWithTrafficClass(valueof(m_trafficClass(e_scfDisabled)))))) { log("*** " & testcasename() & ": INCONC: Trigger failed ***"); f_selfOrClientSyncAndVerdict(c_tbDone, e_timeout); } tc_ac.start; alt { [] geoNetworkingPort.receive( mw_geoNwInd( mw_geoNwPdu( mw_geoNwTsbPacket( ?, mw_longPosVectorPosition(v_longPosVectorIut) ) ) ) ) { tc_ac.stop; log("*** " & testcasename() & ": PASS: Pre-conditions: TSB correctly broadcasted ***"); f_selfOrClientSyncAndVerdict(c_tbDone, e_success); } [] tc_ac.timeout { log("*** " & testcasename() & ": FAIL: Pre-conditions: TSB not broadcasted ***"); f_selfOrClientSyncAndVerdict(c_tbDone, e_error); } } // Postamble f_poDefault(); } // end f_GEONW_PON_FPB_BV_11_04_nodeC /** * @desc TP Function for TC_GEONW_PON_FPB_BV_11_05 */ function f_GEONW_PON_FPB_BV_11_05() runs on ItsMtc { // Local variables var ItsGeoNetworking v_nodeB; var ItsGeoNetworking v_nodeC; // Test control if (not PICS_GN_TSB_SRC) { log("*** " & testcasename() & ": PICS_GN_TSB_SRC required for executing the TC ***"); setverdict(inconc); stop; } // Test component configuration f_cf03Up(c_compNodeC); // Preamble // Start components v_nodeB := f_getComponent(c_compNodeB); v_nodeC := f_getComponent(c_compNodeC); v_nodeB.start(f_GEONW_PON_FPB_BV_11_05_nodeB()); v_nodeC.start(f_GEONW_PON_FPB_BV_11_05_nodeC()); // Synchronization f_serverSync2ClientsAndStop({c_prDone, c_tbDone}); // Cleanup f_cf03Down(); } // end f_GEONW_PON_FPB_BV_11_05 /** * @desc Behavior function for NodeB (TC_GEONW_PON_FPB_BV_11_05) */ function f_GEONW_PON_FPB_BV_11_05_nodeB() runs on ItsGeoNetworking { // Local variables var LongPosVector v_longPosVectorIut := f_getPosition(c_compIut); // Preamble f_prNonNeighbour(); f_selfOrClientSyncAndVerdict(c_prDone, e_success); // Test Body tc_ac.start; alt { [] geoNetworkingPort.receive( mw_geoNwInd( mw_geoNwPdu( mw_geoNwShbPacket( mw_longPosVectorPosition(v_longPosVectorIut) ) ) ) ) { tc_ac.stop; log("*** " & testcasename() & ": PASS: Pre-conditions: TSB correctly broadcasted ***"); f_selfOrClientSyncAndVerdict(c_tbDone, e_success); } [] tc_ac.timeout { log("*** " & testcasename() & ": FAIL: Pre-conditions: TSB not broadcasted ***"); f_selfOrClientSyncAndVerdict(c_tbDone, e_error); } } // Postamble f_poDefault(); } // end f_GEONW_PON_FPB_BV_11_05_nodeB /** * @desc Behavior function for NodeC (TC_GEONW_PON_FPB_BV_11_05) */ function f_GEONW_PON_FPB_BV_11_05_nodeC() runs on ItsGeoNetworking { // Local variables var LongPosVector v_longPosVectorIut := f_getPosition(c_compIut); // Preamble f_prNonNeighbour(); f_selfOrClientSyncAndVerdict(c_prDone, e_success); // Test Body if(not f_utTriggerEvent(valueof(m_generateShbMessageWithTrafficClass(valueof(m_trafficClass(e_scfDisabled)))))) { log("*** " & testcasename() & ": INCONC: Trigger failed ***"); f_selfOrClientSyncAndVerdict(c_tbDone, e_timeout); } tc_ac.start; alt { [] geoNetworkingPort.receive( mw_geoNwInd( mw_geoNwPdu( mw_geoNwShbPacket( mw_longPosVectorPosition(v_longPosVectorIut) ) ) ) ) { tc_ac.stop; log("*** " & testcasename() & ": PASS: Pre-conditions: TSB correctly broadcasted ***"); f_selfOrClientSyncAndVerdict(c_tbDone, e_success); } [] tc_ac.timeout { log("*** " & testcasename() & ": FAIL: Pre-conditions: TSB not broadcasted ***"); f_selfOrClientSyncAndVerdict(c_tbDone, e_error); } } // Postamble f_poDefault(); } // end f_GEONW_PON_FPB_BV_11_05_nodeC } // end GEONW_PON_FPB_BV_11 group GEONW_PON_FPB_BV_12 { /** * @desc TP Function for TC_GEONW_PON_FPB_BV_12_01 */ function f_GEONW_PON_FPB_BV_12_01() runs on ItsMtc { // Local variables var ItsGeoNetworking v_nodeB; var ItsGeoNetworking v_nodeC; // Test control if (not PICS_GN_GUC_SRC) { log("*** " & testcasename() & ": PICS_GN_GUC_SRC required for executing the TC ***"); setverdict(inconc); stop; } // Test component configuration f_cf03Up(c_compNodeC); // Preamble // Start components v_nodeB := f_getComponent(c_compNodeB); v_nodeC := f_getComponent(c_compNodeC); v_nodeB.start(f_GEONW_PON_FPB_BV_12_01_nodeB()); v_nodeC.start(f_GEONW_PON_FPB_BV_12_01_nodeC()); // Synchronization f_serverSync2ClientsAndStop({c_prDone, c_tbDone}); // Cleanup f_cf03Down(); } // end f_GEONW_PON_FPB_BV_12_01 /** * @desc Behavior function for NodeB (TC_GEONW_PON_FPB_BV_12_01) */ function f_GEONW_PON_FPB_BV_12_01_nodeB() runs on ItsGeoNetworking { // Local variablesa var LongPosVector v_longPosVectorNodeA := f_getPosition(c_compNodeA); // Preamble f_prNonNeighbour(); f_selfOrClientSyncAndVerdict(c_prDone, e_success); // Test Body tc_ac.start; alt { [] geoNetworkingPort.receive( mw_geoNwInd( mw_geoNwPdu( mw_geoNwUnicastPacket( f_longPosVector2ShortPosVector(v_longPosVectorNodeA), ? ) ) ) ) { tc_ac.stop; log("*** " & testcasename() & ": PASS: Pre-conditions: TSB correctly broadcasted ***"); f_selfOrClientSyncAndVerdict(c_tbDone, e_success); } [] tc_ac.timeout { log("*** " & testcasename() & ": FAIL: Pre-conditions: TSB not broadcasted ***"); f_selfOrClientSyncAndVerdict(c_tbDone, e_error); } } // Postamble f_poDefault(); } // end f_GEONW_PON_FPB_BV_12_01_nodeB /** * @desc Behavior function for NodeC (TC_GEONW_PON_FPB_BV_12_01) */ function f_GEONW_PON_FPB_BV_12_01_nodeC() runs on ItsGeoNetworking { // Local variables var LongPosVector v_longPosVectorNodeA := f_getPosition(c_compNodeA); var LongPosVector v_longPosVectorIut := f_getPosition(c_compIut); // Preamble f_prNonNeighbour(); f_selfOrClientSyncAndVerdict(c_prDone, e_success); // Test Body f_sendGeoNetMessage( valueof(m_geoNwReq_withLinkLayerDestination( m_geoNwPdu( m_geoNwUnicastPacket( f_getPosition(c_compNodeC), f_longPosVector2ShortPosVector(f_getPosition(c_compNodeA)), vc_localSeqNumber, -, m_trafficClass(e_scfDisabled) ), -, c_defaultHopLimit ), -, f_getIutMacAddress() ) )); tc_ac.start; alt { [] geoNetworkingPort.receive( mw_geoNwInd( mw_geoNwPdu( mw_geoNwUnicastPacket( f_longPosVector2ShortPosVector(v_longPosVectorNodeA), ? ) ) ) ) { tc_ac.stop; log("*** " & testcasename() & ": PASS: Pre-conditions: TSB correctly broadcasted ***"); f_selfOrClientSyncAndVerdict(c_tbDone, e_success); } [] tc_ac.timeout { log("*** " & testcasename() & ": FAIL: Pre-conditions: TSB not broadcasted ***"); f_selfOrClientSyncAndVerdict(c_tbDone, e_error); } } // Postamble f_poDefault(); } // end f_GEONW_PON_FPB_BV_12_01_nodeC /** * @desc TP Function for TC_GEONW_PON_FPB_BV_12_02 */ function f_GEONW_PON_FPB_BV_12_02() runs on ItsMtc { // Local variables var ItsGeoNetworking v_nodeB; var ItsGeoNetworking v_nodeC; // Test control if (not PICS_GN_GAC_SRC) { log("*** " & testcasename() & ": PICS_GN_GAC_SRC required for executing the TC ***"); setverdict(inconc); stop; } // Test component configuration f_cf03Up(c_compNodeC); // Preamble // Start components v_nodeB := f_getComponent(c_compNodeB); v_nodeC := f_getComponent(c_compNodeC); v_nodeB.start(f_GEONW_PON_FPB_BV_12_02_nodeB()); v_nodeC.start(f_GEONW_PON_FPB_BV_12_02_nodeC()); // Synchronization f_serverSync2ClientsAndStop({c_prDone, c_tbDone}); // Cleanup f_cf03Down(); } // end f_GEONW_PON_FPB_BV_12_02 /** * @desc Behavior function for NodeB (TC_GEONW_PON_FPB_BV_12_02) */ function f_GEONW_PON_FPB_BV_12_02_nodeB() runs on ItsGeoNetworking { // Local variables var LongPosVector v_longPosVectorNodeC := f_getPosition(c_compNodeC); // Preamble f_prNonNeighbour(); f_selfOrClientSyncAndVerdict(c_prDone, e_success); // Test Body tc_ac.start; alt { [] geoNetworkingPort.receive( mw_geoNwInd( mw_geoNwPdu( mw_geoNwAnycastPacket( mw_longPosVectorPosition(v_longPosVectorNodeC), ? ) ) ) ) { tc_ac.stop; log("*** " & testcasename() & ": PASS: Pre-conditions: TSB correctly broadcasted ***"); f_selfOrClientSyncAndVerdict(c_tbDone, e_success); } [] tc_ac.timeout { log("*** " & testcasename() & ": FAIL: Pre-conditions: TSB not broadcasted ***"); f_selfOrClientSyncAndVerdict(c_tbDone, e_error); } } // Postamble f_poDefault(); } // end f_GEONW_PON_FPB_BV_11_02_nodeB /** * @desc Behavior function for NodeC (TC_GEONW_PON_FPB_BV_12_02) */ function f_GEONW_PON_FPB_BV_12_02_nodeC() runs on ItsGeoNetworking { // Local variables var LongPosVector v_longPosVectorNodeC := f_getPosition(c_compNodeC); // Preamble f_prNonNeighbour(); f_selfOrClientSyncAndVerdict(c_prDone, e_success); // Test Body f_sendGeoNetMessage( valueof(m_geoNwReq_linkLayerBroadcast( m_geoNwPdu( m_geoNwAnycastPacket( v_longPosVectorNodeC, vc_localSeqNumber, f_getGeoAnycastArea(c_area2), -, m_trafficClass(e_scfDisabled) ) ) ) )); tc_ac.start; alt { [] geoNetworkingPort.receive( mw_geoNwInd( mw_geoNwPdu( mw_geoNwAnycastPacket( mw_longPosVectorPosition(v_longPosVectorNodeC), ? ) ) ) ) { tc_ac.stop; log("*** " & testcasename() & ": PASS: Pre-conditions: TSB correctly broadcasted ***"); f_selfOrClientSyncAndVerdict(c_tbDone, e_success); } [] tc_ac.timeout { log("*** " & testcasename() & ": FAIL: Pre-conditions: TSB not broadcasted ***"); f_selfOrClientSyncAndVerdict(c_tbDone, e_error); } } // Postamble f_poDefault(); } // end f_GEONW_PON_FPB_BV_12_02_nodeC /** * @desc TP Function for TC_GEONW_PON_FPB_BV_12_02 */ function f_GEONW_PON_FPB_BV_12_03() runs on ItsMtc { // Local variables var ItsGeoNetworking v_nodeB; var ItsGeoNetworking v_nodeC; // Test control if (not PICS_GN_GBC_SRC) { log("*** " & testcasename() & ": PICS_GN_GBC_SRC required for executing the TC ***"); setverdict(inconc); stop; } // Test component configuration f_cf03Up(c_compNodeC); // Preamble // Start components v_nodeB := f_getComponent(c_compNodeB); v_nodeC := f_getComponent(c_compNodeC); v_nodeB.start(f_GEONW_PON_FPB_BV_12_03_nodeB()); v_nodeC.start(f_GEONW_PON_FPB_BV_12_03_nodeC()); // Synchronization f_serverSync2ClientsAndStop({c_prDone, c_tbDone}); // Cleanup f_cf03Down(); } // end f_GEONW_PON_FPB_BV_12_03 /** * @desc Behavior function for NodeB (TC_GEONW_PON_FPB_BV_12_03) */ function f_GEONW_PON_FPB_BV_12_03_nodeB() runs on ItsGeoNetworking { // Local variables var LongPosVector v_longPosVectorNodeC := f_getPosition(c_compNodeC); // Preamble f_prNonNeighbour(); f_selfOrClientSyncAndVerdict(c_prDone, e_success); // Test Body tc_ac.start; alt { [] geoNetworkingPort.receive( mw_geoNwInd( mw_geoNwPdu( mw_geoNwBroadcastPacket( mw_longPosVectorPosition(v_longPosVectorNodeC), ? ) ) ) ) { tc_ac.stop; log("*** " & testcasename() & ": PASS: Pre-conditions: TSB correctly broadcasted ***"); f_selfOrClientSyncAndVerdict(c_tbDone, e_success); } [] tc_ac.timeout { log("*** " & testcasename() & ": FAIL: Pre-conditions: TSB not broadcasted ***"); f_selfOrClientSyncAndVerdict(c_tbDone, e_error); } } // Postamble f_poDefault(); } // end f_GEONW_PON_FPB_BV_12_03_nodeB /** * @desc Behavior function for NodeC (TC_GEONW_PON_FPB_BV_12_03) */ function f_GEONW_PON_FPB_BV_12_03_nodeC() runs on ItsGeoNetworking { // Local variables var LongPosVector v_longPosVectorNodeC := f_getPosition(c_compNodeC); // Preamble f_prNonNeighbour(); f_selfOrClientSyncAndVerdict(c_prDone, e_success); // Test Body f_sendGeoNetMessage( valueof(m_geoNwReq_linkLayerBroadcast( m_geoNwPdu( m_geoNwBroadcastPacket( v_longPosVectorNodeC, vc_localSeqNumber, f_getGeoBroadcastArea(c_area2), -, m_trafficClass(e_scfDisabled) ) ) ) )); tc_ac.start; alt { [] geoNetworkingPort.receive( mw_geoNwInd( mw_geoNwPdu( mw_geoNwBroadcastPacket( mw_longPosVectorPosition(v_longPosVectorNodeC), ? ) ) ) ) { tc_ac.stop; log("*** " & testcasename() & ": PASS: Pre-conditions: TSB correctly broadcasted ***"); f_selfOrClientSyncAndVerdict(c_tbDone, e_success); } [] tc_ac.timeout { log("*** " & testcasename() & ": FAIL: Pre-conditions: TSB not broadcasted ***"); f_selfOrClientSyncAndVerdict(c_tbDone, e_error); } } // Postamble f_poDefault(); } // end f_GEONW_PON_FPB_BV_11_03_nodeC /** * @desc TP Function for TC_GEONW_PON_FPB_BV_12_04 */ function f_GEONW_PON_FPB_BV_12_04() runs on ItsMtc { // Local variables var ItsGeoNetworking v_nodeB; var ItsGeoNetworking v_nodeC; // Test control if (not PICS_GN_TSB_SRC) { log("*** " & testcasename() & ": PICS_GN_TSB_SRC required for executing the TC ***"); setverdict(inconc); stop; } // Test component configuration f_cf03Up(c_compNodeC); // Preamble // Start components v_nodeB := f_getComponent(c_compNodeB); v_nodeC := f_getComponent(c_compNodeC); v_nodeB.start(f_GEONW_PON_FPB_BV_12_04_nodeB()); v_nodeC.start(f_GEONW_PON_FPB_BV_12_04_nodeC()); // Synchronization f_serverSync2ClientsAndStop({c_prDone, c_tbDone}); // Cleanup f_cf03Down(); } // end f_GEONW_PON_FPB_BV_11_04 /** * @desc Behavior function for NodeB (TC_GEONW_PON_FPB_BV_12_04) */ function f_GEONW_PON_FPB_BV_12_04_nodeB() runs on ItsGeoNetworking { // Local variables var LongPosVector v_longPosVectorNodeC := f_getPosition(c_compNodeC); // Preamble f_prNonNeighbour(); f_selfOrClientSyncAndVerdict(c_prDone, e_success); // Test Body tc_ac.start; alt { [] geoNetworkingPort.receive( mw_geoNwInd( mw_geoNwPdu( mw_geoNwTsbPacket( ?, mw_longPosVectorPosition(v_longPosVectorNodeC) ) ) ) ) { tc_ac.stop; log("*** " & testcasename() & ": PASS: Pre-conditions: TSB correctly broadcasted ***"); f_selfOrClientSyncAndVerdict(c_tbDone, e_success); } [] tc_ac.timeout { log("*** " & testcasename() & ": FAIL: Pre-conditions: TSB not broadcasted ***"); f_selfOrClientSyncAndVerdict(c_tbDone, e_error); } } // Postamble f_poDefault(); } // end f_GEONW_PON_FPB_BV_12_04_nodeB /** * @desc Behavior function for NodeC (TC_GEONW_PON_FPB_BV_12_04) */ function f_GEONW_PON_FPB_BV_12_04_nodeC() runs on ItsGeoNetworking { // Local variables var LongPosVector v_longPosVectorNodeC := f_getPosition(c_compNodeC); // Preamble f_prNonNeighbour(); f_selfOrClientSyncAndVerdict(c_prDone, e_success); // Test Body f_sendGeoNetMessage( valueof(m_geoNwReq_linkLayerBroadcast( m_geoNwPdu( m_geoNwTsbPacket( vc_localSeqNumber, v_longPosVectorNodeC, c_defaultHopLimit, m_trafficClass(e_scfDisabled) ), -, c_defaultHopLimit ) ) )); tc_ac.start; alt { [] geoNetworkingPort.receive( mw_geoNwInd( mw_geoNwPdu( mw_geoNwTsbPacket( ?, mw_longPosVectorPosition(v_longPosVectorNodeC) ) ) ) ) { tc_ac.stop; log("*** " & testcasename() & ": PASS: Pre-conditions: TSB correctly broadcasted ***"); f_selfOrClientSyncAndVerdict(c_tbDone, e_success); } [] tc_ac.timeout { log("*** " & testcasename() & ": FAIL: Pre-conditions: TSB not broadcasted ***"); f_selfOrClientSyncAndVerdict(c_tbDone, e_error); } } // Postamble f_poDefault(); } // end f_GEONW_PON_FPB_BV_12_04_nodeC } // end GEONW_PON_FPB_BV_12 } // end geoForwardingPacketBuffer // 6.2.2.6 group geoGeoNetworkingAddress { /** * @desc TP Function for TC_GEONW_PON_GNA_BV_01 */ function f_GEONW_PON_GNA_BV_01() runs on ItsGeoNetworking { // Local variables var LongPosVector v_longPosVectorIut; // Test control if (not PICS_GN_ADDR_AUTO) { log("*** " & testcasename() & ": PICS_GN_ADDR_AUTO required for executing the TC ***"); setverdict(inconc); stop; } if(f_getIutGnLocalAddressConfigurationMethod() != e_auto) { log("*** " & testcasename() & ": PICS_GN_LOCAL_ADDR_CONF_METHOD == e_auto required for executing the TC ***"); setverdict(inconc); stop; } // Test component configuration f_cf01Up(); v_longPosVectorIut := f_getPosition(c_compIut); // Test adapter configuration // Preamble f_prDefault(); f_acTriggerEvent(m_startPassBeaconing(m_beaconHeader(v_longPosVectorIut).beaconHeader)); f_selfOrClientSyncAndVerdict(c_prDone, e_success); // Test Body tc_ac.start; alt { [] geoNetworkingPort.receive(mw_geoNwInd(mw_geoNwPdu( mw_geoNwBeaconPacket( mw_longPosVectorAny(f_getIutGnLocalAddress()) // IUT's SOPV )))) { tc_ac.stop; log("*** " & testcasename() & ": GN address is correct ***"); f_selfOrClientSyncAndVerdict(c_tbDone, e_success); } [] geoNetworkingPort.receive(mw_geoNwInd(mw_geoNwPdu( mw_geoNwBeaconPacket( ? // any SOPV )))) { tc_ac.stop; log("*** " & testcasename() & ": GN address is not correct ***"); f_selfOrClientSyncAndVerdict(c_tbDone, e_error); } [] tc_ac.timeout { log("*** " & testcasename() & ": Expected message not received ***"); f_selfOrClientSyncAndVerdict(c_tbDone, e_timeout); } } // Postamble f_poDefault(); f_cf01Down(); } // end f_GEONW_PON_GNA_BV_01 /** * @desc TP Function for TC_GEONW_PON_GNA_BV_02 */ function f_GEONW_PON_GNA_BV_02() runs on ItsGeoNetworking { // Local variables var LongPosVector v_longPosVectorIut; var LongPosVector v_longPosVectorNodeB; var GeoNetworkingInd v_geoNetInd; var GN_Address v_iutGnAddress := valueof(m_dummyGnAddr); // Test control if (not PICS_GN_DAD) { log("*** " & testcasename() & ": PICS_GN_DAD required for executing the TC ***"); setverdict(inconc); stop; } // Test component configuration f_cf01Up(); v_longPosVectorIut := f_getPosition(c_compIut); v_longPosVectorNodeB := f_getPosition(c_compNodeB); // Test adapter configuration // Preamble f_prDefault(); f_prNeighbour(); if ( not f_utTriggerEvent(m_generateShbMessage) ) { log("*** " & testcasename() & ": INCONC: Trigger failed ***"); f_selfOrClientSyncAndVerdict(c_tbDone, e_timeout); } tc_ac.start; alt { [] geoNetworkingPort.receive(mw_geoNwInd(mw_geoNwPdu( mw_geoNwShbPacket( ? // SO PV )))) -> value v_geoNetInd { v_iutGnAddress := valueof(v_geoNetInd.msgIn.gnPacket.packet.extendedHeader.shbHeader.srcPosVector.gnAddr); } [] tc_ac.timeout { log("*** " & testcasename() & ": Expected message not received ***"); f_selfOrClientSyncAndVerdict(c_prDone, e_timeout); } } f_selfOrClientSyncAndVerdict(c_prDone, e_success); // Test Body v_longPosVectorNodeB.gnAddr := v_iutGnAddress; f_sendGeoNetMessage(valueof(m_geoNwReq_linkLayerBroadcast(m_geoNwPdu(m_geoNwShbPacket(v_longPosVectorNodeB), -, c_hopLimit1)))); f_sleep(0.5); if ( not f_utTriggerEvent(m_generateShbMessage) ) { log("*** " & testcasename() & ": INCONC: Trigger failed ***"); f_selfOrClientSyncAndVerdict(c_tbDone, e_timeout); } tc_ac.start; alt { [] geoNetworkingPort.receive(mw_geoNwInd(mw_geoNwPdu( mw_geoNwShbPacket( mw_longPosVectorAny(v_iutGnAddress) // SO PV )))) { log("*** " & testcasename() & ": IUT is still using old GN address. Waiting... ***"); repeat; } [] geoNetworkingPort.receive(mw_geoNwInd(mw_geoNwPdu( mw_geoNwShbPacket( ? // SO PV )))) { tc_ac.stop; log("*** " & testcasename() & ": IUT used new GN address ***"); f_selfOrClientSyncAndVerdict(c_tbDone, e_success); } [] tc_ac.timeout { log("*** " & testcasename() & ": Expected message not received ***"); f_selfOrClientSyncAndVerdict(c_tbDone, e_timeout); } } // Postamble f_poDefault(); f_cf01Down(); } // end f_GEONW_PON_GNA_BV_02 } // end geoGeoNetworkingAddress // 6.2.2.7 group geoBeaconing { /** * @desc TP Function for TC_GEONW_PON_BEA_TI_01 */ function f_GEONW_PON_BEA_TI_01() runs on ItsGeoNetworking { // Local variables var LongPosVector v_longPosVectorIut; var boolean v_beaconReceived := false; timer t_minRetransTimer := f_getBsRetransmitTimer(); timer t_maxRetransTimer := f_getBsRetransmitTimer() + f_getBsMaxJitter(); // Test control if (not PICS_GN_BEACON_SRC) { log("*** " & testcasename() & ": PICS_GN_BEACON_SRC required for executing the TC ***"); setverdict(inconc); stop; } // Test component configuration f_cf01Up(); v_longPosVectorIut := f_getPosition(c_compIut); // Test adapter configuration // Preamble f_prDefault(); f_selfOrClientSyncAndVerdict(c_prDone, e_success); // Test Body f_acTriggerEvent(m_startPassBeaconing(m_beaconHeader(v_longPosVectorIut).beaconHeader)); t_maxRetransTimer.start; alt { [] geoNetworkingPort.receive(mw_geoNwInd(mw_geoNwPdu(mw_geoNwBeaconPacket(?)))) { if (v_beaconReceived == false) { v_beaconReceived := true; t_minRetransTimer.start; t_maxRetransTimer.start; //after the first beacon received, check the retransmission repeat; } if(t_minRetransTimer.running) { log("*** " & testcasename() & ": Beacon not transmitted at prescribed periodicity (too early) ***"); f_selfOrClientSyncAndVerdict(c_tbDone, e_error); } else { log("*** " & testcasename() & ": Beacon transmitted at prescribed periodicity ***"); f_selfOrClientSyncAndVerdict(c_tbDone, e_success); } } [] t_minRetransTimer.timeout { log("*** " & testcasename() & ": Ready for retransmission ***"); repeat; } [] t_maxRetransTimer.timeout { log("*** " & testcasename() & ": Beacon not transmitted at prescribed periodicity (too late) ***"); f_selfOrClientSyncAndVerdict(c_tbDone, e_error); } } f_acTriggerEvent(m_stopPassBeaconing); // Postamble f_poDefault(); f_cf01Down(); } // end f_GEONW_PON_BEA_TI_01 /** * @desc TP Function for TC_GEONW_PON_BEA_TI_02 */ function f_GEONW_PON_BEA_TI_02() runs on ItsGeoNetworking { // Local variables var LongPosVector v_longPosVectorNodeB; var LongPosVector v_longPosVectorIut; var boolean v_geoUnicastReceived := false; var boolean v_readyForRetransmission := false; timer t_minRetransTimer := f_getBsRetransmitTimer() - f_getDeltaTimer(); timer t_maxRetransTimer := f_getBsRetransmitTimer() + f_getBsMaxJitter() + f_getDeltaTimer(); // Test control if (not PICS_GN_BEACON_SRC) { log("*** " & testcasename() & ": PICS_GN_BEACON_SRC required for executing the TC ***"); setverdict(inconc); stop; } // Test component configuration f_cf01Up(); v_longPosVectorNodeB := f_getPosition(c_compNodeB); v_longPosVectorIut := f_getPosition(c_compIut); // Test adapter configuration f_acTriggerEvent(m_startPassBeaconing(m_beaconHeader(v_longPosVectorIut).beaconHeader)); // Preamble f_prNeighbour(); f_selfOrClientSyncAndVerdict(c_prDone, e_success); // Test Body if ( not f_utTriggerEvent(m_generateShbMessage) ) { log("*** " & testcasename() & ": INCONC: Trigger failed ***"); f_selfOrClientSyncAndVerdict(c_tbDone, e_timeout); } tc_ac.start; alt { [] geoNetworkingPort.receive(mw_geoNwInd(mw_geoNwPdu(mw_geoNwShbPacket))) { tc_ac.stop; t_minRetransTimer.start; t_maxRetransTimer.start; v_geoUnicastReceived := true; repeat; } [] geoNetworkingPort.receive(mw_geoNwInd(mw_geoNwPdu(mw_geoNwBeaconPacket))) { if(not(v_geoUnicastReceived)) { repeat; } if(not(v_readyForRetransmission)) { log("*** " & testcasename() & ": Beacon not transmitted at prescribed periodicity (too early) ***"); f_selfOrClientSyncAndVerdict(c_tbDone, e_error); } else { log("*** " & testcasename() & ": Beacon transmitted at prescribed periodicity ***"); f_selfOrClientSyncAndVerdict(c_tbDone, e_success); } } [] t_minRetransTimer.timeout { log("*** " & testcasename() & ": Ready for retransmission ***"); v_readyForRetransmission := true; repeat; } [] t_maxRetransTimer.timeout { log("*** " & testcasename() & ": Beacon not transmitted at prescribed periodicity (too late) ***"); f_selfOrClientSyncAndVerdict(c_tbDone, e_error); } [] tc_ac.timeout { log("*** " & testcasename() & ": GUC not received ***"); f_selfOrClientSyncAndVerdict(c_tbDone, e_timeout); } } f_acTriggerEvent(m_stopPassBeaconing); // Postamble f_poNeighbour(); f_cf01Down(); } // end f_GEONW_PON_BEA_TI_02 } // end geoBeaconing // 6.2.2.8 group geoGeoUnicast { /** * @desc TP Function for TC_GEONW_PON_GUC_BV_01 */ function f_GEONW_PON_GUC_BV_01() runs on ItsGeoNetworking { // Local variables var LongPosVector v_longPosVectorNodeB; // Test control if (not PICS_GN_GUC_SRC) { log("*** " & testcasename() & ": PICS_GN_GUC_SRC required for executing the TC ***"); setverdict(inconc); stop; } if ((f_getGeoUnicastForwardingAlgorithm() != e_greedy) and (f_getGeoUnicastForwardingAlgorithm() != e_unspecified)) { log("*** " & testcasename() & ": PICS_GN_GEOUNICAST_FORWARDING_ALGORITHM == (e_greedy or e_unspecified) required for executing the TC ***"); setverdict(inconc); stop; } // Test component configuration f_cf01Up(); v_longPosVectorNodeB := f_getPosition(c_compNodeB); // Test adapter configuration // Preamble f_prNeighbour(); f_selfOrClientSyncAndVerdict(c_prDone, e_success); // Test Body if ( not f_utTriggerEvent(m_generateGeoUnicastMessage(v_longPosVectorNodeB.gnAddr)) ) { log("*** " & testcasename() & ": INCONC: Trigger failed ***"); f_selfOrClientSyncAndVerdict(c_tbDone, e_timeout); } tc_ac.start; alt { [] geoNetworkingPort.receive( mw_geoNwInd( mw_geoNwPdu( mw_geoNwUnicastPacket( mw_shortPosVectorPosition(f_longPosVector2ShortPosVector(v_longPosVectorNodeB)), ? ) ) ) ) { tc_ac.stop; log("*** " & testcasename() & ": DEPV of the received GUC message correctly set ***"); f_selfOrClientSyncAndVerdict(c_tbDone, e_success); } [] geoNetworkingPort.receive( mw_geoNwInd( mw_geoNwPdu( mw_geoNwUnicastPacket( ?, ? ) ) ) ) { tc_ac.stop; log("*** " & testcasename() & ": DEPV of the received GUC message incorrectly set ***"); f_selfOrClientSyncAndVerdict(c_tbDone, e_error); } [] tc_ac.timeout { log("*** " & testcasename() & ": Expected message not received ***"); f_selfOrClientSyncAndVerdict(c_tbDone, e_timeout); } } // Postamble f_poNeighbour(); f_cf01Down(); } // end f_GEONW_PON_GUC_BV_01 group GEONW_PON_GUC_BV_02 { /** * @desc TP Function for TC_GEONW_PON_GUC_BV_02 */ function f_GEONW_PON_GUC_BV_02() runs on ItsMtc { // Local variables var ItsGeoNetworking v_nodeB; var ItsGeoNetworking v_nodeC; var ItsGeoNetworking v_nodeD; // Test control if (not PICS_GN_GUC_FWD) { log("*** " & testcasename() & ": PICS_GN_GUC_FWD required for executing the TC ***"); setverdict(inconc); stop; } if ((f_getGeoUnicastForwardingAlgorithm() != e_greedy) and (f_getGeoUnicastForwardingAlgorithm() != e_unspecified)) { log("*** " & testcasename() & ": PICS_GN_GEOUNICAST_FORWARDING_ALGORITHM == (e_greedy or e_unspecified) required for executing the TC ***"); setverdict(inconc); stop; } // Test component configuration f_cf04Up(); // Preamble // Start components v_nodeB := f_getComponent(c_compNodeB); v_nodeC := f_getComponent(c_compNodeC); v_nodeD := f_getComponent(c_compNodeD); v_nodeB.start(f_GEONW_PON_GUC_BV_02_nodeB()); v_nodeC.start(f_GEONW_PON_GUC_BV_02_nodeC()); v_nodeD.start(f_GEONW_PON_GUC_BV_02_nodeD()); // Synchronization f_serverSync3ClientsAndStop({c_prDone, c_tbDone}); // Cleanup f_cf04Down(); } // end f_GEONW_PON_GUC_BV_02 /** * @desc Behavior function for NodeB (TC_GEONW_PON_GUC_BV_02) */ function f_GEONW_PON_GUC_BV_02_nodeB() runs on ItsGeoNetworking { // Local variables var LongPosVector v_longPosVectorNodeA := f_getPosition(c_compNodeA); // Preamble f_prNeighbour(); f_selfOrClientSyncAndVerdict(c_prDone, e_success); // Test Body tc_ac.start; alt { [] geoNetworkingPort.receive( mw_geoNwInd( mw_geoNwPdu( mw_geoNwUnicastPacket( mw_shortPosVectorPosition(f_longPosVector2ShortPosVector(v_longPosVectorNodeA)), ? ) ) ) ) { tc_ac.stop; log("*** " & testcasename() & ": PASS: Forwarded GUC received ***"); f_selfOrClientSyncAndVerdict(c_tbDone, e_success); } [] tc_ac.timeout { log("*** " & testcasename() & ": FAIL: GUC was not forwarded ***"); f_selfOrClientSyncAndVerdict(c_tbDone, e_error); } } // Postamble f_poNeighbour(); } // end f_GEONW_PON_GUC_BV_02_nodeB /** * @desc Behavior function for NodeC (TC_GEONW_PON_GUC_BV_02) */ function f_GEONW_PON_GUC_BV_02_nodeC() runs on ItsGeoNetworking { // Local variables // Preamble f_prNeighbour(); f_selfOrClientSyncAndVerdict(c_prDone, e_success); // Test Body f_sendGeoNetMessage( valueof(m_geoNwReq_withLinkLayerDestination( m_geoNwPdu( m_geoNwUnicastPacket( f_getPosition(c_compNodeC), f_longPosVector2ShortPosVector(f_getPosition(c_compNodeA)), vc_localSeqNumber ), -, c_defaultHopLimit ), -, f_getIutMacAddress() ) )); f_selfOrClientSyncAndVerdict(c_tbDone, e_success); // Postamble f_poNeighbour(); } // end f_GEONW_PON_GUC_BV_02_nodeC /** * @desc Behavior function for NodeD (TC_GEONW_PON_GUC_BV_02) */ function f_GEONW_PON_GUC_BV_02_nodeD() runs on ItsGeoNetworking { // Local variables // Preamble f_prNeighbour(); f_selfOrClientSyncAndVerdict(c_prDone, e_success); // Test Body f_selfOrClientSyncAndVerdict(c_tbDone, e_success); // Postamble f_poNeighbour(); } // end f_GEONW_PON_GUC_BV_02_nodeD } // end GEONW_PON_GUC_BV_02 group GEONW_PON_GUC_BV_03 { /** * @desc TP Function for TC_GEONW_PON_GUC_BV_03 */ function f_GEONW_PON_GUC_BV_03() runs on ItsMtc { // Local variables var ItsGeoNetworking v_nodeB; var ItsGeoNetworking v_nodeC; // Test control if (not PICS_GN_GUC_FWD) { log("*** " & testcasename() & ": PICS_GN_GUC_FWD required for executing the TC ***"); setverdict(inconc); stop; } // Test component configuration f_cf03Up(); // Preamble // Start components v_nodeB := f_getComponent(c_compNodeB); v_nodeC := f_getComponent(c_compNodeC); v_nodeB.start(f_GEONW_PON_GUC_BV_03_nodeB()); v_nodeC.start(f_GEONW_PON_GUC_BV_03_nodeC()); // Synchronization f_serverSync2ClientsAndStop({c_prDone, c_tbDone}); // Cleanup f_cf03Down(); } // end f_GEONW_PON_GUC_BV_03 /** * @desc Behavior function for NodeB (TC_GEONW_PON_GUC_BV_03) */ function f_GEONW_PON_GUC_BV_03_nodeB() runs on ItsGeoNetworking { // Local variables var LongPosVector v_longPosVectorNodeA := f_getPosition(c_compNodeA); // Preamble f_prNeighbour(); f_sendGeoNetMessage( valueof(m_geoNwReq_withLinkLayerDestination( m_geoNwPdu( m_geoNwUnicastPacket( v_longPosVectorNodeA, f_longPosVector2ShortPosVector(f_getPosition(c_compIut)), vc_localSeqNumber ) ), -, f_getIutMacAddress() ) )); f_selfOrClientSyncAndVerdict(c_prDone, e_success); // Test Body tc_ac.start; alt { [] geoNetworkingPort.receive( mw_geoNwInd( mw_geoNwPdu( mw_geoNwUnicastPacketWithHl( mw_shortPosVectorPosition(f_longPosVector2ShortPosVector(v_longPosVectorNodeA)), ?, c_defaultHopLimit ), -, c_defaultHopLimit - 1 ) ) ) { tc_ac.stop; log("*** " & testcasename() & ": PASS: Forwarded GUC received ***"); f_selfOrClientSyncAndVerdict(c_tbDone, e_success); } [] geoNetworkingPort.receive( mw_geoNwInd( mw_geoNwPdu( mw_geoNwUnicastPacket( ?, ? ) ) ) ) { tc_ac.stop; log("*** " & testcasename() & ": FAIL: Fields not correctly updated ***"); f_selfOrClientSyncAndVerdict(c_tbDone, e_error); } [] tc_ac.timeout { log("*** " & testcasename() & ": FAIL: GUC was not forwarded ***"); f_selfOrClientSyncAndVerdict(c_tbDone, e_error); } } // Postamble f_poNeighbour(); } // end f_GEONW_PON_GUC_BV_03_nodeB /** * @desc Behavior function for NodeC (TC_GEONW_PON_GUC_BV_03) */ function f_GEONW_PON_GUC_BV_03_nodeC() runs on ItsGeoNetworking { // Local variables var LongPosVector v_obsoleteLongPosVectorNodeA := f_getPosition(c_compNodeA); // Preamble f_prNeighbour(); v_obsoleteLongPosVectorNodeA.timestamp_ := v_obsoleteLongPosVectorNodeA.timestamp_ - 1000; v_obsoleteLongPosVectorNodeA.latitude := v_obsoleteLongPosVectorNodeA.latitude - 1; f_selfOrClientSyncAndVerdict(c_prDone, e_success); // Test Body f_sendGeoNetMessage( valueof(m_geoNwReq_withLinkLayerDestination( m_geoNwPdu( m_geoNwUnicastPacket( f_getPosition(c_compNodeC), f_longPosVector2ShortPosVector(v_obsoleteLongPosVectorNodeA), vc_localSeqNumber, c_defaultHopLimit ), -, c_defaultHopLimit ), -, f_getIutMacAddress() ) )); f_selfOrClientSyncAndVerdict(c_tbDone, e_success); // Postamble f_poNeighbour(); } // end f_GEONW_PON_GUC_BV_03_nodeC } // end GEONW_PON_GUC_BV_03 group GEONW_PON_GUC_BO_04 { /** * @desc TP Function for TC_GEONW_PON_GUC_BO_04 */ function f_GEONW_PON_GUC_BO_04() runs on ItsMtc { // Local variables var ItsGeoNetworking v_nodeB; var ItsGeoNetworking v_nodeC; // Test control if (not PICS_GN_GUC_FWD) { log("*** " & testcasename() & ": PICS_GN_GUC_FWD required for executing the TC ***"); setverdict(inconc); stop; } // Test component configuration f_cf03Up(); // Preamble // Start components v_nodeB := f_getComponent(c_compNodeB); v_nodeC := f_getComponent(c_compNodeC); v_nodeB.start(f_GEONW_PON_GUC_BO_04_nodeB()); v_nodeC.start(f_GEONW_PON_GUC_BO_04_nodeC()); // Synchronization f_serverSync2ClientsAndStop({c_prDone, c_tbDone}); // Cleanup f_cf03Down(); } // end f_GEONW_PON_GUC_BO_04 /** * @desc Behavior function for NodeB (TC_GEONW_PON_GUC_BO_04) */ function f_GEONW_PON_GUC_BO_04_nodeB() runs on ItsGeoNetworking { // Local variables var LongPosVector v_longPosVectorNodeA := f_getPosition(c_compNodeA); // Preamble f_prNeighbour(); f_selfOrClientSyncAndVerdict(c_prDone, e_success); // Test Body tc_noac.start; alt { [] geoNetworkingPort.receive( mw_geoNwInd( mw_geoNwPdu( mw_geoNwUnicastPacket( mw_shortPosVectorPosition(f_longPosVector2ShortPosVector(v_longPosVectorNodeA)), ? ), -, ? ) ) ) { tc_noac.stop; log("*** " & testcasename() & ": FAIL: Forwarded GUC received ***"); f_selfOrClientSyncAndVerdict(c_tbDone, e_error); } [] tc_noac.timeout { log("*** " & testcasename() & ": PASS: GUC was not forwarded ***"); f_selfOrClientSyncAndVerdict(c_tbDone, e_success); } } // Postamble f_poNeighbour(); } // end f_GEONW_PON_GUC_BO_04_nodeB /** * @desc Behavior function for NodeC (TC_GEONW_PON_GUC_BO_04) */ function f_GEONW_PON_GUC_BO_04_nodeC() runs on ItsGeoNetworking { // Local variables var LongPosVector v_longPosVectorNodeA := f_getPosition(c_compNodeA); // Preamble f_prNeighbour(); f_selfOrClientSyncAndVerdict(c_prDone, e_success); // Test Body f_sendGeoNetMessage( valueof(m_geoNwReq_withLinkLayerDestination( m_geoNwPdu( m_geoNwUnicastPacket( f_getPosition(c_compNodeC), f_longPosVector2ShortPosVector(v_longPosVectorNodeA), vc_localSeqNumber ), -, 1 ), -, f_getIutMacAddress() ) )); f_selfOrClientSyncAndVerdict(c_tbDone, e_success); // Postamble f_poNeighbour(); } // end f_GEONW_PON_GUC_BO_04_nodeC } // end GEONW_PON_GUC_BO_04 /** * @desc TP Function for TC_GEONW_PON_GUC_BV_05 */ function f_GEONW_PON_GUC_BV_05() runs on ItsGeoNetworking { // Local variables var template (value) GeoNetworkingPdu v_gnPacket; var integer i; var GnRawPayload v_sentRawPayload; // Test control if (not PICS_GN_GUC_DST) { log("*** " & testcasename() & ": PICS_GN_GUC_DST required for executing the TC ***"); setverdict(inconc); stop; } // Test component configuration f_cf01Up(); // Test adapter configuration // Preamble f_prDefault(); f_selfOrClientSyncAndVerdict(c_prDone, e_success); // Test Body v_gnPacket := m_geoNwPdu( m_geoNwUnicastPacket( f_getPosition(c_compNodeB), f_getIutShortPosVector(), vc_localSeqNumber ) ); f_sendGeoNetMessage(valueof(m_geoNwReq_withLinkLayerDestination(v_gnPacket, -, f_getIutMacAddress()))); f_sleep(PX_TAC); v_sentRawPayload := valueof(v_gnPacket.gnPacket.packet.payload); for(i:=0; i < lengthof(vc_utInds) and not match(vc_utInds[i].rawPayload, v_sentRawPayload); i:=i+1) { // empty on purpose } if(i < lengthof(vc_utInds)) { log("*** " & testcasename() & ": PASS: GN was transmitted to upper layer ***"); f_selfOrClientSyncAndVerdict(c_tbDone, e_success); } else { log("*** " & testcasename() & ": FAIL: GN was not transmitted to upper layer ***"); f_selfOrClientSyncAndVerdict(c_tbDone, e_error); } // Postamble f_poDefault(); f_cf01Down(); } // end f_GEONW_PON_GUC_BV_05 group GEONW_PON_GUC_BV_06 { /** * @desc TP Function for TC_GEONW_PON_GUC_BV_06 */ function f_GEONW_PON_GUC_BV_06() runs on ItsMtc { // Local variables var ItsGeoNetworking v_nodeB; var ItsGeoNetworking v_nodeC; var float v_distance := int2float(f_getCbfMaxCommunicationRange() - 10); var LongPosVector v_longPosVectorIut, v_longPosVectorNodeA; // Test control if (not PICS_GN_GUC_FWD) { log("*** " & testcasename() & ": PICS_GN_GUC_FWD required for executing the TC ***"); setverdict(inconc); stop; } if (f_getGeoUnicastForwardingAlgorithm() != e_cbf) { log("*** " & testcasename() & ": PICS_GN_GEOUNICAST_FORWARDING_ALGORITHM == e_cbf required for executing the TC ***"); setverdict(inconc); stop; } // Test component configuration f_cf03Up(); // re-compute NodeA's position. v_longPosVectorIut := f_getIutLongPosVector(); v_longPosVectorNodeA := f_computePositionUsingDistance(v_longPosVectorIut, v_distance, 0); v_longPosVectorNodeA.gnAddr := f_getTsGnLocalAddress(c_compNodeA); // Preamble // Start components v_nodeB := f_getComponent(c_compNodeB); v_nodeC := f_getComponent(c_compNodeC); v_nodeB.start(f_GEONW_PON_GUC_BV_06_nodeB(v_distance, v_longPosVectorNodeA)); v_nodeC.start(f_GEONW_PON_GUC_BV_06_nodeC(v_longPosVectorNodeA)); // Synchronization f_serverSync2ClientsAndStop({c_prDone, c_msgSent, c_tbDone}); // Cleanup f_cf03Down(); } // end f_GEONW_PON_GUC_BV_06 /** * @desc Behavior function for NodeB (TC_GEONW_PON_GUC_BV_06) * @param p_distanceToNodeA Distance between IUT and NodeA * @param p_longPosVectorNodeA Position vector of NodeA */ function f_GEONW_PON_GUC_BV_06_nodeB(in float p_distanceToNodeA, in LongPosVector p_longPosVectorNodeA) runs on ItsGeoNetworking { // Local variables timer t_toCbf := (int2float(f_getGeoUnicastCbfMaxTime()) + ( int2float(f_getGeoUnicastCbfMinTime() - f_getGeoUnicastCbfMaxTime()) / int2float(f_getCbfMaxCommunicationRange()) ) * p_distanceToNodeA) * 0.95 / 1000.0; // Preamble f_prNeighbour(); f_selfOrClientSyncAndVerdict(c_prDone, e_success); // Test Body log("*** " & testcasename() & ": INFO: Message sent ***"); f_selfOrClientSyncAndVerdict(c_msgSent, e_success); tc_ac.start; t_toCbf.start; alt { [] geoNetworkingPort.receive( mw_geoNwInd( mw_geoNwPdu( mw_geoNwUnicastPacket( mw_shortPosVectorPosition(f_longPosVector2ShortPosVector(p_longPosVectorNodeA)), ? ) ) ) ) { tc_ac.stop; if(t_toCbf.running) { t_toCbf.stop; log("*** " & testcasename() & ": FAIL: IUT re-broadcasted the packet too early ***"); f_selfOrClientSyncAndVerdict(c_tbDone, e_error); } else { log("*** " & testcasename() & ": PASS: Forwarded GUC received ***"); f_selfOrClientSyncAndVerdict(c_tbDone, e_success); } } [] t_toCbf.timeout { log("*** " & testcasename() & ": INFO: Ready for receiving re-broadcasting ***"); repeat; } [] tc_ac.timeout { log("*** " & testcasename() & ": FAIL: GUC was not forwarded ***"); f_selfOrClientSyncAndVerdict(c_tbDone, e_error); } } // Postamble f_poNeighbour(); } // end f_GEONW_PON_GUC_BV_06_nodeB /** * @desc Behavior function for NodeC (TC_GEONW_PON_GUC_BV_06) * @param p_longPosVectorNodeA Position vector of NodeA */ function f_GEONW_PON_GUC_BV_06_nodeC(in LongPosVector p_longPosVectorNodeA) runs on ItsGeoNetworking { // Local variables // Preamble f_prNeighbour(); f_selfOrClientSyncAndVerdict(c_prDone, e_success); // Test Body f_sendGeoNetMessage( valueof(m_geoNwReq_withLinkLayerDestination( m_geoNwPdu( m_geoNwUnicastPacket( f_getPosition(c_compNodeC), f_longPosVector2ShortPosVector(p_longPosVectorNodeA), vc_localSeqNumber ), -, c_defaultHopLimit ), -, f_getIutMacAddress() ) )); log("*** " & testcasename() & ": INFO: Message sent ***"); f_selfOrClientSyncAndVerdict(c_msgSent, e_success); tc_ac.start; alt { [] geoNetworkingPort.receive( mw_geoNwInd( mw_geoNwPdu( mw_geoNwUnicastPacket( mw_shortPosVectorPosition(f_longPosVector2ShortPosVector(p_longPosVectorNodeA)), ? ) ) ) ) { tc_ac.stop; log("*** " & testcasename() & ": PASS: Re-broadcasted GUC received ***"); f_selfOrClientSyncAndVerdict(c_tbDone, e_success); } [] tc_ac.timeout { log("*** " & testcasename() & ": FAIL: GUC was not re-broadcasted ***"); f_selfOrClientSyncAndVerdict(c_tbDone, e_error); } } // Postamble f_poNeighbour(); } // end f_GEONW_PON_GUC_BV_06_nodeC } // end GEONW_PON_GUC_BV_06 group GEONW_PON_GUC_BV_07 { /** * @desc TP Function for TC_GEONW_PON_GUC_BV_07 */ function f_GEONW_PON_GUC_BV_07() runs on ItsMtc { // Local variables var ItsGeoNetworking v_nodeB; var ItsGeoNetworking v_nodeC; var float v_distance := int2float(f_getCbfMaxCommunicationRange() * 2); var LongPosVector v_longPosVectorIut, v_longPosVectorNodeA; // Test control if (not PICS_GN_GUC_FWD) { log("*** " & testcasename() & ": PICS_GN_GUC_FWD required for executing the TC ***"); setverdict(inconc); stop; } if (f_getGeoUnicastForwardingAlgorithm() != e_cbf) { log("*** " & testcasename() & ": PICS_GN_GEOUNICAST_FORWARDING_ALGORITHM == e_cbf required for executing the TC ***"); setverdict(inconc); stop; } // Test component configuration f_cf03Up(); // re-compute NodeA's position. v_longPosVectorIut := f_getIutLongPosVector(); v_longPosVectorNodeA := f_computePositionUsingDistance(v_longPosVectorIut, v_distance, 0); v_longPosVectorNodeA.gnAddr := f_getTsGnLocalAddress(c_compNodeA); // Preamble // Start components v_nodeB := f_getComponent(c_compNodeB); v_nodeC := f_getComponent(c_compNodeC); v_nodeB.start(f_GEONW_PON_GUC_BV_07_nodeB(v_longPosVectorNodeA)); v_nodeC.start(f_GEONW_PON_GUC_BV_07_nodeC(v_longPosVectorNodeA)); // Synchronization f_serverSync2ClientsAndStop({c_prDone, c_msgSent, c_tbDone}); // Cleanup f_cf03Down(); } // end f_GEONW_PON_GUC_BV_07 /** * @desc Behavior function for NodeB (TC_GEONW_PON_GUC_BV_07) * @param p_longPosVectorNodeA Position vector of NodeA */ function f_GEONW_PON_GUC_BV_07_nodeB(in LongPosVector p_longPosVectorNodeA) runs on ItsGeoNetworking { // Local variables timer t_toCbf := int2float(f_getGeoUnicastCbfMinTime()) / 1000.0; // Preamble f_prNeighbour(); f_selfOrClientSyncAndVerdict(c_prDone, e_success); // Test Body log("*** " & testcasename() & ": INFO: Message sent ***"); f_selfOrClientSyncAndVerdict(c_msgSent, e_success); tc_ac.start; t_toCbf.start; alt { [] geoNetworkingPort.receive( mw_geoNwInd( mw_geoNwPdu( mw_geoNwUnicastPacket( mw_shortPosVectorPosition(f_longPosVector2ShortPosVector(p_longPosVectorNodeA)), ? ) ) ) ) { tc_ac.stop; if(t_toCbf.running) { t_toCbf.stop; log("*** " & testcasename() & ": FAIL: IUT re-broadcasted the packet too early ***"); f_selfOrClientSyncAndVerdict(c_tbDone, e_error); } else { log("*** " & testcasename() & ": PASS: Forwarded GUC received ***"); f_selfOrClientSyncAndVerdict(c_tbDone, e_success); } } [] t_toCbf.timeout { log("*** " & testcasename() & ": INFO: Ready for receiving re-broadcasting ***"); repeat; } [] tc_ac.timeout { log("*** " & testcasename() & ": FAIL: GUC was not forwarded ***"); f_selfOrClientSyncAndVerdict(c_tbDone, e_error); } } // Postamble f_poNeighbour(); } // end f_GEONW_PON_GUC_BV_07_nodeB /** * @desc Behavior function for NodeC (TC_GEONW_PON_GUC_BV_07) * @param p_longPosVectorNodeA Position vector of NodeA */ function f_GEONW_PON_GUC_BV_07_nodeC(LongPosVector p_longPosVectorNodeA) runs on ItsGeoNetworking { // Local variables // Preamble f_prNeighbour(); f_selfOrClientSyncAndVerdict(c_prDone, e_success); // Test Body f_sendGeoNetMessage( valueof(m_geoNwReq_withLinkLayerDestination( m_geoNwPdu( m_geoNwUnicastPacket( f_getPosition(c_compNodeC), f_longPosVector2ShortPosVector(p_longPosVectorNodeA), vc_localSeqNumber ), -, c_defaultHopLimit ), -, f_getIutMacAddress() ) )); log("*** " & testcasename() & ": INFO: Message sent ***"); f_selfOrClientSyncAndVerdict(c_msgSent, e_success); tc_ac.start; alt { [] geoNetworkingPort.receive( mw_geoNwInd( mw_geoNwPdu( mw_geoNwUnicastPacket( mw_shortPosVectorPosition(f_longPosVector2ShortPosVector(p_longPosVectorNodeA)), ? ) ) ) ) { tc_ac.stop; log("*** " & testcasename() & ": PASS: Forwarded GUC received ***"); f_selfOrClientSyncAndVerdict(c_tbDone, e_success); } [] tc_ac.timeout { log("*** " & testcasename() & ": FAIL: GUC was not forwarded ***"); f_selfOrClientSyncAndVerdict(c_tbDone, e_error); } } // Postamble f_poNeighbour(); } // end f_GEONW_PON_GUC_BV_07_nodeC } // end GEONW_PON_GUC_BV_07 group GEONW_PON_GUC_BV_08 { /** * @desc TP Function for TC_GEONW_PON_GUC_BV_08 */ function f_GEONW_PON_GUC_BV_08() runs on ItsMtc { // Local variables var ItsGeoNetworking v_nodeB; var ItsGeoNetworking v_nodeC; var float v_distance := int2float(f_getCbfMaxCommunicationRange() - 10); var LongPosVector v_longPosVectorIut, v_longPosVectorNodeA; // Test control if (not PICS_GN_GUC_FWD) { log("*** " & testcasename() & ": PICS_GN_GUC_FWD required for executing the TC ***"); setverdict(inconc); stop; } if (f_getGeoUnicastForwardingAlgorithm() != e_cbf) { log("*** " & testcasename() & ": PICS_GN_GEOUNICAST_FORWARDING_ALGORITHM == e_cbf required for executing the TC ***"); setverdict(inconc); stop; } // Test component configuration f_cf03Up(); // re-compute NodeA's position. v_longPosVectorIut := f_getIutLongPosVector(); v_longPosVectorNodeA := f_computePositionUsingDistance(v_longPosVectorIut, v_distance, 0); v_longPosVectorNodeA.gnAddr := f_getTsGnLocalAddress(c_compNodeA); // Preamble // Start components v_nodeB := f_getComponent(c_compNodeB); v_nodeC := f_getComponent(c_compNodeC); v_nodeB.start(f_GEONW_PON_GUC_BV_08_nodeB(v_longPosVectorNodeA)); v_nodeC.start(f_GEONW_PON_GUC_BV_08_nodeC(v_longPosVectorNodeA)); // Synchronization f_serverSync2ClientsAndStop({c_prDone, c_tbDone}); // Cleanup f_cf03Down(); } // end f_GEONW_PON_GUC_BV_08 /** * @desc Behavior function for NodeB (TC_GEONW_PON_GUC_BV_08) * @param p_longPosVectorNodeA Position vector of NodeA */ function f_GEONW_PON_GUC_BV_08_nodeB(in LongPosVector p_longPosVectorNodeA) runs on ItsGeoNetworking { // Local variables // Preamble f_prNeighbour(); f_selfOrClientSyncAndVerdict(c_prDone, e_success); // Test Body f_sleepIgnoreDef(int2float(f_getGeoUnicastCbfMaxTime())/2000.0); f_sendGeoNetMessage( valueof(m_geoNwReq_withLinkLayerDestination( m_geoNwPdu( m_geoNwUnicastPacket( f_getPosition(c_compNodeC), f_longPosVector2ShortPosVector(p_longPosVectorNodeA), vc_localSeqNumber ), -, c_defaultHopLimit - 1 ), -, f_getIutMacAddress() ) )); tc_noac.start; alt { [] geoNetworkingPort.receive( mw_geoNwInd( mw_geoNwPdu( mw_geoNwUnicastPacket( mw_shortPosVectorPosition(f_longPosVector2ShortPosVector(p_longPosVectorNodeA)), ? ) ) ) ) { tc_noac.stop; log("*** " & testcasename() & ": FAIL: Forwarded GUC received ***"); f_selfOrClientSyncAndVerdict(c_tbDone, e_error); } [] tc_noac.timeout { log("*** " & testcasename() & ": PASS: GUC was not forwarded ***"); f_selfOrClientSyncAndVerdict(c_tbDone, e_success); } } // Postamble f_poNeighbour(); } // end f_GEONW_PON_GUC_BV_08_nodeB /** * @desc Behavior function for NodeC (TC_GEONW_PON_GUC_BV_08) * @param p_longPosVectorNodeA Position vector of NodeA */ function f_GEONW_PON_GUC_BV_08_nodeC(in LongPosVector p_longPosVectorNodeA) runs on ItsGeoNetworking { // Local variables // Preamble f_prNeighbour(); f_selfOrClientSyncAndVerdict(c_prDone, e_success); // Test Body //Note: Sending of the GUC packet move to test body in contrast to the test purpose due to time critical behaviour f_sendGeoNetMessage( valueof(m_geoNwReq_withLinkLayerDestination( m_geoNwPdu( m_geoNwUnicastPacket( f_getPosition(c_compNodeC), f_longPosVector2ShortPosVector(p_longPosVectorNodeA), vc_localSeqNumber ), -, c_defaultHopLimit ), -, f_getIutMacAddress() ) )); tc_noac.start; alt { [] geoNetworkingPort.receive( mw_geoNwInd( mw_geoNwPdu( mw_geoNwUnicastPacket( mw_shortPosVectorPosition(f_longPosVector2ShortPosVector(p_longPosVectorNodeA)), ? ) ) ) ) { tc_ac.stop; log("*** " & testcasename() & ": FAIL: Forwarded GUC received ***"); f_selfOrClientSyncAndVerdict(c_tbDone, e_error); } [] tc_noac.timeout { log("*** " & testcasename() & ": PASS: GUC was not forwarded ***"); f_selfOrClientSyncAndVerdict(c_tbDone, e_success); } } // Postamble f_poNeighbour(); } // end f_GEONW_PON_GUC_BV_08_nodeC } // end GEONW_PON_GUC_BV_08 group GEONW_PON_GUC_BV_10 { /** * @desc TP Function for TC_GEONW_PON_GUC_BV_10 */ function f_GEONW_PON_GUC_BV_10() runs on ItsMtc { // Local variables var ItsGeoNetworking v_nodeB; var ItsGeoNetworking v_nodeC; var float v_distance := int2float(f_getCbfMaxCommunicationRange() - 10); var LongPosVector v_longPosVectorIut, v_longPosVectorNodeA; // Test control if (not PICS_GN_GUC_FWD) { log("*** " & testcasename() & ": PICS_GN_GUC_FWD required for executing the TC ***"); setverdict(inconc); stop; } if (f_getGeoUnicastForwardingAlgorithm() != e_cbf) { log("*** " & testcasename() & ": PICS_GN_GEOUNICAST_FORWARDING_ALGORITHM == e_cbf required for executing the TC ***"); setverdict(inconc); stop; } // Test component configuration f_cf03Up(); // re-compute NodeA's position. v_longPosVectorIut := f_getIutLongPosVector(); v_longPosVectorNodeA := f_computePositionUsingDistance(v_longPosVectorIut, v_distance, 0); v_longPosVectorNodeA.gnAddr := f_getTsGnLocalAddress(c_compNodeA); // Preamble // Start components v_nodeB := f_getComponent(c_compNodeB); v_nodeC := f_getComponent(c_compNodeC); v_nodeB.start(f_GEONW_PON_GUC_BV_10_nodeB(v_longPosVectorNodeA)); v_nodeC.start(f_GEONW_PON_GUC_BV_10_nodeC(v_longPosVectorNodeA)); // Synchronization f_serverSync2ClientsAndStop({c_prDone, c_tbDone}); // Cleanup f_cf03Down(); } // end f_GEONW_PON_GUC_BV_10 /** * @desc Behavior function for NodeB (TC_GEONW_PON_GUC_BV_10) * @param p_longPosVectorNodeA Position vector of NodeA */ function f_GEONW_PON_GUC_BV_10_nodeB(in LongPosVector p_longPosVectorNodeA) runs on ItsGeoNetworking { // Local variables // Preamble f_prNeighbour(); f_selfOrClientSyncAndVerdict(c_prDone, e_success); // Test Body f_sleepIgnoreDef(int2float(f_getGeoUnicastCbfMaxTime())/2000.0); tc_ac.start; alt { [] geoNetworkingPort.receive( mw_geoNwInd( mw_geoNwPdu( mw_geoNwUnicastPacket( mw_shortPosVectorPosition(f_longPosVector2ShortPosVector(p_longPosVectorNodeA)), ? ) ) ) ) { tc_ac.stop; log("*** " & testcasename() & ": PASS: Re-broadcasted GUC received ***"); f_selfOrClientSyncAndVerdict(c_tbDone, e_success); } [] tc_ac.timeout { log("*** " & testcasename() & ": FAIL: GUC was not forwarded ***"); f_selfOrClientSyncAndVerdict(c_tbDone, e_error); } } // Postamble f_poNeighbour(); } // end f_GEONW_PON_GUC_BV_10_nodeB /** * @desc Behavior function for NodeC (TC_GEONW_PON_GUC_BV_10) * @param p_longPosVectorNodeA Position vector of NodeA */ function f_GEONW_PON_GUC_BV_10_nodeC(in LongPosVector p_longPosVectorNodeA) runs on ItsGeoNetworking { // Local variables // Preamble f_prDefault(); f_selfOrClientSyncAndVerdict(c_prDone, e_success); // Test Body f_sendGeoNetMessage( valueof(m_geoNwReq_withLinkLayerDestination( m_geoNwPdu( m_geoNwUnicastPacket( f_getPosition(c_compNodeC), f_longPosVector2ShortPosVector(p_longPosVectorNodeA), vc_localSeqNumber ), -, c_defaultHopLimit ), -, f_getIutMacAddress() ) )); f_sleepIgnoreDef(int2float(f_getGeoUnicastCbfMaxTime())/2000.0); tc_ac.start; alt { [] geoNetworkingPort.receive( mw_geoNwInd( mw_geoNwPdu( mw_geoNwUnicastPacket( mw_shortPosVectorPosition(f_longPosVector2ShortPosVector(p_longPosVectorNodeA)), ? ) ) ) ) { tc_ac.stop; log("*** " & testcasename() & ": PASS: Re-broadcasted GUC received ***"); f_selfOrClientSyncAndVerdict(c_tbDone, e_success); } [] tc_ac.timeout { log("*** " & testcasename() & ": FAIL: GUC was not forwarded ***"); f_selfOrClientSyncAndVerdict(c_tbDone, e_error); } } // Postamble f_poNeighbour(); } // end f_GEONW_PON_GUC_BV_10_nodeC } // end GEONW_PON_GUC_BV_10 group GEONW_PON_GUC_BV_11 { /** * @desc TP Function for TC_GEONW_PON_GUC_BV_11 */ function f_GEONW_PON_GUC_BV_11() runs on ItsMtc { // Local variables var ItsGeoNetworking v_nodeB; var ItsGeoNetworking v_nodeC; // Test control if (not PICS_GN_GUC_SRC) { log("*** " & testcasename() & ": PICS_GN_GUC_SRC required for executing the TC ***"); setverdict(inconc); stop; } if (f_getGeoUnicastForwardingAlgorithm() != e_cbf) { log("*** " & testcasename() & ": PICS_GN_GEOUNICAST_FORWARDING_ALGORITHM == e_cbf required for executing the TC ***"); setverdict(inconc); stop; } // Test component configuration f_cf03Up(); // Preamble // Start components v_nodeB := f_getComponent(c_compNodeB); v_nodeC := f_getComponent(c_compNodeC); v_nodeB.start(f_GEONW_PON_GUC_BV_11_nodeB()); v_nodeC.start(f_GEONW_PON_GUC_BV_11_nodeC()); // Synchronization f_serverSync2ClientsAndStop({c_prDone, c_tbDone}); // Cleanup f_cf03Down(); } // end f_GEONW_PON_GUC_BV_11 /** * @desc Behavior function for NodeB (TC_GEONW_PON_GUC_BV_11) */ function f_GEONW_PON_GUC_BV_11_nodeB() runs on ItsGeoNetworking { // Local variables var LongPosVector v_longPosVectorNodeB := f_getPosition(c_compNodeB); // Preamble f_prNeighbour(); f_selfOrClientSyncAndVerdict(c_prDone, e_success); // Test Body if(not f_utTriggerEvent(m_generateGeoUnicastMessage(v_longPosVectorNodeB.gnAddr))) { log("*** " & testcasename() & ": INCONC: Trigger failed ***"); f_selfOrClientSyncAndVerdict(c_tbDone, e_timeout); } tc_ac.start; alt { [] geoNetworkingPort.receive( mw_geoNwInd( mw_geoNwPdu( mw_geoNwUnicastPacket( mw_shortPosVectorPosition(f_longPosVector2ShortPosVector(v_longPosVectorNodeB)), ? ) ) ) ) { tc_ac.stop; log("*** " & testcasename() & ": PASS: GUC received ***"); f_selfOrClientSyncAndVerdict(c_tbDone, e_success); } [] tc_ac.timeout { log("*** " & testcasename() & ": FAIL: GUC was not received ***"); f_selfOrClientSyncAndVerdict(c_tbDone, e_error); } } // Postamble f_poNeighbour(); } // end f_GEONW_PON_GUC_BV_11_nodeB /** * @desc Behavior function for NodeC (TC_GEONW_PON_GUC_BV_11) */ function f_GEONW_PON_GUC_BV_11_nodeC() runs on ItsGeoNetworking { // Local variables var LongPosVector v_longPosVectorNodeB := f_getPosition(c_compNodeB); // Preamble f_prNeighbour(); f_selfOrClientSyncAndVerdict(c_prDone, e_success); // Test Body tc_ac.start; alt { [] geoNetworkingPort.receive( mw_geoNwInd( mw_geoNwPdu( mw_geoNwUnicastPacket( mw_shortPosVectorPosition(f_longPosVector2ShortPosVector(v_longPosVectorNodeB)), ? ) ) ) ) { tc_ac.stop; log("*** " & testcasename() & ": PASS: broadcasted GUC received ***"); f_selfOrClientSyncAndVerdict(c_tbDone, e_success); } [] tc_ac.timeout { log("*** " & testcasename() & ": FAIL: GUC was not broadcasted ***"); f_selfOrClientSyncAndVerdict(c_tbDone, e_error); } } // Postamble f_poNeighbour(); } // end f_GEONW_PON_GUC_BV_11_nodeC } // end GEONW_PON_GUC_BV_11 group GEONW_PON_GUC_BO_12 { /** * @desc TP Function for TC_GEONW_PON_GUC_BO_12 */ function f_GEONW_PON_GUC_BO_12() runs on ItsMtc { // Local variables var ItsGeoNetworking v_nodeB; var ItsGeoNetworking v_nodeC; // Test control if (not PICS_GN_GUC_FWD) { log("*** " & testcasename() & ": PICS_GN_GUC_FWD required for executing the TC ***"); setverdict(inconc); stop; } if ((f_getGeoUnicastForwardingAlgorithm() != e_greedy) and (f_getGeoUnicastForwardingAlgorithm() != e_unspecified)) { log("*** " & testcasename() & ": PICS_GN_GEOUNICAST_FORWARDING_ALGORITHM == (e_greedy or e_unspecified) required for executing the TC ***"); setverdict(inconc); stop; } // Test component configuration f_cf03Up(); // Preamble // Start components v_nodeB := f_getComponent(c_compNodeB); v_nodeC := f_getComponent(c_compNodeC); v_nodeB.start(f_GEONW_PON_GUC_BO_12_nodeB()); v_nodeC.start(f_GEONW_PON_GUC_BO_12_nodeC()); // Synchronization f_serverSync2ClientsAndStop({c_prDone, c_tbDone}); // Cleanup f_cf03Down(); } // end f_GEONW_PON_GUC_BO_12 /** * @desc Behavior function for NodeB (TC_GEONW_PON_GUC_BO_12) */ function f_GEONW_PON_GUC_BO_12_nodeB() runs on ItsGeoNetworking { // Local variables var LongPosVector v_longPosVectorNodeA := f_getPosition(c_compNodeA); // Preamble f_prNeighbour(); tc_ac.start; alt { [] geoNetworkingPort.receive( mw_geoNwInd( mw_geoNwPdu( mw_geoNwUnicastPacket( mw_shortPosVectorPosition(f_longPosVector2ShortPosVector(v_longPosVectorNodeA)), ? ) ) ) ) { tc_ac.stop; log("*** " & testcasename() & ": INFO: First GUC forwarded ***"); f_selfOrClientSyncAndVerdict(c_prDone, e_success); } [] tc_ac.timeout { log("*** " & testcasename() & ": INCONC: First GUC was not forwarded ***"); f_selfOrClientSyncAndVerdict(c_prDone, e_timeout); } } // Test Body f_sendGeoNetMessage( valueof(m_geoNwReq_withLinkLayerDestination( m_geoNwPdu( m_geoNwUnicastPacket( f_getPosition(c_compNodeC), f_longPosVector2ShortPosVector(v_longPosVectorNodeA), vc_localSeqNumber ), -, c_defaultHopLimit - 1 ), -, f_getIutMacAddress() ) )); tc_noac.start; alt { [] geoNetworkingPort.receive( mw_geoNwInd( mw_geoNwPdu( mw_geoNwUnicastPacket( mw_shortPosVectorPosition(f_longPosVector2ShortPosVector(v_longPosVectorNodeA)), ? ) ) ) ) { tc_noac.stop; log("*** " & testcasename() & ": FAIL: Duplicate GUC was forwarded ***"); f_selfOrClientSyncAndVerdict(c_tbDone, e_error); } [] tc_noac.timeout { log("*** " & testcasename() & ": PASS: Duplicate GUC not forwarded ***"); f_selfOrClientSyncAndVerdict(c_tbDone, e_success); } } // Postamble f_poNeighbour(); } // end f_GEONW_PON_GUC_BO_12_nodeB /** * @desc Behavior function for NodeC (TC_GEONW_PON_GUC_BO_12) */ function f_GEONW_PON_GUC_BO_12_nodeC() runs on ItsGeoNetworking { // Local variables var LongPosVector v_longPosVectorNodeA := f_getPosition(c_compNodeA); // Preamble f_prNeighbour(); f_sendGeoNetMessage( valueof(m_geoNwReq_withLinkLayerDestination( m_geoNwPdu( m_geoNwUnicastPacket( f_getPosition(c_compNodeC), f_longPosVector2ShortPosVector(v_longPosVectorNodeA), vc_localSeqNumber ), -, c_defaultHopLimit ), -, f_getIutMacAddress() ) )); f_selfOrClientSyncAndVerdict(c_prDone, e_success); // Test Body tc_noac.start; alt { [] geoNetworkingPort.receive( mw_geoNwInd( mw_geoNwPdu( mw_geoNwUnicastPacket( mw_shortPosVectorPosition(f_longPosVector2ShortPosVector(v_longPosVectorNodeA)), ? ) ) ) ) { tc_noac.stop; log("*** " & testcasename() & ": FAIL: Duplicate GUC was forwarded ***"); f_selfOrClientSyncAndVerdict(c_tbDone, e_error); } [] tc_noac.timeout { log("*** " & testcasename() & ": PASS: Duplicate GUC not forwarded ***"); f_selfOrClientSyncAndVerdict(c_tbDone, e_success); } } // Postamble f_poNeighbour(); } // end f_GEONW_PON_GUC_BO_12_nodeC } // end GEONW_PON_GUC_BO_12 group GEONW_PON_GUC_BO_13 { /** * @desc TP Function for TC_GEONW_PON_GUC_BO_13 */ function f_GEONW_PON_GUC_BO_13() runs on ItsMtc { // Local variables var ItsGeoNetworking v_nodeB; var ItsGeoNetworking v_nodeC; // Test control if (not PICS_GN_GUC_DST) { log("*** " & testcasename() & ": PICS_GN_GUC_DST required for executing the TC ***"); setverdict(inconc); stop; } if ((f_getGeoUnicastForwardingAlgorithm() != e_greedy) and (f_getGeoUnicastForwardingAlgorithm() != e_unspecified)) { log("*** " & testcasename() & ": PICS_GN_GEOUNICAST_FORWARDING_ALGORITHM == (e_greedy or e_unspecified) required for executing the TC ***"); setverdict(inconc); stop; } // Test component configuration f_cf03Up(c_compNodeB); // Preamble // Start components v_nodeB := f_getComponent(c_compNodeB); v_nodeC := f_getComponent(c_compNodeC); v_nodeB.start(f_GEONW_PON_GUC_BO_13_nodeB()); v_nodeC.start(f_GEONW_PON_GUC_BO_13_nodeC()); // Synchronization f_serverSync2ClientsAndStop({c_prDone, c_tbDone}); // Cleanup f_cf03Down(); } // end f_GEONW_PON_GUC_BV_13 /** * @desc Behavior function for NodeB (TC_GEONW_PON_GUC_BO_13) */ function f_GEONW_PON_GUC_BO_13_nodeB() runs on ItsGeoNetworking { // Local variables var LongPosVector v_longPosVectorIut := f_getPosition(c_compIut); var integer i; var template (present) GeoNetworkingPdu v_gnPacket := m_geoNwPdu( m_geoNwUnicastPacket( f_getPosition(c_compNodeC), f_longPosVector2ShortPosVector(v_longPosVectorIut), vc_localSeqNumber ), -, c_defaultHopLimit - 1 ); var GnRawPayload v_sentRawPayload; // Preamble f_prNeighbour(); f_sleep(PX_TAC); v_sentRawPayload := valueof(v_gnPacket.gnPacket.packet.payload); for(i:=0; i < lengthof(vc_utInds) and not match(vc_utInds[i].rawPayload, v_sentRawPayload); i:=i+1) { // empty on purpose } if(i < lengthof(vc_utInds)) { log("*** " & testcasename() & ": PASS: GN was transmitted to upper layer ***"); //flush received upper indications vc_utInds := {}; f_selfOrClientSyncAndVerdict(c_prDone, e_success); } else { log("*** " & testcasename() & ": INCONC: GN was not transmitted to upper layer ***"); f_selfOrClientSyncAndVerdict(c_prDone, e_error); } // Test Body f_sendGeoNetMessage(valueof(m_geoNwReq_withLinkLayerDestination(v_gnPacket, -, f_getIutMacAddress()))); f_sleep(PX_TAC); if(0 != lengthof(vc_utInds)) { log("*** " & testcasename() & ": FAIL: GN was transmitted to upper layer ***"); f_selfOrClientSyncAndVerdict(c_tbDone, e_error); } else { log("*** " & testcasename() & ": PASS: GN was not transmitted to upper layer ***"); f_selfOrClientSyncAndVerdict(c_tbDone, e_success); } // Postamble f_poNeighbour(); } // end f_GEONW_PON_GUC_BO_13_nodeB /** * @desc Behavior function for NodeC (TC_GEONW_PON_GUC_BO_13) */ function f_GEONW_PON_GUC_BO_13_nodeC() runs on ItsGeoNetworking { // Local variables var LongPosVector v_longPosVectorIut := f_getPosition(c_compIut); // Preamble f_prNeighbour(); f_sendGeoNetMessage( valueof(m_geoNwReq_withLinkLayerDestination( m_geoNwPdu( m_geoNwUnicastPacket( f_getPosition(c_compNodeC), f_longPosVector2ShortPosVector(v_longPosVectorIut), vc_localSeqNumber ), -, c_defaultHopLimit ), -, f_getIutMacAddress() ) )); f_selfOrClientSyncAndVerdict(c_prDone, e_success); // Test Body f_selfOrClientSyncAndVerdict(c_tbDone, e_success); // Postamble f_poNeighbour(); } // end f_GEONW_PON_GUC_BO_13_nodeC } // end GEONW_PON_GUC_BO_13 } // end geoGeoUnicast // 6.2.2.9 group geoGeoBroadcast { group GEONW_PON_GBC_BV_01 { /** * @desc TP Function for TC_GEONW_PON_GBC_BV_01 */ function f_GEONW_PON_GBC_BV_01() runs on ItsMtc { // Local variables var ItsGeoNetworking v_nodeB; var ItsGeoNetworking v_nodeD; // Test control if (not PICS_GN_GBC_SRC) { log("*** " & testcasename() & ": PICS_GN_GBC_SRC required for executing the TC ***"); setverdict(inconc); stop; } // Test component configuration f_cf02Up(); // Preamble // Start components v_nodeB := f_getComponent(c_compNodeB); v_nodeD := f_getComponent(c_compNodeD); v_nodeB.start(f_GEONW_PON_GBC_BV_01_nodeB()); v_nodeD.start(f_GEONW_PON_GBC_BV_01_nodeD()); // Synchronization f_serverSync2ClientsAndStop({c_prDone, c_tbDone}); // Cleanup f_cf02Down(); } // end f_GEONW_PON_GBC_BV_01 /** * @desc Behavior function for NodeB (TC_GEONW_PON_GBC_BV_01) */ function f_GEONW_PON_GBC_BV_01_nodeB() runs on ItsGeoNetworking { // Local variables var LongPosVector v_longPosVectorIut := f_getPosition(c_compIut); // Preamble f_prNeighbour(); f_selfOrClientSyncAndVerdict(c_prDone, e_success); // Test Body if ( not f_utTriggerEvent(m_generateGeoBroadcastMessage(f_getArea(c_area1))) ) { log("*** " & testcasename() & ": INCONC: Trigger failed ***"); f_selfOrClientSyncAndVerdict(c_tbDone, e_timeout); } tc_ac.start; alt { [] a_receiveGeoBroadcastWithArea( mw_longPosVectorPosition(v_longPosVectorIut), ?, f_getGeoBroadcastArea(c_area1)) { tc_ac.stop; log("*** " & testcasename() & ": PASS: GBC message received correctly ***"); f_selfOrClientSyncAndVerdict(c_tbDone, e_success); } [] tc_ac.timeout { log("*** " & testcasename() & ": FAIL: GBC message not received ***"); f_selfOrClientSyncAndVerdict(c_tbDone, e_error); } } // Postamble f_poNeighbour(); } // end f_GEONW_PON_GBC_BV_01_nodeB /** * @desc Behavior function for NodeD (TC_GEONW_PON_GBC_BV_01) */ function f_GEONW_PON_GBC_BV_01_nodeD() runs on ItsGeoNetworking { // Local variables var LongPosVector v_longPosVectorIut := f_getPosition(c_compIut); // Preamble f_prNeighbour(); f_selfOrClientSyncAndVerdict(c_prDone, e_success); // Test Body tc_ac.start; alt { [] a_receiveGeoBroadcastWithArea( mw_longPosVectorPosition(v_longPosVectorIut), ?, f_getGeoBroadcastArea(c_area1)) { tc_ac.stop; log("*** " & testcasename() & ": PASS: GBC message received correctly ***"); f_selfOrClientSyncAndVerdict(c_tbDone, e_success); } [] tc_ac.timeout { log("*** " & testcasename() & ": FAIL: GBC message not received ***"); f_selfOrClientSyncAndVerdict(c_tbDone, e_error); } } // Postamble f_poNeighbour(); } // end f_GEONW_PON_GBC_BV_01_nodeD } // end GEONW_PON_GBC_BV_01 group GEONW_PON_GBC_BV_02 { /** * @desc TP Function for TC_GEONW_PON_GBC_BV_02 */ function f_GEONW_PON_GBC_BV_02() runs on ItsMtc { // Local variables var ItsGeoNetworking v_nodeB; var ItsGeoNetworking v_nodeD; // Test control if (not PICS_GN_GBC_SRC) { log("*** " & testcasename() & ": PICS_GN_GBC_SRC required for executing the TC ***"); setverdict(inconc); stop; } if ((f_getGeoBroadcastForwardingAlgorithm() != e_simple) and (f_getGeoBroadcastForwardingAlgorithm() != e_unspecified) and (f_getGeoBroadcastForwardingAlgorithm() != e_advanced)) { log("*** " & testcasename() & ": PICS_GN_GEOBROADCAST_FORWARDING_ALGORITHM == ( e_simple or e_unspecified ) required for executing the TC ***"); setverdict(inconc); stop; } // Test component configuration f_cf02Up(); // Preamble // Start components v_nodeB := f_getComponent(c_compNodeB); v_nodeD := f_getComponent(c_compNodeD); v_nodeB.start(f_GEONW_PON_GBC_BV_02_nodeB()); v_nodeD.start(f_GEONW_PON_GBC_BV_02_nodeD()); // Synchronization f_serverSync2ClientsAndStop({c_prDone, c_tbDone}); // Cleanup f_cf02Down(); } // end f_GEONW_PON_GBC_BV_02 /** * @desc Behavior function for NodeB (TC_GEONW_PON_GBC_BV_02) */ function f_GEONW_PON_GBC_BV_02_nodeB() runs on ItsGeoNetworking { // Local variables var LongPosVector v_longPosVectorIut := f_getPosition(c_compIut); // Preamble f_prNeighbour(); f_selfOrClientSyncAndVerdict(c_prDone, e_success); // Test Body if ( not f_utTriggerEvent(m_generateGeoBroadcastMessage(f_getArea(c_area2))) ) { log("*** " & testcasename() & ": INCONC: Trigger failed ***"); f_selfOrClientSyncAndVerdict(c_tbDone, e_timeout); } tc_ac.start; alt { [] a_receiveGeoBroadcastWithArea( mw_longPosVectorPosition(v_longPosVectorIut), ?, f_getGeoBroadcastArea(c_area2)) { tc_ac.stop; log("*** " & testcasename() & ": PASS: GBC message received correctly ***"); f_selfOrClientSyncAndVerdict(c_tbDone, e_success); } [] tc_ac.timeout { log("*** " & testcasename() & ": FAIL: GBC message not received ***"); f_selfOrClientSyncAndVerdict(c_tbDone, e_error); } } // Postamble f_poNeighbour(); } // end f_GEONW_PON_GBC_BV_02_nodeB /** * @desc Behavior function for NodeD (TC_GEONW_PON_GBC_BV_02) */ function f_GEONW_PON_GBC_BV_02_nodeD() runs on ItsGeoNetworking { // Local variables var LongPosVector v_longPosVectorIut := f_getPosition(c_compIut); // Preamble f_prNeighbour(); f_selfOrClientSyncAndVerdict(c_prDone, e_success); // Test Body tc_noac.start; alt { [] a_receiveGeoBroadcastWithArea( mw_longPosVectorPosition(v_longPosVectorIut), ?, f_getGeoBroadcastArea(c_area2)) { tc_noac.stop; log("*** " & testcasename() & ": FAIL: received GBC message ***"); f_selfOrClientSyncAndVerdict(c_tbDone, e_error); } [] tc_noac.timeout { log("*** " & testcasename() & ": PASS: GBC message not received ***"); f_selfOrClientSyncAndVerdict(c_tbDone, e_success); } } // Postamble f_poNeighbour(); } // end f_GEONW_PON_GBC_BV_02_nodeD } // end GEONW_PON_GBC_BV_02 group GEONW_PON_GBC_BV_03 { /** * @desc TP Function for TC_GEONW_PON_GBC_BV_03 */ function f_GEONW_PON_GBC_BV_03() runs on ItsMtc { // Local variables var ItsGeoNetworking v_nodeB; var ItsGeoNetworking v_nodeD; // Test control if (not PICS_GN_GBC_SRC) { log("*** " & testcasename() & ": PICS_GN_GBC_SRC required for executing the TC ***"); setverdict(inconc); stop; } if ((f_getGeoBroadcastForwardingAlgorithm() != e_simple) and (f_getGeoBroadcastForwardingAlgorithm() != e_unspecified)) { log("*** " & testcasename() & ": PICS_GN_GEOBROADCAST_FORWARDING_ALGORITHM == ( e_simple or e_unspecified ) required for executing the TC ***"); setverdict(inconc); stop; } // Test component configuration f_cf02Up(); // Preamble // Start components v_nodeB := f_getComponent(c_compNodeB); v_nodeD := f_getComponent(c_compNodeD); v_nodeB.start(f_GEONW_PON_GBC_BV_03_nodeB()); v_nodeD.start(f_GEONW_PON_GBC_BV_03_nodeD()); // Synchronization f_serverSync2ClientsAndStop({c_prDone, c_tbDone}); // Cleanup f_cf02Down(); } // end f_GEONW_PON_GBC_BV_03 /** * @desc Behavior function for NodeB (TC_GEONW_PON_GBC_BV_03) */ function f_GEONW_PON_GBC_BV_03_nodeB() runs on ItsGeoNetworking { // Local variables var LongPosVector v_longPosVectorNodeB := f_getPosition(c_compNodeB); // Preamble f_prNeighbour(); f_selfOrClientSyncAndVerdict(c_prDone, e_success); // Test Body f_sendGeoNetMessage( valueof(m_geoNwReq_linkLayerBroadcast( m_geoNwPdu( m_geoNwBroadcastPacket( v_longPosVectorNodeB, vc_localSeqNumber, f_getGeoBroadcastArea(c_area1) ) ) ) )); tc_ac.start; alt { [] a_receiveGeoBroadcastWithArea( mw_longPosVectorPosition(v_longPosVectorNodeB), ?, f_getGeoBroadcastArea(c_area1)) { tc_ac.stop; log("*** " & testcasename() & ": PASS: GBC message received correctly ***"); f_selfOrClientSyncAndVerdict(c_tbDone, e_success); } [] tc_ac.timeout { log("*** " & testcasename() & ": FAIL: GBC message not received ***"); f_selfOrClientSyncAndVerdict(c_tbDone, e_error); } } // Postamble f_poNeighbour(); } // end f_GEONW_PON_GBC_BV_03_nodeB /** * @desc Behavior function for NodeD (TC_GEONW_PON_GBC_BV_03) */ function f_GEONW_PON_GBC_BV_03_nodeD() runs on ItsGeoNetworking { // Local variables var LongPosVector v_longPosVectorNodeB := f_getPosition(c_compNodeB); // Preamble f_prNeighbour(); f_selfOrClientSyncAndVerdict(c_prDone, e_success); // Test Body tc_ac.start; alt { [] a_receiveGeoBroadcastWithArea( mw_longPosVectorPosition(v_longPosVectorNodeB), ?, f_getGeoBroadcastArea(c_area1)) { tc_ac.stop; log("*** " & testcasename() & ": PASS: GBC message received correctly ***"); f_selfOrClientSyncAndVerdict(c_tbDone, e_success); } [] tc_ac.timeout { log("*** " & testcasename() & ": FAIL: GBC message not received ***"); f_selfOrClientSyncAndVerdict(c_tbDone, e_error); } } // Postamble f_poNeighbour(); } // end f_GEONW_PON_GBC_BV_03_nodeD } // end GEONW_PON_GBC_BV_03 group GEONW_PON_GBC_BO_04 { /** * @desc TP Function for TC_GEONW_PON_GBC_BO_04 */ function f_GEONW_PON_GBC_BO_04() runs on ItsMtc { // Local variables var ItsGeoNetworking v_nodeB; var ItsGeoNetworking v_nodeD; // Test control if (not PICS_GN_GBC_FWD) { log("*** " & testcasename() & ": PICS_GN_GBC_FWD required for executing the TC ***"); setverdict(inconc); stop; } if ((f_getGeoBroadcastForwardingAlgorithm() != e_simple) and (f_getGeoBroadcastForwardingAlgorithm() != e_unspecified)) { log("*** " & testcasename() & ": PICS_GN_GEOBROADCAST_FORWARDING_ALGORITHM == ( e_simple or e_unspecified ) required for executing the TC ***"); setverdict(inconc); stop; } // Test component configuration f_cf02Up(); // Preamble // Start components v_nodeB := f_getComponent(c_compNodeB); v_nodeD := f_getComponent(c_compNodeD); v_nodeB.start(f_GEONW_PON_GBC_BO_04_nodeB()); v_nodeD.start(f_GEONW_PON_GBC_BO_04_nodeD()); // Synchronization f_serverSync2ClientsAndStop({c_prDone, c_tbDone}); // Cleanup f_cf02Down(); } // end f_GEONW_PON_GBC_BO_04 /** * @desc Behavior function for NodeB (TC_GEONW_PON_GBC_BO_04) */ function f_GEONW_PON_GBC_BO_04_nodeB() runs on ItsGeoNetworking { // Local variables var LongPosVector v_longPosVectorNodeB := f_getPosition(c_compNodeB); var template (present) GeoNetworkingPdu v_gnPacket; // Preamble f_prNeighbour(); v_gnPacket := m_geoNwPdu( m_geoNwBroadcastPacket( v_longPosVectorNodeB, vc_localSeqNumber, f_getGeoBroadcastArea(c_area1) ), -, c_defaultHopLimit ); f_sendGeoNetMessage(valueof(m_geoNwReq_linkLayerBroadcast(v_gnPacket))); tc_ac.start; alt { [] geoNetworkingPort.receive(mw_geoNwInd(mw_geoNwPdu(mw_geoNwBroadcastPacketWithArea( mw_longPosVectorPosition(v_longPosVectorNodeB), ?, f_getGeoBroadcastArea(c_area1) )))) { tc_ac.stop; log("*** " & testcasename() & ": PASS: Pre-conditions: GBC message received correctly ***"); f_selfOrClientSyncAndVerdict(c_prDone, e_success); } [] tc_ac.timeout { log("*** " & testcasename() & ": INCONC: Pre-conditions: GBC message not received ***"); f_selfOrClientSyncAndVerdict(c_prDone, e_timeout); } } // Test Body tc_noac.start; alt { [] a_receiveGeoBroadcast( ?, ?) { tc_noac.stop; log("*** " & testcasename() & ": FAIL: GBC message re-broadcasted ***"); f_selfOrClientSyncAndVerdict(c_tbDone, e_error); } [] tc_noac.timeout { log("*** " & testcasename() & ": PASS: GBC message not re-broadcasted ***"); f_selfOrClientSyncAndVerdict(c_tbDone, e_success); } } // Postamble f_poNeighbour(); } // end f_GEONW_PON_GBC_BO_04_nodeB /** * @desc Behavior function for NodeD (TC_GEONW_PON_GBC_BO_04) */ function f_GEONW_PON_GBC_BO_04_nodeD() runs on ItsGeoNetworking { // Local variables var LongPosVector v_longPosVectorNodeB := f_getPosition(c_compNodeB); //FIXME RGY variable shall not be of template type, because a message is stored into it // var template (present) GeoNetworkingInd v_msgInd; var GeoNetworkingInd v_msgInd; // Preamble f_prNeighbour(); tc_ac.start; alt { [] geoNetworkingPort.receive(mw_geoNwInd(mw_geoNwPdu(mw_geoNwBroadcastPacketWithArea( mw_longPosVectorPosition(v_longPosVectorNodeB), ?, f_getGeoBroadcastArea(c_area1) )))) -> value v_msgInd { tc_ac.stop; log("*** " & testcasename() & ": PASS: Pre-conditions: GBC message received correctly ***"); f_selfOrClientSyncAndVerdict(c_prDone, e_success); } [] tc_ac.timeout { log("*** " & testcasename() & ": FAIL: Pre-conditions: GBC message not received ***"); f_selfOrClientSyncAndVerdict(c_prDone, e_error); } } // Test Body // send geoBroadcast for second time (same source + same seq Nr + lower RHL) v_msgInd.msgIn.basicHeader.routerHopLimit := valueof(v_msgInd.msgIn.basicHeader.routerHopLimit) - 1; f_sendGeoNetMessage(valueof(m_geoNwReq_linkLayerBroadcast(v_msgInd.msgIn))); //FIXME RGY variable is not used after asigning AnyValue; // if a template is needed for some purpose a template variable should also be declared; see f_GEONW_PON_GBC_BO_06_nodeB // v_msgInd.msgIn.basicHeader.routerHopLimit := ?; tc_noac.start; alt { [] a_receiveGeoBroadcast( ?, ?) { tc_noac.stop; log("*** " & testcasename() & ": FAIL: GBC message re-broadcasted ***"); f_selfOrClientSyncAndVerdict(c_tbDone, e_error); } [] tc_noac.timeout { log("*** " & testcasename() & ": PASS: GBC message not re-broadcasted ***"); f_selfOrClientSyncAndVerdict(c_tbDone, e_success); } } // Postamble f_poNeighbour(); } // end f_GEONW_PON_GBC_BO_04_nodeD } // end GEONW_PON_GBC_BO_04 group GEONW_PON_GBC_BV_05 { /** * @desc TP Function for TC_GEONW_PON_GBC_BV_05 */ function f_GEONW_PON_GBC_BV_05() runs on ItsMtc { // Local variables var ItsGeoNetworking v_nodeB; var ItsGeoNetworking v_nodeC; var ItsGeoNetworking v_nodeD; // Test control if (not PICS_GN_GBC_FWD) { log("*** " & testcasename() & ": PICS_GN_GBC_FWD required for executing the TC ***"); setverdict(inconc); stop; } // Test component configuration f_cf04Up(); // Preamble // Start components v_nodeB := f_getComponent(c_compNodeB); v_nodeC := f_getComponent(c_compNodeC); v_nodeD := f_getComponent(c_compNodeD); v_nodeB.start(f_GEONW_PON_GBC_BV_05_nodeB()); v_nodeC.start(f_GEONW_PON_GBC_BV_05_nodeC()); v_nodeD.start(f_GEONW_PON_GBC_BV_05_nodeD()); // Synchronization f_serverSync3ClientsAndStop({c_prDone, c_tbDone}); // Cleanup f_cf04Down(); } // end f_GEONW_PON_GBC_BV_05 /** * @desc Behavior function for NodeB (TC_GEONW_PON_GBC_BV_05) */ function f_GEONW_PON_GBC_BV_05_nodeB() runs on ItsGeoNetworking { // Local variables var LongPosVector v_longPosVectorNodeC := f_getPosition(c_compNodeC); // Preamble f_prNeighbour(); f_selfOrClientSyncAndVerdict(c_prDone, e_success); // Test Body tc_ac.start; alt { [] a_receiveGeoBroadcastWithArea( mw_longPosVectorPosition(v_longPosVectorNodeC), ?, f_getGeoBroadcastArea(c_area2)) { tc_ac.stop; log("*** " & testcasename() & ": PASS: GBC message correctly forwarded to area center ***"); f_selfOrClientSyncAndVerdict(c_tbDone, e_success); } [] tc_ac.timeout { log("*** " & testcasename() & ": FAIL: GBC message not received ***"); f_selfOrClientSyncAndVerdict(c_tbDone, e_error); } } // Postamble f_poNeighbour(); } // end f_GEONW_PON_GBC_BV_05_nodeB /** * @desc Behavior function for NodeC (TC_GEONW_PON_GBC_BV_05) */ function f_GEONW_PON_GBC_BV_05_nodeC() runs on ItsGeoNetworking { // Local variables var LongPosVector v_longPosVectorNodeC := f_getPosition(c_compNodeC); var GeoNetworkingInd v_msgInd; // Preamble f_prNeighbour(); f_selfOrClientSyncAndVerdict(c_prDone, e_success); // Test Body f_sendGeoNetMessage( valueof(m_geoNwReq_linkLayerBroadcast( m_geoNwPdu( m_geoNwBroadcastPacket( v_longPosVectorNodeC, vc_localSeqNumber, f_getGeoBroadcastArea(c_area2) ) ) ) )); f_selfOrClientSyncAndVerdict(c_tbDone, e_success); // Postamble f_poNeighbour(); } // end f_GEONW_PON_GBC_BV_05_nodeC /** * @desc Behavior function for NodeD (TC_GEONW_PON_GBC_BV_05) */ function f_GEONW_PON_GBC_BV_05_nodeD() runs on ItsGeoNetworking { // Local variables var LongPosVector v_longPosVectorNodeC := f_getPosition(c_compNodeC); // Preamble f_prNeighbour(); f_selfOrClientSyncAndVerdict(c_prDone, e_success); // Test Body tc_noac.start; alt { [] a_receiveGeoBroadcastWithArea( mw_longPosVectorPosition(v_longPosVectorNodeC), ?, f_getGeoBroadcastArea(c_area2)) { tc_noac.stop; log("*** " & testcasename() & ": FAIL: GBC message not forwarded to area center ***"); f_selfOrClientSyncAndVerdict(c_tbDone, e_error); } [] tc_noac.timeout { log("*** " & testcasename() & ": PASS: GBC message not received ***"); f_selfOrClientSyncAndVerdict(c_tbDone, e_success); } } // Postamble f_poNeighbour(); } // end f_GEONW_PON_GBC_BV_05_nodeD } // end GEONW_PON_GBC_BV_05 group GEONW_PON_GBC_BO_06 { /** * @desc TP Function for TC_GEONW_PON_GBC_BO_06 */ function f_GEONW_PON_GBC_BO_06() runs on ItsMtc { // Local variables var ItsGeoNetworking v_nodeB; var ItsGeoNetworking v_nodeC; var ItsGeoNetworking v_nodeD; var UInt16 v_sequenceNumber := f_getInitialSequenceNumber(); // Test control if (not PICS_GN_GBC_FWD) { log("*** " & testcasename() & ": PICS_GN_GBC_FWD required for executing the TC ***"); setverdict(inconc); stop; } if ((f_getGeoBroadcastForwardingAlgorithm() != e_simple) and (f_getGeoBroadcastForwardingAlgorithm() != e_unspecified)) { log("*** " & testcasename() & ": PICS_GN_GEOBROADCAST_FORWARDING_ALGORITHM == ( e_simple or e_unspecified ) required for executing the TC ***"); setverdict(inconc); stop; } // Test component configuration f_cf04Up(); // Preamble // Start components v_nodeB := f_getComponent(c_compNodeB); v_nodeC := f_getComponent(c_compNodeC); v_nodeD := f_getComponent(c_compNodeD); v_nodeB.start(f_GEONW_PON_GBC_BO_06_nodeB()); v_nodeC.start(f_GEONW_PON_GBC_BO_06_nodeC(v_sequenceNumber)); v_nodeD.start(f_GEONW_PON_GBC_BO_06_nodeD(v_sequenceNumber)); // Synchronization f_serverSync3ClientsAndStop({c_prDone, c_tbDone}); // Cleanup f_cf04Down(); } // end f_GEONW_PON_GBC_BO_06 /** * @desc Behavior function for NodeB (TC_GEONW_PON_GBC_BO_06) */ function f_GEONW_PON_GBC_BO_06_nodeB() runs on ItsGeoNetworking { // Local variables var LongPosVector v_longPosVectorNodeC := f_getPosition(c_compNodeC); var template (present) GeoNetworkingInd v_msgInd; //FIXME RGY variable is declared to store the received message var GeoNetworkingInd v_msgIndRcv; // Preamble f_prNeighbour(); tc_ac.start; alt { [] geoNetworkingPort.receive(mw_geoNwInd(mw_geoNwPdu(mw_geoNwBroadcastPacketWithArea( mw_longPosVectorPosition(v_longPosVectorNodeC), ?, f_getGeoBroadcastArea(c_area2) )))) -> value v_msgIndRcv { //FIXME RGY the received value stored in the template variable too v_msgInd:= v_msgIndRcv; tc_ac.stop; log("*** " & testcasename() & ": PASS: Pre-conditions: GBC message correctly forwarded to area center ***"); f_selfOrClientSyncAndVerdict(c_prDone, e_success); } [] tc_ac.timeout { log("*** " & testcasename() & ": INCONC: Pre-conditions: GBC message not received ***"); f_selfOrClientSyncAndVerdict(c_prDone, e_timeout); } } // Test Body v_msgInd.msgIn.basicHeader.routerHopLimit := ?; tc_noac.start; alt { [] geoNetworkingPort.receive(v_msgInd) { tc_noac.stop; log("*** " & testcasename() & ": FAIL: GBC message re-forwarded to area center ***"); f_selfOrClientSyncAndVerdict(c_tbDone, e_error); } [] tc_noac.timeout { log("*** " & testcasename() & ": PASS: GBC message not re-forwarded ***"); f_selfOrClientSyncAndVerdict(c_tbDone, e_success); } } // Postamble f_poNeighbour(); } // end f_GEONW_PON_GBC_BO_06_nodeB /** * @desc Behavior function for NodeC (TC_GEONW_PON_GBC_BO_06) */ function f_GEONW_PON_GBC_BO_06_nodeC(in UInt16 p_sequenceNumber) runs on ItsGeoNetworking { // Local variables var LongPosVector v_longPosVectorNodeC := f_getPosition(c_compNodeC); // Preamble f_prNeighbour(); f_sendGeoNetMessage( valueof(m_geoNwReq_linkLayerBroadcast( m_geoNwPdu( m_geoNwBroadcastPacket( v_longPosVectorNodeC, p_sequenceNumber, f_getGeoBroadcastArea(c_area2) ), -, c_defaultHopLimit ) ) )); f_selfOrClientSyncAndVerdict(c_prDone, e_success); // Test Body f_selfOrClientSyncAndVerdict(c_tbDone, e_success); // Postamble f_poNeighbour(); } // end f_GEONW_PON_GBC_BO_06_nodeC /** * @desc Behavior function for NodeD (TC_GEONW_PON_GBC_BO_06) */ function f_GEONW_PON_GBC_BO_06_nodeD(in UInt16 p_sequenceNumber) runs on ItsGeoNetworking { // Local variables var LongPosVector v_longPosVectorNodeC := f_getPosition(c_compNodeC); // Preamble f_prNeighbour(); tc_noac.start; alt { [] geoNetworkingPort.receive(mw_geoNwInd(mw_geoNwPdu(mw_geoNwBroadcastPacketWithArea( mw_longPosVectorPosition(v_longPosVectorNodeC), ?, f_getGeoBroadcastArea(c_area2) )))) { tc_noac.stop; log("*** " & testcasename() & ": INCONC: Pre-conditions: GBC message not forwarded to area center ***"); f_selfOrClientSyncAndVerdict(c_prDone, e_error); } [] tc_noac.timeout { log("*** " & testcasename() & ": PASS: Pre-conditions: GBC message not received ***"); f_selfOrClientSyncAndVerdict(c_prDone, e_success); } } // Test Body // send geoBroadcast for second time (same source + same seq Nr + lower RHL) f_sendGeoNetMessage( valueof(m_geoNwReq_linkLayerBroadcast( m_geoNwPdu( m_geoNwBroadcastPacket( v_longPosVectorNodeC, p_sequenceNumber, f_getGeoBroadcastArea(c_area2) ), -, c_defaultHopLimit - 1 ) ) )); tc_noac.start; alt { [] geoNetworkingPort.receive(mw_geoNwInd(mw_geoNwPdu(mw_geoNwBroadcastPacketWithArea( mw_longPosVectorPosition(v_longPosVectorNodeC), ?, f_getGeoBroadcastArea(c_area2) )))) { tc_noac.stop; log("*** " & testcasename() & ": FAIL: GBC re-forwarded! (not to area center!) ***"); f_selfOrClientSyncAndVerdict(c_tbDone, e_error); } [] tc_noac.timeout { log("*** " & testcasename() & ": PASS: GBC message not received ***"); f_selfOrClientSyncAndVerdict(c_tbDone, e_success); } } // Postamble f_poNeighbour(); } // end f_GEONW_PON_GBC_BO_06_nodeD } // end GEONW_PON_GBC_BO_06 group GEONW_PON_GBC_BV_07 { /** * @desc TP Function for TC_GEONW_PON_GBC_BV_07 */ function f_GEONW_PON_GBC_BV_07() runs on ItsMtc { // Local variables var ItsGeoNetworking v_nodeB; var ItsGeoNetworking v_nodeD; // Test control if (not PICS_GN_GBC_FWD) { log("*** " & testcasename() & ": PICS_GN_GBC_FWD required for executing the TC ***"); setverdict(inconc); stop; } // Test component configuration f_cf02Up(); // Preamble // Start components v_nodeB := f_getComponent(c_compNodeB); v_nodeD := f_getComponent(c_compNodeD); v_nodeB.start(f_GEONW_PON_GBC_BV_07_nodeB()); v_nodeD.start(f_GEONW_PON_GBC_BV_07_nodeD()); // Synchronization f_serverSync2ClientsAndStop({c_prDone, c_tbDone}); // Cleanup f_cf02Down(); } // end f_GEONW_PON_GBC_BV_07 /** * @desc Behavior function for NodeB (TC_GEONW_PON_GBC_BV_07) */ function f_GEONW_PON_GBC_BV_07_nodeB() runs on ItsGeoNetworking { // Local variables var LongPosVector v_longPosVectorNodeB := f_getPosition(c_compNodeB); // Preamble f_prNeighbour(); f_selfOrClientSyncAndVerdict(c_prDone, e_success); // Test Body f_sendGeoNetMessage( valueof(m_geoNwReq_linkLayerBroadcast( m_geoNwPdu( m_geoNwBroadcastPacket( v_longPosVectorNodeB, vc_localSeqNumber, f_getGeoBroadcastArea(c_area1), c_defaultHopLimit ), -, c_defaultHopLimit ) ) )); tc_ac.start; alt { [] a_receiveGeoBroadcastWithAreaWithHopLimit( mw_longPosVectorPosition(v_longPosVectorNodeB), ?, f_getGeoBroadcastArea(c_area1), c_defaultHopLimit - 1, c_defaultHopLimit) { tc_ac.stop; log("*** " & testcasename() & ": PASS: GBC message correctly re-broadcasted ***"); f_selfOrClientSyncAndVerdict(c_tbDone, e_success); } [] tc_ac.timeout { log("*** " & testcasename() & ": FAIL: GBC message not re-broadcasted ***"); f_selfOrClientSyncAndVerdict(c_tbDone, e_error); } } // Postamble f_poNeighbour(); } // end f_GEONW_PON_GBC_BV_07_nodeB /** * @desc Behavior function for NodeD (TC_GEONW_PON_GBC_BV_07) */ function f_GEONW_PON_GBC_BV_07_nodeD() runs on ItsGeoNetworking { // Local variables var LongPosVector v_longPosVectorNodeB := f_getPosition(c_compNodeB); var GeoNetworkingInd v_msgInd; // Preamble f_prNeighbour(); f_selfOrClientSyncAndVerdict(c_prDone, e_success); // Test Body tc_ac.start; alt { [] a_receiveGeoBroadcastWithAreaWithHopLimit( mw_longPosVectorPosition(v_longPosVectorNodeB), ?, f_getGeoBroadcastArea(c_area1), c_defaultHopLimit - 1, c_defaultHopLimit) { tc_ac.stop; log("*** " & testcasename() & ": PASS: GBC message correctly re-broadcasted ***"); f_selfOrClientSyncAndVerdict(c_tbDone, e_success); } [] tc_ac.timeout { log("*** " & testcasename() & ": FAIL: GBC message not re-broadcasted ***"); f_selfOrClientSyncAndVerdict(c_tbDone, e_error); } } // Postamble f_poNeighbour(); } // end f_GEONW_PON_GBC_BV_07_nodeD } // end GEONW_PON_GBC_BV_07 group GEONW_PON_GBC_BV_08 { /** * @desc TP Function for TC_GEONW_PON_GBC_BV_08 */ function f_GEONW_PON_GBC_BV_08() runs on ItsMtc { // Local variables var ItsGeoNetworking v_nodeB; var ItsGeoNetworking v_nodeD; // Test control if (not PICS_GN_GBC_FWD) { log("*** " & testcasename() & ": PICS_GN_GBC_FWD required for executing the TC ***"); setverdict(inconc); stop; } // Test component configuration f_cf02Up(); // Preamble // Start components v_nodeB := f_getComponent(c_compNodeB); v_nodeD := f_getComponent(c_compNodeD); v_nodeB.start(f_GEONW_PON_GBC_BV_08_nodeB()); v_nodeD.start(f_GEONW_PON_GBC_BV_08_nodeD()); // Synchronization f_serverSync2ClientsAndStop({c_prDone, c_tbDone}); // Cleanup f_cf02Down(); } // end f_GEONW_PON_GBC_BV_08 /** * @desc Behavior function for NodeB (TC_GEONW_PON_GBC_BV_08) */ function f_GEONW_PON_GBC_BV_08_nodeB() runs on ItsGeoNetworking { // Local variables var LongPosVector v_longPosVectorNodeB := f_getPosition(c_compNodeB); // Preamble f_prNeighbour(); f_selfOrClientSyncAndVerdict(c_prDone, e_success); // Test Body f_sendGeoNetMessage( valueof(m_geoNwReq_linkLayerBroadcast( m_geoNwPdu( m_geoNwBroadcastPacket( v_longPosVectorNodeB, vc_localSeqNumber, f_getGeoBroadcastArea(c_area1) ), -, c_hopLimit1 ) ) )); tc_noac.start; alt { [] a_receiveGeoBroadcast( mw_longPosVectorPosition(v_longPosVectorNodeB), ?) { tc_noac.stop; log("*** " & testcasename() & ": FAIL: GBC message re-broadcasted ***"); f_selfOrClientSyncAndVerdict(c_tbDone, e_error); } [] tc_noac.timeout { log("*** " & testcasename() & ": PASS: GBC message not re-broadcasted ***"); f_selfOrClientSyncAndVerdict(c_tbDone, e_success); } } // Postamble f_poNeighbour(); } // end f_GEONW_PON_GBC_BV_08_nodeB /** * @desc Behavior function for NodeD (TC_GEONW_PON_GBC_BV_08) */ function f_GEONW_PON_GBC_BV_08_nodeD() runs on ItsGeoNetworking { // Local variables var LongPosVector v_longPosVectorNodeB := f_getPosition(c_compNodeB); // Preamble f_prNeighbour(); f_selfOrClientSyncAndVerdict(c_prDone, e_success); // Test Body tc_noac.start; alt { [] a_receiveGeoBroadcast( mw_longPosVectorPosition(v_longPosVectorNodeB), ?) { tc_noac.stop; log("*** " & testcasename() & ": FAIL: GBC message re-broadcasted ***"); f_selfOrClientSyncAndVerdict(c_tbDone, e_error); } [] tc_noac.timeout { log("*** " & testcasename() & ": PASS: GBC message not re-broadcasted ***"); f_selfOrClientSyncAndVerdict(c_tbDone, e_success); } } // Postamble f_poNeighbour(); } // end f_GEONW_PON_GBC_BV_08_nodeD } // end GEONW_PON_GBC_BV_08 /** * @desc TP Function for TC_GEONW_PON_GBC_BV_09 */ function f_GEONW_PON_GBC_BV_09() 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_GBC_DST) { log("*** " & testcasename() & ": PICS_GN_GBC_DST required for executing the TC ***"); setverdict(inconc); stop; } // Test component configuration f_cf01Up(); v_longPosVectorNodeB := f_getPosition(c_compNodeB); // Test adapter configuration // Preamble f_prNeighbour(); f_selfOrClientSyncAndVerdict(c_prDone, e_success); // Test Body v_gnPacket := m_geoNwPdu(m_geoNwBroadcastPacket( v_longPosVectorNodeB, vc_localSeqNumber, f_getGeoBroadcastArea(c_area1) ) ); f_sendGeoNetMessage(valueof(m_geoNwReq_linkLayerBroadcast(v_gnPacket))); f_sleep(PX_TAC); v_sentRawPayload := valueof(v_gnPacket.gnPacket.packet.payload); for(i:=0; i < lengthof(vc_utInds) and not match(vc_utInds[i].rawPayload, v_sentRawPayload); i:=i+1) { // empty on purpose } if(i < lengthof(vc_utInds)) { log("*** " & testcasename() & ": PASS: GN was transmitted to upper layer ***"); f_selfOrClientSyncAndVerdict(c_tbDone, e_success); } else { log("*** " & testcasename() & ": FAIL: GN was not transmitted to upper layer ***"); f_selfOrClientSyncAndVerdict(c_tbDone, e_error); } // Postamble f_poNeighbour(); f_cf01Down(); } // end f_GEONW_PON_GBC_BV_09 group GEONW_PON_GBC_BO_10 { /** * @desc TP Function for TC_GEONW_PON_GBC_BO_10 */ function f_GEONW_PON_GBC_BO_10() runs on ItsMtc { // Local variables var ItsGeoNetworking v_nodeB; var ItsGeoNetworking v_nodeD; // Test control if (not PICS_GN_GBC_DST) { log("*** " & testcasename() & ": PICS_GN_GBC_DST required for executing the TC ***"); setverdict(inconc); stop; } if ((f_getGeoBroadcastForwardingAlgorithm() != e_simple) and (f_getGeoBroadcastForwardingAlgorithm() != e_unspecified)) { log("*** " & testcasename() & ": PICS_GN_GEOBROADCAST_FORWARDING_ALGORITHM == ( e_simple or e_unspecified ) required for executing the TC ***"); setverdict(inconc); stop; } // Test component configuration f_cf02Up(c_compNodeB); // Preamble // Start components v_nodeB := f_getComponent(c_compNodeB); v_nodeD := f_getComponent(c_compNodeD); v_nodeB.start(f_GEONW_PON_GBC_BO_10_nodeB()); v_nodeD.start(f_GEONW_PON_GBC_BO_10_nodeD()); // Synchronization f_serverSync2ClientsAndStop({c_prDone, c_tbDone}); // Cleanup f_cf02Down(); } // end f_GEONW_PON_GBC_BO_10 /** * @desc Behavior function for NodeB (TC_GEONW_PON_GBC_BO_10) */ function f_GEONW_PON_GBC_BO_10_nodeB() runs on ItsGeoNetworking { // Local variables var LongPosVector v_longPosVectorNodeB := f_getPosition(c_compNodeB); var template (present) GeoNetworkingPdu v_gnPacket; var integer i; var GnRawPayload v_sentRawPayload; // Preamble f_prNeighbour(); v_gnPacket := m_geoNwPdu(m_geoNwBroadcastPacket( v_longPosVectorNodeB, vc_localSeqNumber, f_getGeoBroadcastArea(c_area1) ), -, c_defaultHopLimit ); f_sendGeoNetMessage(valueof(m_geoNwReq_linkLayerBroadcast(v_gnPacket))); // IUT should also rebroadcast the packet. Get ready tc_ac.start; alt { [] geoNetworkingPort.receive(mw_geoNwInd(mw_geoNwPdu(mw_geoNwBroadcastPacketWithArea( mw_longPosVectorPosition(v_longPosVectorNodeB), ?, f_getGeoBroadcastArea(c_area1) )))) { tc_ac.stop; log("*** " & testcasename() & ": INFO: GBC message rebroadcasted ***"); } [] tc_ac.timeout { log("*** " & testcasename() & ": INFO: GBC message not rebroadcasted ***"); } } f_sleep(PX_TAC); v_sentRawPayload := valueof(v_gnPacket.gnPacket.packet.payload); for(i:=0; i < lengthof(vc_utInds) and not match(vc_utInds[i].rawPayload, v_sentRawPayload); i:=i+1) { // empty on purpose } if(i < lengthof(vc_utInds)) { log("*** " & testcasename() & ": PASS: GN was transmitted to upper layer ***"); //flush received upper indications vc_utInds := {}; f_selfOrClientSyncAndVerdict(c_prDone, e_success); } else { log("*** " & testcasename() & ": INCONC: GN was not transmitted to upper layer ***"); f_selfOrClientSyncAndVerdict(c_prDone, e_error); } // Test Body f_sleep(PX_TAC); if(0 != lengthof(vc_utInds)) { log("*** " & testcasename() & ": FAIL: GN was transmitted to upper layer ***"); f_selfOrClientSyncAndVerdict(c_tbDone, e_error); } else { log("*** " & testcasename() & ": PASS: GN was NOT transmitted to upper layer ***"); f_selfOrClientSyncAndVerdict(c_tbDone, e_success); } // Postamble f_poNeighbour(); } // end f_GEONW_PON_GBC_BO_10_nodeB /** * @desc Behavior function for NodeD (TC_GEONW_PON_GBC_BO_10) */ function f_GEONW_PON_GBC_BO_10_nodeD() runs on ItsGeoNetworking { // Local variables var LongPosVector v_longPosVectorNodeB := f_getPosition(c_compNodeB); //FIXME RGY variable shall not be of template type, because a message is stored into it // var template (value) GeoNetworkingInd v_msgInd; var GeoNetworkingInd v_msgInd; var integer i; // Preamble f_prNeighbour(); // IUT should also rebroadcast the packet. Get ready tc_ac.start; alt { [] geoNetworkingPort.receive(mw_geoNwInd(mw_geoNwPdu(mw_geoNwBroadcastPacketWithArea( mw_longPosVectorPosition(v_longPosVectorNodeB), ?, f_getGeoBroadcastArea(c_area1) )))) -> value v_msgInd { tc_ac.stop; log("*** " & testcasename() & ": INFO: Pre-conditions: GBC message rebroadcasted ***"); f_selfOrClientSyncAndVerdict(c_prDone, e_success); } [] tc_ac.timeout { log("*** " & testcasename() & ": INFO: Pre-conditions: GBC message not rebroadcasted ***"); f_selfOrClientSyncAndVerdict(c_prDone, e_timeout); } } // Test Body v_msgInd.msgIn.basicHeader.routerHopLimit := valueof(v_msgInd.msgIn.basicHeader.routerHopLimit) / 2; f_sendGeoNetMessage(valueof(m_geoNwReq_linkLayerBroadcast(v_msgInd.msgIn))); f_selfOrClientSyncAndVerdict(c_tbDone, e_success); // Postamble f_poNeighbour(); } // end f_GEONW_PON_GBC_BO_10_nodeD } // end GEONW_PON_GBC_BO_10 /** * @desc TP Function for TC_GEONW_PON_GBC_BV_11 */ function f_GEONW_PON_GBC_BV_11() 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_GBC_FWD) { log("*** " & testcasename() & ": PICS_GN_GBC_FWD required for executing the TC ***"); setverdict(inconc); stop; } // Test component configuration f_cf01Up(); v_longPosVectorNodeB := f_getPosition(c_compNodeB); // Test adapter configuration // Preamble f_prNeighbour(); f_selfOrClientSyncAndVerdict(c_prDone, e_success); // Test Body v_gnPacket := m_geoNwPdu(m_geoNwBroadcastPacket( v_longPosVectorNodeB, vc_localSeqNumber, f_getGeoBroadcastArea(c_area2) ) ); f_sendGeoNetMessage(valueof(m_geoNwReq_linkLayerBroadcast(v_gnPacket))); f_sleep(PX_TAC); if(0 != lengthof(vc_utInds)) { log("*** " & testcasename() & ": FAIL: GN was transmitted to upper layer ***"); f_selfOrClientSyncAndVerdict(c_tbDone, e_error); } else { log("*** " & testcasename() & ": PASS: GN was NOT transmitted to upper layer ***"); f_selfOrClientSyncAndVerdict(c_tbDone, e_success); } // Postamble f_poNeighbour(); f_cf01Down(); } // end f_GEONW_PON_GBC_BV_11 group GEONW_PON_GBC_BV_12 { /** * @desc TP Function for TC_GEONW_PON_GBC_BV_12 */ function f_GEONW_PON_GBC_BV_12() runs on ItsMtc { // Local variables var ItsGeoNetworking v_nodeB; var ItsGeoNetworking v_nodeD; // Test control if (not PICS_GN_GBC_SRC) { log("*** " & testcasename() & ": PICS_GN_GBC_SRC required for executing the TC ***"); setverdict(inconc); stop; } if ((f_getGeoBroadcastForwardingAlgorithm() != e_cbf)) { log("*** " & testcasename() & ": PICS_GN_GEOBROADCAST_FORWARDING_ALGORITHM == ( e_cbf ) required for executing the TC ***"); setverdict(inconc); stop; } // Test component configuration f_cf02Up(); // Preamble // Start components v_nodeB := f_getComponent(c_compNodeB); v_nodeD := f_getComponent(c_compNodeD); v_nodeB.start(f_GEONW_PON_GBC_BV_12_nodeB()); v_nodeD.start(f_GEONW_PON_GBC_BV_12_nodeD()); // Synchronization f_serverSync2ClientsAndStop({c_prDone, c_tbDone}); // Cleanup f_cf02Down(); } // end f_GEONW_PON_GBC_BV_12 /** * @desc Behavior function for NodeB (TC_GEONW_PON_GBC_BV_12) */ function f_GEONW_PON_GBC_BV_12_nodeB() runs on ItsGeoNetworking { // Local variables var LongPosVector v_longPosVectorIut := f_getPosition(c_compIut); // Preamble f_prNeighbour(); f_selfOrClientSyncAndVerdict(c_prDone, e_success); // Test Body if ( not f_utTriggerEvent(m_generateGeoBroadcastMessage(f_getArea(c_area1))) ) { log("*** " & testcasename() & ": INCONC: Trigger failed ***"); f_selfOrClientSyncAndVerdict(c_tbDone, e_timeout); } tc_ac.start; alt { [] a_receiveGeoBroadcastWithArea( mw_longPosVectorPosition(v_longPosVectorIut), ?, f_getGeoBroadcastArea(c_area1)) { tc_ac.stop; log("*** " & testcasename() & ": PASS: GBC message received correctly ***"); f_selfOrClientSyncAndVerdict(c_tbDone, e_success); } [] tc_ac.timeout { log("*** " & testcasename() & ": FAIL: GBC message not received ***"); f_selfOrClientSyncAndVerdict(c_tbDone, e_error); } } // Postamble f_poNeighbour(); } // end f_GEONW_PON_GBC_BV_12_nodeB /** * @desc Behavior function for NodeD (TC_GEONW_PON_GBC_BV_12) */ function f_GEONW_PON_GBC_BV_12_nodeD() runs on ItsGeoNetworking { // Local variables var LongPosVector v_longPosVectorIut := f_getPosition(c_compIut); // Preamble f_prNeighbour(); f_selfOrClientSyncAndVerdict(c_prDone, e_success); // Test Body tc_ac.start; alt { [] a_receiveGeoBroadcastWithArea( mw_longPosVectorPosition(v_longPosVectorIut), ?, f_getGeoBroadcastArea(c_area1)) { tc_ac.stop; log("*** " & testcasename() & ": PASS: GBC message received correctly ***"); f_selfOrClientSyncAndVerdict(c_tbDone, e_success); } [] tc_ac.timeout { log("*** " & testcasename() & ": FAIL: GBC message not received ***"); f_selfOrClientSyncAndVerdict(c_tbDone, e_error); } } // Postamble f_poNeighbour(); } // end f_GEONW_PON_GBC_BV_12_nodeD } // end GEONW_PON_GBC_BV_12 group GEONW_PON_GBC_BO_19 { /** * @desc TP Function for TC_GEONW_PON_GBC_BO_19 */ function f_GEONW_PON_GBC_BO_19() runs on ItsMtc { // Local variables var ItsGeoNetworking v_nodeB; var ItsGeoNetworking v_nodeC; var ItsGeoNetworking v_nodeD; var UInt16 v_distanceTooBig; // Test control if (not PICS_GN_GBC_FWD) { log("*** " & testcasename() & ": PICS_GN_GBC_FWD required for executing the TC ***"); setverdict(inconc); stop; } // Test component configuration f_cf04Up(); v_distanceTooBig := float2int(1.1 * f_radiusFromCircularArea(f_getGnMaxAreaSize()*c_squareKm)); // Preamble // Start components v_nodeB := f_getComponent(c_compNodeB); v_nodeC := f_getComponent(c_compNodeC); v_nodeD := f_getComponent(c_compNodeD); v_nodeB.start(f_GEONW_PON_GBC_BO_19_nodeB(v_distanceTooBig)); v_nodeC.start(f_GEONW_PON_GBC_BO_19_nodeC(v_distanceTooBig)); v_nodeD.start(f_GEONW_PON_GBC_BO_19_nodeD(v_distanceTooBig)); // Synchronization f_serverSync3ClientsAndStop({c_prDone, c_tbDone}); // Cleanup f_cf04Down(); } // end f_GEONW_PON_GBC_BO_19 /** * @desc Behavior function for NodeB (TC_GEONW_PON_GBC_BO_19) */ function f_GEONW_PON_GBC_BO_19_nodeB(in UInt16 p_distanceTooBig) runs on ItsGeoNetworking { // Local variables var LongPosVector v_longPosVectorNodeC := f_getPosition(c_compNodeC); var GeoArea v_areaTooBig; // Preamble f_prNeighbour(); v_areaTooBig := f_computeCircularArea( f_getPosition(c_compNodeB), p_distanceTooBig ); f_selfOrClientSyncAndVerdict(c_prDone, e_success); // Test Body tc_noac.start; alt { [] geoNetworkingPort.receive(mw_geoNwInd(mw_geoNwPdu(mw_geoNwBroadcastPacketWithArea( mw_longPosVectorPosition(v_longPosVectorNodeC), ?, f_geoArea2GeoBroadcastArea(v_areaTooBig) )))) { tc_noac.stop; log("*** " & testcasename() & ": FAIL: GBC message forwarded ***"); f_selfOrClientSyncAndVerdict(c_tbDone, e_error); } [] tc_noac.timeout { log("*** " & testcasename() & ": PASS: GBC message not forwarded ***"); f_selfOrClientSyncAndVerdict(c_tbDone, e_success); } } // Postamble f_poNeighbour(); } // end f_GEONW_PON_GBC_BO_19_nodeB /** * @desc Behavior function for NodeC (TC_GEONW_PON_GBC_BO_19) */ function f_GEONW_PON_GBC_BO_19_nodeC(in UInt16 p_distanceTooBig) runs on ItsGeoNetworking { // Local variables var LongPosVector v_longPosVectorNodeC := f_getPosition(c_compNodeC); var GeoArea v_areaTooBig; // Preamble f_prNeighbour(); v_areaTooBig := f_computeCircularArea( f_getPosition(c_compNodeB), p_distanceTooBig ); f_sendGeoNetMessage( valueof(m_geoNwReq_linkLayerBroadcast( m_geoNwPdu( m_geoNwBroadcastPacket( v_longPosVectorNodeC, vc_localSeqNumber, f_geoArea2GeoBroadcastArea(v_areaTooBig) ) ) ) )); f_selfOrClientSyncAndVerdict(c_prDone, e_success); // Test Body f_selfOrClientSyncAndVerdict(c_tbDone, e_success); // Postamble f_poNeighbour(); } // end f_GEONW_PON_GBC_BO_19_nodeC /** * @desc Behavior function for NodeD (TC_GEONW_PON_GBC_BO_19) */ function f_GEONW_PON_GBC_BO_19_nodeD(in UInt16 p_distanceTooBig) runs on ItsGeoNetworking { // Local variables var LongPosVector v_longPosVectorNodeC := f_getPosition(c_compNodeC); var GeoArea v_areaTooBig; // Preamble f_prNeighbour(); v_areaTooBig := f_computeCircularArea( f_getPosition(c_compNodeB), p_distanceTooBig ); f_selfOrClientSyncAndVerdict(c_prDone, e_success); // Test Body tc_noac.start; alt { [] geoNetworkingPort.receive(mw_geoNwInd(mw_geoNwPdu(mw_geoNwBroadcastPacketWithArea( mw_longPosVectorPosition(v_longPosVectorNodeC), ?, f_geoArea2GeoBroadcastArea(v_areaTooBig) )))) { tc_noac.stop; log("*** " & testcasename() & ": FAIL: GBC message forwarded ***"); f_selfOrClientSyncAndVerdict(c_tbDone, e_error); } [] tc_noac.timeout { log("*** " & testcasename() & ": PASS: GBC message not forwarded ***"); f_selfOrClientSyncAndVerdict(c_tbDone, e_success); } } // Postamble f_poNeighbour(); } // end f_GEONW_PON_GBC_BO_19_nodeD } // end GEONW_PON_GBC_BO_19 group GEONW_PON_GBC_BV_20 { /** * @desc TP Function for TC_GEONW_PON_GBC_BV_20 */ function f_GEONW_PON_GBC_BV_20() runs on ItsMtc { // Local variables var ItsGeoNetworking v_nodeB; var ItsGeoNetworking v_nodeC; var ItsGeoNetworking v_nodeD; // Test control if (not PICS_GN_GBC_FWD) { log("*** " & testcasename() & ": PICS_GN_GBC_FWD required for executing the TC ***"); setverdict(inconc); stop; } // Test component configuration f_cf04Up(); // Preamble // Start components v_nodeB := f_getComponent(c_compNodeB); v_nodeC := f_getComponent(c_compNodeC); v_nodeD := f_getComponent(c_compNodeD); v_nodeB.start(f_GEONW_PON_GBC_BV_20_nodeB()); v_nodeC.start(f_GEONW_PON_GBC_BV_20_nodeC()); v_nodeD.start(f_GEONW_PON_GBC_BV_20_nodeD()); // Synchronization f_serverSync3ClientsAndStop({c_prDone, c_tbDone}); // Cleanup f_cf04Down(); } // end f_GEONW_PON_GBC_BV_20 /** * @desc Behavior function for NodeB (TC_GEONW_PON_GBC_BV_20) */ function f_GEONW_PON_GBC_BV_20_nodeB() runs on ItsGeoNetworking { // Local variables var LongPosVector v_longPosVectorNodeC := f_getPosition(c_compNodeC); // Preamble f_prNeighbour(); f_selfOrClientSyncAndVerdict(c_prDone, e_success); // Test Body tc_ac.start; alt { [] geoNetworkingPort.receive(mw_geoNwInd(mw_geoNwPdu(mw_geoNwBroadcastPacketWithArea( mw_longPosVectorPosition(v_longPosVectorNodeC), ?, f_getGeoBroadcastArea(c_area2) )))) { tc_ac.stop; log("*** " & testcasename() & ": PASS: GBC message re-broadcasted ***"); f_selfOrClientSyncAndVerdict(c_tbDone, e_success); } [] tc_ac.timeout { log("*** " & testcasename() & ": FAIL: GBC message not re-broadcasted ***"); f_selfOrClientSyncAndVerdict(c_tbDone, e_error); } } // Postamble f_poNeighbour(); } // end f_GEONW_PON_GBC_BV_20_nodeB /** * @desc Behavior function for NodeC (TC_GEONW_PON_GBC_BV_20) */ function f_GEONW_PON_GBC_BV_20_nodeC() runs on ItsGeoNetworking { // Local variables var LongPosVector v_longPosVectorNodeC := f_getPosition(c_compNodeC); // Preamble f_prNeighbour(); f_selfOrClientSyncAndVerdict(c_prDone, e_success); // Test Body tc_ac.start; alt { [] geoNetworkingPort.receive(mw_geoNwInd(mw_geoNwPdu(mw_geoNwBroadcastPacketWithArea( mw_longPosVectorPosition(v_longPosVectorNodeC), ?, f_getGeoBroadcastArea(c_area2) )))) { tc_ac.stop; log("*** " & testcasename() & ": PASS: GBC message re-broadcasted ***"); f_selfOrClientSyncAndVerdict(c_tbDone, e_success); } [] tc_ac.timeout { log("*** " & testcasename() & ": FAIL: GBC message not re-broadcasted ***"); f_selfOrClientSyncAndVerdict(c_tbDone, e_error); } } // Postamble f_poNeighbour(); } // end f_GEONW_PON_GBC_BV_20_nodeC /** * @desc Behavior function for NodeD (TC_GEONW_PON_GBC_BV_20) */ function f_GEONW_PON_GBC_BV_20_nodeD() runs on ItsGeoNetworking { // Local variables var LongPosVector v_longPosVectorNodeC := f_getPosition(c_compNodeC); // Preamble f_prNonNeighbour(); f_selfOrClientSyncAndVerdict(c_prDone, e_success); // Test Body f_sendGeoNetMessage( valueof(m_geoNwReq_linkLayerBroadcast( m_geoNwPdu( m_geoNwBroadcastPacket( v_longPosVectorNodeC, vc_localSeqNumber, f_getGeoBroadcastArea(c_area2) ) ) ) )); tc_ac.start; alt { [] geoNetworkingPort.receive(mw_geoNwInd(mw_geoNwPdu(mw_geoNwBroadcastPacketWithArea( mw_longPosVectorPosition(v_longPosVectorNodeC), ?, f_getGeoBroadcastArea(c_area2) )))) { tc_ac.stop; log("*** " & testcasename() & ": PASS: GBC message re-broadcasted ***"); f_selfOrClientSyncAndVerdict(c_tbDone, e_success); } [] tc_ac.timeout { log("*** " & testcasename() & ": FAIL: GBC message not re-broadcasted ***"); f_selfOrClientSyncAndVerdict(c_tbDone, e_error); } } // Postamble f_poNeighbour(); } // end f_GEONW_PON_GBC_BV_20_nodeD } // end GEONW_PON_GBC_BV_20 group GEONW_PON_GBC_BV_21 { /** * @desc TP Function for TC_GEONW_PON_GBC_BV_21 */ function f_GEONW_PON_GBC_BV_21() runs on ItsMtc { // Local variables var ItsGeoNetworking v_nodeB; var ItsGeoNetworking v_nodeC; var ItsGeoNetworking v_nodeD; // Test control if (not PICS_GN_GBC_FWD) { log("*** " & testcasename() & ": PICS_GN_GBC_FWD required for executing the TC ***"); setverdict(inconc); stop; } // Test component configuration f_cf04Up(); // Preamble // Start components v_nodeB := f_getComponent(c_compNodeB); v_nodeC := f_getComponent(c_compNodeC); v_nodeD := f_getComponent(c_compNodeD); v_nodeB.start(f_GEONW_PON_GBC_BV_21_nodeB()); v_nodeC.start(f_GEONW_PON_GBC_BV_21_nodeC()); v_nodeD.start(f_GEONW_PON_GBC_BV_21_nodeD()); // Synchronization f_serverSync3ClientsAndStop({c_prDone, c_tbDone}); // Cleanup f_cf04Down(); } // end f_GEONW_PON_GBC_BV_21 /** * @desc Behavior function for NodeB (TC_GEONW_PON_GBC_BV_20) */ function f_GEONW_PON_GBC_BV_21_nodeB() runs on ItsGeoNetworking { // Local variables var LongPosVector v_longPosVectorNodeC := f_getPosition(c_compNodeC); // Preamble f_prNeighbour(); f_selfOrClientSyncAndVerdict(c_prDone, e_success); // Test Body tc_ac.start; alt { [] geoNetworkingPort.receive(mw_geoNwInd(mw_geoNwPdu(mw_geoNwBroadcastPacketWithArea( mw_longPosVectorPosition(v_longPosVectorNodeC), ?, f_getGeoBroadcastArea(c_area2) )))) { tc_ac.stop; log("*** " & testcasename() & ": PASS: GBC message re-broadcasted ***"); f_selfOrClientSyncAndVerdict(c_tbDone, e_success); } [] tc_ac.timeout { log("*** " & testcasename() & ": FAIL: GBC message not re-broadcasted ***"); f_selfOrClientSyncAndVerdict(c_tbDone, e_error); } } // Postamble f_poNeighbour(); } // end f_GEONW_PON_GBC_BV_21_nodeB /** * @desc Behavior function for NodeC (TC_GEONW_PON_GBC_BV_21) */ function f_GEONW_PON_GBC_BV_21_nodeC() runs on ItsGeoNetworking { // Local variables var LongPosVector v_longPosVectorNodeC := f_getPosition(c_compNodeC); // Preamble f_prNeighbour(); f_selfOrClientSyncAndVerdict(c_prDone, e_success); // Test Body tc_ac.start; alt { [] geoNetworkingPort.receive(mw_geoNwInd(mw_geoNwPdu(mw_geoNwBroadcastPacketWithArea( mw_longPosVectorPosition(v_longPosVectorNodeC), ?, f_getGeoBroadcastArea(c_area2) )))) { tc_ac.stop; log("*** " & testcasename() & ": PASS: GBC message re-broadcasted ***"); f_selfOrClientSyncAndVerdict(c_tbDone, e_success); } [] tc_ac.timeout { log("*** " & testcasename() & ": FAIL: GBC message not re-broadcasted ***"); f_selfOrClientSyncAndVerdict(c_tbDone, e_error); } } // Postamble f_poNeighbour(); } // end f_GEONW_PON_GBC_BV_21_nodeC /** * @desc Behavior function for NodeD (TC_GEONW_PON_GBC_BV_21) */ function f_GEONW_PON_GBC_BV_21_nodeD() runs on ItsGeoNetworking { // Local variables var LongPosVector v_longPosVectorNodeC := f_getPosition(c_compNodeC); var LongPosVector v_longPosVectorNodeD := f_getPosition(c_compNodeD); // Preamble v_longPosVectorNodeD.pai := int2bit(0,1); f_changePositon(c_compNodeD, v_longPosVectorNodeD); f_prNeighbour(); f_selfOrClientSyncAndVerdict(c_prDone, e_success); // Test Body f_sendGeoNetMessage( valueof(m_geoNwReq_linkLayerBroadcast( m_geoNwPdu( m_geoNwBroadcastPacket( v_longPosVectorNodeC, vc_localSeqNumber, f_getGeoBroadcastArea(c_area2) ) ) ) )); tc_ac.start; alt { [] geoNetworkingPort.receive(mw_geoNwInd(mw_geoNwPdu(mw_geoNwBroadcastPacketWithArea( mw_longPosVectorPosition(v_longPosVectorNodeC), ?, f_getGeoBroadcastArea(c_area2) )))) { tc_ac.stop; log("*** " & testcasename() & ": PASS: GBC message re-broadcasted ***"); f_selfOrClientSyncAndVerdict(c_tbDone, e_success); } [] tc_ac.timeout { log("*** " & testcasename() & ": FAIL: GBC message not re-broadcasted ***"); f_selfOrClientSyncAndVerdict(c_tbDone, e_error); } } // Postamble f_poNeighbour(); } // end f_GEONW_PON_GBC_BV_21_nodeD } // end GEONW_PON_GBC_BV_21 } // end geoGeoBroadcast // 6.2.2.10 group geoTopologicallyScopedBroadcast { group GEONW_PON_TSB_BV_01 { /** * @desc TP Function for TC_GEONW_PON_TSB_BV_01 */ function f_GEONW_PON_TSB_BV_01() runs on ItsMtc { // Local variables var ItsGeoNetworking v_nodeB; var ItsGeoNetworking v_nodeD; // Test control if (not PICS_GN_TSB_SRC) { log("*** " & testcasename() & ": PICS_GN_TSB_SRC required for executing the TC ***"); setverdict(inconc); stop; } // Test component configuration f_cf02Up(); // Preamble // Start components v_nodeB := f_getComponent(c_compNodeB); v_nodeD := f_getComponent(c_compNodeD); v_nodeB.start(f_GEONW_PON_TSB_BV_01_nodeB()); v_nodeD.start(f_GEONW_PON_TSB_BV_01_nodeD()); // Synchronization f_serverSync2ClientsAndStop({c_prDone, c_tbDone}); // Cleanup f_cf02Down(); } // end f_GEONW_PON_TSB_BV_01 /** * @desc Behavior function for NodeB (TC_GEONW_PON_TSB_BV_01) */ function f_GEONW_PON_TSB_BV_01_nodeB() runs on ItsGeoNetworking { // Local variables var LongPosVector v_longPosVectorIut := f_getPosition(c_compIut); // Preamble f_prNeighbour(); f_selfOrClientSyncAndVerdict(c_prDone, e_success); // Test Body if ( not f_utTriggerEvent(m_generateTsbMessage) ) { log("*** " & testcasename() & ": INCONC: Trigger failed ***"); f_selfOrClientSyncAndVerdict(c_tbDone, e_timeout); } tc_ac.start; alt { [] geoNetworkingPort.receive( mw_geoNwInd( mw_geoNwPdu( mw_geoNwTsbPacket(?, mw_longPosVectorPosition(v_longPosVectorIut)) ) ) ) { tc_ac.stop; log("*** " & testcasename() & ": PASS: TSB packet received correctly ***"); f_selfOrClientSyncAndVerdict(c_tbDone, e_success); } [] tc_ac.timeout { log("*** " & testcasename() & ": FAIL: Expected TSB message not received ***"); f_selfOrClientSyncAndVerdict(c_tbDone, e_error); } } // Postamble f_poNeighbour(); } // end f_GEONW_PON_TSB_BV_01_nodeB /** * @desc Behavior function for NodeD (TC_GEONW_PON_TSB_BV_01) */ function f_GEONW_PON_TSB_BV_01_nodeD() runs on ItsGeoNetworking { // Local variables var LongPosVector v_longPosVectorIut := f_getPosition(c_compIut); // Preamble f_prNeighbour(); f_selfOrClientSyncAndVerdict(c_prDone, e_success); // Test Body tc_ac.start; alt { [] geoNetworkingPort.receive( mw_geoNwInd( mw_geoNwPdu( mw_geoNwTsbPacket(?, mw_longPosVectorPosition(v_longPosVectorIut)) ) ) ) { tc_ac.stop; log("*** " & testcasename() & ": PASS: TSB packet received correctly ***"); f_selfOrClientSyncAndVerdict(c_tbDone, e_success); } [] tc_ac.timeout { log("*** " & testcasename() & ": FAIL: Expected TSB message not received ***"); f_selfOrClientSyncAndVerdict(c_tbDone, e_error); } } // Postamble f_poNeighbour(); } // end f_GEONW_PON_TSB_BV_01_nodeD } // end GEONW_PON_TSB_BV_01 group GEONW_PON_TSB_BV_02 { /** * @desc TP Function for TC_GEONW_PON_TSB_BV_02 */ function f_GEONW_PON_TSB_BV_02() runs on ItsMtc { // Local variables var ItsGeoNetworking v_nodeB; var ItsGeoNetworking v_nodeD; // Test control if (not PICS_GN_TSB_FWD) { log("*** " & testcasename() & ": PICS_GN_TSB_FWD required for executing the TC ***"); setverdict(inconc); stop; } // Test component configuration f_cf02Up(); // Preamble // Start components v_nodeB := f_getComponent(c_compNodeB); v_nodeD := f_getComponent(c_compNodeD); v_nodeB.start(f_GEONW_PON_TSB_BV_02_nodeB()); v_nodeD.start(f_GEONW_PON_TSB_BV_02_nodeD()); // Synchronization f_serverSync2ClientsAndStop({c_prDone, c_tbDone}); // Cleanup f_cf02Down(); } // end f_GEONW_PON_TSB_BV_02 /** * @desc Behavior function for NodeB (TC_GEONW_PON_TSB_BV_02) */ function f_GEONW_PON_TSB_BV_02_nodeB() runs on ItsGeoNetworking { // Local variables var LongPosVector v_longPosVectorNodeB := f_getPosition(c_compNodeB); // Preamble f_prNeighbour(); f_selfOrClientSyncAndVerdict(c_prDone, e_success); // Test Body f_sendGeoNetMessage( valueof(m_geoNwReq_linkLayerBroadcast( m_geoNwPdu( m_geoNwTsbPacket( vc_localSeqNumber, v_longPosVectorNodeB ), -, c_defaultHopLimit ) ) )); tc_ac.start; alt { [] geoNetworkingPort.receive( mw_geoNwInd( mw_geoNwPdu( mw_geoNwTsbPacket( ?, mw_longPosVectorPosition(v_longPosVectorNodeB) ) ) ) ) { tc_ac.stop; log("*** " & testcasename() & ": PASS: TSB packet received correctly ***"); f_selfOrClientSyncAndVerdict(c_tbDone, e_success); } [] tc_ac.timeout { log("*** " & testcasename() & ": FAIL: Expected TSB message not received ***"); f_selfOrClientSyncAndVerdict(c_tbDone, e_error); } } // Postamble f_poNeighbour(); } // end f_GEONW_PON_TSB_BV_02_nodeB /** * @desc Behavior function for NodeD (TC_GEONW_PON_TSB_BV_02) */ function f_GEONW_PON_TSB_BV_02_nodeD() runs on ItsGeoNetworking { // Local variables var LongPosVector v_longPosVectorNodeB := f_getPosition(c_compNodeB); // Preamble f_prNeighbour(); f_selfOrClientSyncAndVerdict(c_prDone, e_success); // Test Body tc_ac.start; alt { [] geoNetworkingPort.receive( mw_geoNwInd( mw_geoNwPdu( mw_geoNwTsbPacket( ?, mw_longPosVectorPosition(v_longPosVectorNodeB) ) ) ) ) { tc_ac.stop; log("*** " & testcasename() & ": PASS: TSB packet received correctly ***"); f_selfOrClientSyncAndVerdict(c_tbDone, e_success); } [] tc_ac.timeout { log("*** " & testcasename() & ": FAIL: Expected TSB message not received ***"); f_selfOrClientSyncAndVerdict(c_tbDone, e_error); } } // Postamble f_poNeighbour(); } // end f_GEONW_PON_TSB_BV_02_nodeD } // end GEONW_PON_TSB_BV_02 group GEONW_PON_TSB_BO_03 { /** * @desc TP Function for TC_GEONW_PON_TSB_BO_03 */ function f_GEONW_PON_TSB_BO_03() runs on ItsMtc { // Local variables var ItsGeoNetworking v_nodeB; var ItsGeoNetworking v_nodeD; // Test control if (not PICS_GN_TSB_FWD) { log("*** " & testcasename() & ": PICS_GN_TSB_FWD required for executing the TC ***"); setverdict(inconc); stop; } // Test component configuration f_cf02Up(); // Preamble // Start components v_nodeB := f_getComponent(c_compNodeB); v_nodeD := f_getComponent(c_compNodeD); v_nodeB.start(f_GEONW_PON_TSB_BO_03_nodeB()); v_nodeD.start(f_GEONW_PON_TSB_BO_03_nodeD()); // Synchronization f_serverSync2ClientsAndStop({c_prDone, c_tbDone}); // Cleanup f_cf02Down(); } // end f_GEONW_PON_TSB_BO_03 /** * @desc Behavior function for NodeB (TC_GEONW_PON_TSB_BO_03) */ function f_GEONW_PON_TSB_BO_03_nodeB() runs on ItsGeoNetworking { // Local variables var LongPosVector v_longPosVectorNodeB := f_getPosition(c_compNodeB); var template (present) GeoNetworkingPdu v_gnPacket; // Preamble f_prNeighbour(); v_gnPacket := m_geoNwPdu( m_geoNwTsbPacket( vc_localSeqNumber, v_longPosVectorNodeB ), -, c_defaultHopLimit ); f_sendGeoNetMessage(valueof(m_geoNwReq_linkLayerBroadcast(v_gnPacket))); v_gnPacket.basicHeader.routerHopLimit := ?; tc_noac.start; alt { [] geoNetworkingPort.receive( mw_geoNwInd( mw_geoNwPdu( mw_geoNwTsbPacket( ?, mw_longPosVectorPosition(v_longPosVectorNodeB) ) ) ) ) { tc_noac.stop; log("*** " & testcasename() & ": PASS: Pre-conditions: TSB packet received correctly ***"); f_selfOrClientSyncAndVerdict(c_prDone, e_success); } [] tc_noac.timeout { log("*** " & testcasename() & ": INCONC: Pre-conditions: Expected TSB message not received ***"); f_selfOrClientSyncAndVerdict(c_prDone, e_timeout); } } // Test Body tc_noac.start; alt { [] geoNetworkingPort.receive( mw_geoNwInd( mw_geoNwPdu( mw_geoNwTsbPacket( ?, mw_longPosVectorPosition(v_longPosVectorNodeB) ) ) ) ) { tc_noac.stop; log("*** " & testcasename() & ": FAIL: The same TSB packet was re-broadcasted ***"); f_selfOrClientSyncAndVerdict(c_tbDone, e_error); } [] tc_noac.timeout { log("*** " & testcasename() & ": PASS: The same TSB packet was not re-broadcasted ***"); f_selfOrClientSyncAndVerdict(c_tbDone, e_success); } } // Postamble f_poNeighbour(); } // end f_GEONW_PON_TSB_BO_03_nodeB /** * @desc Behavior function for NodeD (TC_GEONW_PON_TSB_BO_03) */ function f_GEONW_PON_TSB_BO_03_nodeD() runs on ItsGeoNetworking { // Local variables var LongPosVector v_longPosVectorNodeB := f_getPosition(c_compNodeB); //FIXME RGY variable shall not be of template type, because a message is stored into it // var template (value) GeoNetworkingInd v_msgInd; var GeoNetworkingInd v_msgInd; // Preamble f_prNeighbour(); tc_ac.start; alt { [] geoNetworkingPort.receive( mw_geoNwInd( mw_geoNwPdu( mw_geoNwTsbPacket( ?, mw_longPosVectorPosition(v_longPosVectorNodeB) ) ) ) ) -> value v_msgInd { tc_ac.stop; log("*** " & testcasename() & ": PASS: Pre-conditions: TSB packet received correctly ***"); f_selfOrClientSyncAndVerdict(c_prDone, e_success); } [] tc_ac.timeout { log("*** " & testcasename() & ": INCONC: Pre-conditions: Expected TSB message not received ***"); f_selfOrClientSyncAndVerdict(c_prDone, e_timeout); } } // Test Body v_msgInd.msgIn.basicHeader.routerHopLimit := valueof(v_msgInd.msgIn.basicHeader.routerHopLimit) -1; f_sendGeoNetMessage(valueof(m_geoNwReq_linkLayerBroadcast(v_msgInd.msgIn))); tc_noac.start; alt { [] geoNetworkingPort.receive(v_msgInd) { tc_noac.stop; log("*** " & testcasename() & ": FAIL: The same TSB packet was re-broadcasted ***"); f_selfOrClientSyncAndVerdict(c_tbDone, e_error); } [] tc_noac.timeout { log("*** " & testcasename() & ": PASS: The same TSB packet was not re-broadcasted ***"); f_selfOrClientSyncAndVerdict(c_tbDone, e_success); } } // Postamble f_poNeighbour(); } // end f_GEONW_PON_TSB_BO_03_nodeD } // end GEONW_PON_TSB_BO_03 group GEONW_PON_TSB_BV_04 { /** * @desc TP Function for TC_GEONW_PON_TSB_BV_04 */ function f_GEONW_PON_TSB_BV_04() runs on ItsMtc { // Local variables var ItsGeoNetworking v_nodeB; var ItsGeoNetworking v_nodeD; // Test control if (not PICS_GN_TSB_FWD) { log("*** " & testcasename() & ": PICS_GN_TSB_FWD required for executing the TC ***"); setverdict(inconc); stop; } // Test component configuration f_cf02Up(); // Preamble // Start components v_nodeB := f_getComponent(c_compNodeB); v_nodeD := f_getComponent(c_compNodeD); v_nodeB.start(f_GEONW_PON_TSB_BV_04_nodeB()); v_nodeD.start(f_GEONW_PON_TSB_BV_04_nodeD()); // Synchronization f_serverSync2ClientsAndStop({c_prDone, c_tbDone}); // Cleanup f_cf02Down(); } // end f_GEONW_PON_TSB_BV_04 /** * @desc Behavior function for NodeB (TC_GEONW_PON_TSB_BV_04) */ function f_GEONW_PON_TSB_BV_04_nodeB() runs on ItsGeoNetworking { // Local variables var LongPosVector v_longPosVectorNodeB := f_getPosition(c_compNodeB); // Preamble f_prNeighbour(); f_selfOrClientSyncAndVerdict(c_prDone, e_success); // Test Body f_sendGeoNetMessage( valueof(m_geoNwReq_linkLayerBroadcast( m_geoNwPdu( m_geoNwTsbPacket( vc_localSeqNumber, v_longPosVectorNodeB, c_defaultHopLimit ), -, c_defaultHopLimit ) ) )); tc_ac.start; alt { [] geoNetworkingPort.receive( mw_geoNwInd( mw_geoNwPdu( mw_geoNwTsbPacket( ?, mw_longPosVectorPosition(v_longPosVectorNodeB) ), -, c_defaultHopLimit - 1 ) ) ) { tc_ac.stop; log("*** " & testcasename() & ": PASS: TSB packet received correctly ***"); f_selfOrClientSyncAndVerdict(c_tbDone, e_success); } [] geoNetworkingPort.receive( mw_geoNwInd( mw_geoNwPdu( mw_geoNwTsbPacket( ?, mw_longPosVectorPosition(v_longPosVectorNodeB) ), -, ? ) ) ) { tc_ac.stop; log("*** " & testcasename() & ": FAIL: TSB packet received with incorrect HopLimit ***"); f_selfOrClientSyncAndVerdict(c_tbDone, e_error); } [] tc_ac.timeout { log("*** " & testcasename() & ": INCONC: Expected TSB message not received ***"); f_selfOrClientSyncAndVerdict(c_tbDone, e_timeout); } } // Postamble f_poNeighbour(); } // end f_GEONW_PON_TSB_BV_04_nodeB /** * @desc Behavior function for NodeD (TC_GEONW_PON_TSB_BV_04) */ function f_GEONW_PON_TSB_BV_04_nodeD() runs on ItsGeoNetworking { // Local variables var LongPosVector v_longPosVectorNodeB := f_getPosition(c_compNodeB); // Preamble f_prNeighbour(); f_selfOrClientSyncAndVerdict(c_prDone, e_success); // Test Body tc_ac.start; alt { [] geoNetworkingPort.receive( mw_geoNwInd( mw_geoNwPdu( mw_geoNwTsbPacketWithHl( ?, mw_longPosVectorPosition(v_longPosVectorNodeB), c_defaultHopLimit ), -, c_defaultHopLimit - 1 ) ) ) { tc_ac.stop; log("*** " & testcasename() & ": PASS: TSB packet received correctly ***"); f_selfOrClientSyncAndVerdict(c_tbDone, e_success); } [] geoNetworkingPort.receive( mw_geoNwInd( mw_geoNwPdu( mw_geoNwTsbPacket( ?, mw_longPosVectorPosition(v_longPosVectorNodeB) ), -, ? ) ) ) { tc_ac.stop; log("*** " & testcasename() & ": FAIL: TSB packet received with incorrect HopLimit ***"); f_selfOrClientSyncAndVerdict(c_tbDone, e_error); } [] tc_ac.timeout { log("*** " & testcasename() & ": INCONC: Expected TSB message not received ***"); f_selfOrClientSyncAndVerdict(c_tbDone, e_timeout); } } // Postamble f_poNeighbour(); } // end f_GEONW_PON_TSB_BV_04_nodeD } // end GEONW_PON_TSB_BV_04 group GEONW_PON_TSB_BO_05 { /** * @desc TP Function for TC_GEONW_PON_TSB_BO_05 */ function f_GEONW_PON_TSB_BO_05() runs on ItsMtc { // Local variables var ItsGeoNetworking v_nodeB; var ItsGeoNetworking v_nodeD; // Test control if (not PICS_GN_TSB_FWD) { log("*** " & testcasename() & ": PICS_GN_TSB_FWD required for executing the TC ***"); setverdict(inconc); stop; } // Test component configuration f_cf02Up(); // Preamble // Start components v_nodeB := f_getComponent(c_compNodeB); v_nodeD := f_getComponent(c_compNodeD); v_nodeB.start(f_GEONW_PON_TSB_BO_05_nodeB()); v_nodeD.start(f_GEONW_PON_TSB_BO_05_nodeD()); // Synchronization f_serverSync2ClientsAndStop({c_prDone, c_tbDone}); // Cleanup f_cf02Down(); } // end f_GEONW_PON_TSB_BO_05 /** * @desc Behavior function for NodeB (TC_GEONW_PON_TSB_BO_05) */ function f_GEONW_PON_TSB_BO_05_nodeB() runs on ItsGeoNetworking { // Local variables var LongPosVector v_longPosVectorNodeB := f_getPosition(c_compNodeB); // Preamble f_prNeighbour(); f_selfOrClientSyncAndVerdict(c_prDone, e_success); // Test Body f_sendGeoNetMessage( valueof(m_geoNwReq_linkLayerBroadcast( m_geoNwPdu( m_geoNwTsbPacket( vc_localSeqNumber, v_longPosVectorNodeB ), -, 1 ) ) )); f_selfOrClientSyncAndVerdict(c_tbDone, e_success); // Postamble f_poNeighbour(); } // end f_GEONW_PON_TSB_BO_05_nodeB /** * @desc Behavior function for NodeD (TC_GEONW_PON_TSB_BO_05) */ function f_GEONW_PON_TSB_BO_05_nodeD() runs on ItsGeoNetworking { // Local variables var LongPosVector v_longPosVectorNodeB := f_getPosition(c_compNodeB); // Preamble f_prNeighbour(); f_selfOrClientSyncAndVerdict(c_prDone, e_success); // Test Body tc_noac.start; alt { [] geoNetworkingPort.receive( mw_geoNwInd( mw_geoNwPdu( mw_geoNwTsbPacket( ?, mw_longPosVectorPosition(v_longPosVectorNodeB) ) ) ) ) { tc_noac.stop; log("*** " & testcasename() & ": FAIL: TSB message was re-broadcasted ***"); f_selfOrClientSyncAndVerdict(c_tbDone, e_error); } [] tc_noac.timeout { log("*** " & testcasename() & ": PASS: TSB message was not re-broadcasted ***"); f_selfOrClientSyncAndVerdict(c_tbDone, e_success); } } // Postamble f_poNeighbour(); } // end f_GEONW_PON_TSB_BO_05_nodeD } // end GEONW_PON_TSB_BO_05 /** * @desc TP Function for TC_GEONW_PON_TSB_BV_06 */ function f_GEONW_PON_TSB_BV_06() 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_TSB_DST) { log("*** " & testcasename() & ": PICS_GN_TSB_DST required for executing the TC ***"); setverdict(inconc); stop; } // Test component configuration f_cf01Up(); v_longPosVectorNodeB := f_getPosition(c_compNodeB); // Test adapter configuration // Preamble f_prDefault(); f_selfOrClientSyncAndVerdict(c_prDone, e_success); // Test Body v_gnPacket := m_geoNwPdu(m_geoNwTsbPacket( vc_localSeqNumber, v_longPosVectorNodeB ) ); f_sendGeoNetMessage(valueof(m_geoNwReq_linkLayerBroadcast(v_gnPacket))); f_sleep(PX_TAC); v_sentRawPayload := valueof(v_gnPacket.gnPacket.packet.payload); for(i:=0; i < lengthof(vc_utInds) and not match(vc_utInds[i].rawPayload, v_sentRawPayload); i:=i+1) { // empty on purpose } if(i < lengthof(vc_utInds)) { log("*** " & testcasename() & ": PASS: GN was transmitted to upper layer ***"); f_selfOrClientSyncAndVerdict(c_tbDone, e_success); } else { log("*** " & testcasename() & ": FAIL: GN was not transmitted to upper layer ***"); f_selfOrClientSyncAndVerdict(c_tbDone, e_error); } log("*** " & testcasename() & ": TSB packet passed to Upper Layer ***"); f_selfOrClientSyncAndVerdict(c_tbDone, e_success); // Postamble f_poDefault(); f_cf01Down(); } // end f_GEONW_PON_TSB_BV_06 group GEONW_PON_TSB_BO_07 { /** * @desc TP Function for TC_GEONW_PON_TSB_BV_06 */ function f_GEONW_PON_TSB_BO_07() runs on ItsMtc { // Local variables var ItsGeoNetworking v_nodeB; var ItsGeoNetworking v_nodeD; // Test control if (not PICS_GN_TSB_DST) { log("*** " & testcasename() & ": PICS_GN_TSB_DST required for executing the TC ***"); setverdict(inconc); stop; } // Test component configuration f_cf02Up(c_compNodeB); // Preamble // Start components v_nodeB := f_getComponent(c_compNodeB); v_nodeD := f_getComponent(c_compNodeD); v_nodeB.start(f_GEONW_PON_TSB_BO_07_nodeB()); v_nodeD.start(f_GEONW_PON_TSB_BO_07_nodeD()); // Synchronization f_serverSync2ClientsAndStop({c_prDone, c_tbDone}); // Cleanup f_cf02Down(); } // end f_GEONW_PON_TSB_BO_07 /** * @desc Behavior function for NodeB (TC_GEONW_PON_TSB_BO_07) */ function f_GEONW_PON_TSB_BO_07_nodeB() runs on ItsGeoNetworking { // Local variables var LongPosVector v_longPosVectorNodeB := f_getPosition(c_compNodeB); var template (value) GeoNetworkingPdu v_gnPacket; var integer i; var GnRawPayload v_sentRawPayload; // Preamble f_prNeighbour(); v_gnPacket := m_geoNwPdu(m_geoNwTsbPacket( vc_localSeqNumber, v_longPosVectorNodeB ), -, c_defaultHopLimit ); f_sendGeoNetMessage(valueof(m_geoNwReq_linkLayerBroadcast(valueof(v_gnPacket)))); tc_ac.start; alt { [] geoNetworkingPort.receive( mw_geoNwInd( mw_geoNwPdu( mw_geoNwTsbPacket( ?, mw_longPosVectorPosition(v_longPosVectorNodeB) ) ) ) ) { tc_ac.stop; f_sleep(PX_TAC); v_sentRawPayload := valueof(v_gnPacket.gnPacket.packet.payload); for(i:=0; i < lengthof(vc_utInds) and not match(vc_utInds[i].rawPayload, v_sentRawPayload); i:=i+1) { // empty on purpose } if(i < lengthof(vc_utInds)) { log("*** " & testcasename() & ": PASS: Pre-conditions: TSB correctly rebroadcasted and passed to Upper layer \***"); vc_utInds := {}; f_selfOrClientSyncAndVerdict(c_prDone, e_success); } else { log("*** " & testcasename() & ": INCONC: TSB was not transmitted to upper layer ***"); f_selfOrClientSyncAndVerdict(c_prDone, e_error); } } [] tc_ac.timeout { log("*** " & testcasename() & ": INCONC: Pre-conditions: TSB not rebroadcasted ***"); f_selfOrClientSyncAndVerdict(c_prDone, e_timeout); } } // Test Body f_sleep(PX_TAC); v_sentRawPayload := valueof(v_gnPacket.gnPacket.packet.payload); for(i:=0; i < lengthof(vc_utInds) and not match(vc_utInds[i].rawPayload, v_sentRawPayload); i:=i+1) { // empty on purpose } if(i < lengthof(vc_utInds)) { log("*** " & testcasename() & ": FAIL: Same TSB packet was transmitted to upper layer ***"); f_selfOrClientSyncAndVerdict(c_tbDone, e_error); } else { log("*** " & testcasename() & ": PASS: Same TSB packet was not passed to Upper Layer ***"); f_selfOrClientSyncAndVerdict(c_tbDone, e_success); } // Postamble f_poNeighbour(); } // end f_GEONW_PON_TSB_BO_07_nodeB /** * @desc Behavior function for NodeD (TC_GEONW_PON_TSB_BO_07) */ function f_GEONW_PON_TSB_BO_07_nodeD() runs on ItsGeoNetworking { // Local variables var LongPosVector v_longPosVectorNodeB := f_getPosition(c_compNodeB); //FIXME RGY variable shall not be of template type, because a message is stored into it // var template (value) GeoNetworkingInd v_msgInd; var GeoNetworkingInd v_msgInd; var integer i; var template (value) GeoNetworkingPdu v_gnPacket; // Preamble f_prNeighbour(); tc_ac.start; alt { [] geoNetworkingPort.receive( mw_geoNwInd( mw_geoNwPdu( mw_geoNwTsbPacket( ?, mw_longPosVectorPosition(v_longPosVectorNodeB) ) ) ) ) -> value v_msgInd { tc_ac.stop; log("*** " & testcasename() & ": PASS: Pre-conditions: TSB correctly rebroadcasted ***"); f_selfOrClientSyncAndVerdict(c_prDone, e_success); } [] tc_ac.timeout { log("*** " & testcasename() & ": INCONC: Pre-conditions: TSB not rebroadcasted ***"); f_selfOrClientSyncAndVerdict(c_prDone, e_timeout); } } // Test Body v_msgInd.msgIn.basicHeader.routerHopLimit := valueof(v_msgInd.msgIn.basicHeader.routerHopLimit) - 1; v_gnPacket := v_msgInd.msgIn; f_sendGeoNetMessage(valueof(m_geoNwReq_linkLayerBroadcast(v_msgInd.msgIn))); f_selfOrClientSyncAndVerdict(c_tbDone, e_success); // Postamble f_poNeighbour(); } // end f_GEONW_PON_TSB_BO_07_nodeD } // end GEONW_PON_TSB_BO_07 } // end geoTopologicallyScopedBroadcast // 6.2.2.11 group geoSingleHopBroadcast { group GEONW_PON_SHB_BV_01 { /** * @desc TP Function for TC_GEONW_PON_SHB_BV_01 */ function f_GEONW_PON_SHB_BV_01() runs on ItsMtc { // Local variables var ItsGeoNetworking v_nodeB; var ItsGeoNetworking v_nodeD; // Test control if (not PICS_GN_SHB_SRC) { log("*** " & testcasename() & ": PICS_GN_SHB_SRC required for executing the TC ***"); setverdict(inconc); stop; } // Test component configuration f_cf02Up(); // Preamble // Start components v_nodeB := f_getComponent(c_compNodeB); v_nodeD := f_getComponent(c_compNodeD); v_nodeB.start(f_GEONW_PON_SHB_BV_01_nodeB()); v_nodeD.start(f_GEONW_PON_SHB_BV_01_nodeD()); // Synchronization f_serverSync2ClientsAndStop({c_prDone, c_tbDone}); // Cleanup f_cf02Down(); } // end f_GEONW_PON_SHB_BV_01 /** * @desc Behavior function for NodeB (TC_GEONW_PON_SHB_BV_01) */ function f_GEONW_PON_SHB_BV_01_nodeB() runs on ItsGeoNetworking { // Local variables var LongPosVector v_longPosVectorIut := f_getPosition(c_compIut); // Preamble f_prNeighbour(); f_selfOrClientSyncAndVerdict(c_prDone, e_success); // Test Body if ( not f_utTriggerEvent(m_generateShbMessage) ) { log("*** " & testcasename() & ": INCONC: Trigger failed ***"); f_selfOrClientSyncAndVerdict(c_tbDone, e_timeout); } tc_ac.start; alt { [] geoNetworkingPort.receive( mw_geoNwInd( mw_geoNwPdu( mw_geoNwShbPacket(mw_longPosVectorPosition(v_longPosVectorIut)) ) ) ) { tc_ac.stop; log("*** " & testcasename() & ": PASS: SHB packet received correctly ***"); f_selfOrClientSyncAndVerdict(c_tbDone, e_success); } [] tc_ac.timeout { log("*** " & testcasename() & ": FAIL: Expected SHB message not received ***"); f_selfOrClientSyncAndVerdict(c_tbDone, e_error); } } // Postamble f_poNeighbour(); } // end f_GEONW_PON_SHB_BV_01_nodeB /** * @desc Behavior function for NodeD (TC_GEONW_PON_SHB_BV_01) */ function f_GEONW_PON_SHB_BV_01_nodeD() runs on ItsGeoNetworking { // Local variables var LongPosVector v_longPosVectorIut := f_getPosition(c_compIut); // Preamble f_prNeighbour(); f_selfOrClientSyncAndVerdict(c_prDone, e_success); // Test Body tc_ac.start; alt { [] geoNetworkingPort.receive( mw_geoNwInd( mw_geoNwPdu( mw_geoNwShbPacket(mw_longPosVectorPosition(v_longPosVectorIut)) ) ) ) { tc_ac.stop; log("*** " & testcasename() & ": PASS: SHB packet received correctly ***"); f_selfOrClientSyncAndVerdict(c_tbDone, e_success); } [] tc_ac.timeout { log("*** " & testcasename() & ": FAIL: Expected SHB message not received ***"); f_selfOrClientSyncAndVerdict(c_tbDone, e_error); } } // Postamble f_poNeighbour(); } // end f_GEONW_PON_SHB_BV_01_nodeD } // end GEONW_PON_SHB_BV_01 /** * @desc TP Function for TC_GEONW_PON_SHB_BV_02 */ function f_GEONW_PON_SHB_BV_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_SHB_DST) { log("*** " & testcasename() & ": PICS_GN_SHB_DST required for executing the TC ***"); setverdict(inconc); stop; } // Test component configuration f_cf01Up(); v_longPosVectorNodeB:= f_getPosition(c_compNodeB); // Test adapter configuration // Preamble f_prNeighbour(); f_selfOrClientSyncAndVerdict(c_prDone, e_success); // Test Body v_gnPacket := m_geoNwPdu(m_geoNwShbPacket(v_longPosVectorNodeB)); f_sendGeoNetMessage(valueof(m_geoNwReq_linkLayerBroadcast(v_gnPacket))); f_sleep(PX_TAC); v_sentRawPayload := valueof(v_gnPacket.gnPacket.packet.payload); for(i:=0; i < lengthof(vc_utInds) and not match(vc_utInds[i].rawPayload, v_sentRawPayload); i:=i+1) { // empty on purpose } if(i < lengthof(vc_utInds)) { log("*** " & testcasename() & ": PASS: GN was transmitted to upper layer ***"); f_selfOrClientSyncAndVerdict(c_tbDone, e_success); } else { log("*** " & testcasename() & ": FAIL: GN was not transmitted to upper layer ***"); f_selfOrClientSyncAndVerdict(c_tbDone, e_error); } // Postamble f_poNeighbour(); f_cf01Down(); } // end f_GEONW_PON_SHB_BV_02 } // end geoSingleHopBroadcast // 6.2.2.12 group geoGeoAnycast { group GEONW_PON_GAC_BV_01 { /** * @desc TP Function for TC_GEONW_PON_GAC_BV_01 */ function f_GEONW_PON_GAC_BV_01() runs on ItsMtc { // Local variables var ItsGeoNetworking v_nodeB; var ItsGeoNetworking v_nodeD; // Test control if (not PICS_GN_GAC_SRC) { log("*** " & testcasename() & ": PICS_GN_GAC_SRC required for executing the TC ***"); setverdict(inconc); stop; } // Test component configuration f_cf02Up(); // Preamble // Start components v_nodeB := f_getComponent(c_compNodeB); v_nodeD := f_getComponent(c_compNodeD); v_nodeB.start(f_GEONW_PON_GAC_BV_01_nodeB()); v_nodeD.start(f_GEONW_PON_GAC_BV_01_nodeD()); // Synchronization f_serverSync2ClientsAndStop({c_prDone, c_tbDone}); // Cleanup f_cf02Down(); } // end f_GEONW_PON_GAC_BV_01 /** * @desc Behavior function for NodeB (TC_GEONW_PON_GAC_BV_01) */ function f_GEONW_PON_GAC_BV_01_nodeB() runs on ItsGeoNetworking { // Local variables var LongPosVector v_longPosVectorIut := f_getPosition(c_compIut); // Preamble f_prNeighbour(); f_selfOrClientSyncAndVerdict(c_prDone, e_success); // Test Body if ( not f_utTriggerEvent(m_generateGeoAnycastMessage(f_getArea(c_area1))) ) { log("*** " & testcasename() & ": INCONC: Trigger failed ***"); f_selfOrClientSyncAndVerdict(c_tbDone, e_timeout); } tc_ac.start; alt { [] a_receiveGeoAnycastWithArea( mw_longPosVectorPosition(v_longPosVectorIut), ?, f_getGeoAnycastArea(c_area1)) { tc_ac.stop; log("*** " & testcasename() & ": PASS: GAC message received correctly ***"); f_selfOrClientSyncAndVerdict(c_tbDone, e_success); } [] tc_ac.timeout { log("*** " & testcasename() & ": FAIL: GAC message not received ***"); f_selfOrClientSyncAndVerdict(c_tbDone, e_error); } } // Postamble f_poNeighbour(); } // end f_GEONW_PON_GAC_BV_01_nodeB /** * @desc Behavior function for NodeD (TC_GEONW_PON_GAC_BV_01) */ function f_GEONW_PON_GAC_BV_01_nodeD() runs on ItsGeoNetworking { // Local variables var LongPosVector v_longPosVectorIut := f_getPosition(c_compIut); // Preamble f_prNeighbour(); f_selfOrClientSyncAndVerdict(c_prDone, e_success); // Test Body tc_ac.start; alt { [] a_receiveGeoAnycastWithArea( mw_longPosVectorPosition(v_longPosVectorIut), ?, f_getGeoAnycastArea(c_area1)) { tc_ac.stop; log("*** " & testcasename() & ": PASS: GAC message received correctly ***"); f_selfOrClientSyncAndVerdict(c_tbDone, e_success); } [] tc_ac.timeout { log("*** " & testcasename() & ": FAIL: GAC message not received ***"); f_selfOrClientSyncAndVerdict(c_tbDone, e_error); } } // Postamble f_poNeighbour(); } // end f_GEONW_PON_GAC_BV_01_nodeD } // end GEONW_PON_GAC_BV_01 group GEONW_PON_GAC_BV_02 { /** * @desc TP Function for TC_GEONW_PON_GAC_BV_02 */ function f_GEONW_PON_GAC_BV_02() runs on ItsMtc { // Local variables var ItsGeoNetworking v_nodeB; var ItsGeoNetworking v_nodeD; // Test control if (not PICS_GN_GAC_SRC) { log("*** " & testcasename() & ": PICS_GN_GAC_SRC required for executing the TC ***"); setverdict(inconc); stop; } if ((f_getGeoBroadcastForwardingAlgorithm() != e_simple) and (f_getGeoBroadcastForwardingAlgorithm() != e_unspecified)) { log("*** " & testcasename() & ": PICS_GN_GEOBROADCAST_FORWARDING_ALGORITHM == ( e_simple or e_unspecified ) required for executing the TC ***"); setverdict(inconc); stop; } // Test component configuration f_cf02Up(); // Preamble // Start components v_nodeB := f_getComponent(c_compNodeB); v_nodeD := f_getComponent(c_compNodeD); v_nodeB.start(f_GEONW_PON_GAC_BV_02_nodeB()); v_nodeD.start(f_GEONW_PON_GAC_BV_02_nodeD()); // Synchronization f_serverSync2ClientsAndStop({c_prDone, c_tbDone}); // Cleanup f_cf02Down(); } // end f_GEONW_PON_GAC_BV_02 /** * @desc Behavior function for NodeB (TC_GEONW_PON_GAC_BV_02) */ function f_GEONW_PON_GAC_BV_02_nodeB() runs on ItsGeoNetworking { // Local variables var LongPosVector v_longPosVectorIut := f_getPosition(c_compIut); // Preamble f_prNeighbour(); f_selfOrClientSyncAndVerdict(c_prDone, e_success); // Test Body if ( not f_utTriggerEvent(m_generateGeoAnycastMessage(f_getArea(c_area2))) ) { log("*** " & testcasename() & ": INCONC: Trigger failed ***"); f_selfOrClientSyncAndVerdict(c_tbDone, e_timeout); } tc_ac.start; alt { [] a_receiveGeoAnycastWithArea( mw_longPosVectorPosition(v_longPosVectorIut), ?, f_getGeoAnycastArea(c_area2)) { tc_ac.stop; log("*** " & testcasename() & ": PASS: GAC message received correctly ***"); f_selfOrClientSyncAndVerdict(c_tbDone, e_success); } [] tc_ac.timeout { log("*** " & testcasename() & ": FAIL: GAC message not received ***"); f_selfOrClientSyncAndVerdict(c_tbDone, e_error); } } // Postamble f_poNeighbour(); } // end f_GEONW_PON_GAC_BV_02_nodeB /** * @desc Behavior function for NodeD (TC_GEONW_PON_GAC_BV_02) */ function f_GEONW_PON_GAC_BV_02_nodeD() runs on ItsGeoNetworking { // Local variables var LongPosVector v_longPosVectorIut := f_getPosition(c_compIut); // Preamble f_prNeighbour(); f_selfOrClientSyncAndVerdict(c_prDone, e_success); // Test Body tc_noac.start; alt { [] a_receiveGeoAnycastWithArea( mw_longPosVectorPosition(v_longPosVectorIut), ?, f_getGeoAnycastArea(c_area2)) { tc_noac.stop; log("*** " & testcasename() & ": FAIL: received GAC message ***"); f_selfOrClientSyncAndVerdict(c_tbDone, e_error); } [] tc_noac.timeout { log("*** " & testcasename() & ": PASS: GAC message not received ***"); f_selfOrClientSyncAndVerdict(c_tbDone, e_success); } } // Postamble f_poNeighbour(); } // end f_GEONW_PON_GAC_BV_02_nodeD } // end GEONW_PON_GAC_BV_02 group GEONW_PON_GAC_BV_03 { /** * @desc TP Function for TC_GEONW_PON_GAC_BV_03 */ function f_GEONW_PON_GAC_BV_03() runs on ItsMtc { // Local variables var ItsGeoNetworking v_nodeB; var ItsGeoNetworking v_nodeD; // Test control if (not PICS_GN_GAC_FWD) { log("*** " & testcasename() & ": PICS_GN_GAC_FWD required for executing the TC ***"); setverdict(inconc); stop; } // Test component configuration f_cf02Up(); // Preamble // Start components v_nodeB := f_getComponent(c_compNodeB); v_nodeD := f_getComponent(c_compNodeD); v_nodeB.start(f_GEONW_PON_GAC_BV_03_nodeB()); v_nodeD.start(f_GEONW_PON_GAC_BV_03_nodeD()); // Synchronization f_serverSync2ClientsAndStop({c_prDone, c_tbDone}); // Cleanup f_cf02Down(); } // end f_GEONW_PON_GAC_BV_03 /** * @desc Behavior function for NodeB (TC_GEONW_PON_GAC_BV_03) */ function f_GEONW_PON_GAC_BV_03_nodeB() runs on ItsGeoNetworking { // Local variables var LongPosVector v_longPosVectorNodeB := f_getPosition(c_compNodeB); // Preamble f_prNeighbour(); f_selfOrClientSyncAndVerdict(c_prDone, e_success); // Test Body f_sendGeoNetMessage( valueof(m_geoNwReq_linkLayerBroadcast( m_geoNwPdu( m_geoNwAnycastPacket( v_longPosVectorNodeB, vc_localSeqNumber, f_getGeoAnycastArea(c_area1) ) ) ) )); tc_noac.start; alt { [] a_receiveGeoAnycastWithArea( mw_longPosVectorPosition(v_longPosVectorNodeB), ?, f_getGeoAnycastArea(c_area1)) { tc_noac.stop; log("*** " & testcasename() & ": FAIL: GAC message re-forwarded ***"); f_selfOrClientSyncAndVerdict(c_tbDone, e_error); } [] tc_noac.timeout { log("*** " & testcasename() & ": PASS: GAC message not received ***"); f_selfOrClientSyncAndVerdict(c_tbDone, e_success); } } // Postamble f_poNeighbour(); } // end f_GEONW_PON_GAC_BV_03_nodeB /** * @desc Behavior function for NodeD (TC_GEONW_PON_GAC_BV_03) */ function f_GEONW_PON_GAC_BV_03_nodeD() runs on ItsGeoNetworking { // Local variables var LongPosVector v_longPosVectorNodeB := f_getPosition(c_compNodeB); // Preamble f_prNeighbour(); f_selfOrClientSyncAndVerdict(c_prDone, e_success); // Test Body tc_noac.start; alt { [] a_receiveGeoAnycastWithArea( mw_longPosVectorPosition(v_longPosVectorNodeB), ?, f_getGeoAnycastArea(c_area1)) { tc_noac.stop; log("*** " & testcasename() & ": FAIL: GAC message re-forwarded ***"); f_selfOrClientSyncAndVerdict(c_tbDone, e_error); } [] tc_noac.timeout { log("*** " & testcasename() & ": PASS: GAC message not received ***"); f_selfOrClientSyncAndVerdict(c_tbDone, e_success); } } // Postamble f_poNeighbour(); } // end f_GEONW_PON_GAC_BV_03_nodeD } // end GEONW_PON_GAC_BV_03 group GEONW_PON_GAC_BV_04 { /** * @desc TP Function for TC_GEONW_PON_GAC_BV_03 */ function f_GEONW_PON_GAC_BV_04() runs on ItsMtc { // Local variables var ItsGeoNetworking v_nodeB; var ItsGeoNetworking v_nodeC; var ItsGeoNetworking v_nodeD; // Test control if (not PICS_GN_GAC_FWD) { log("*** " & testcasename() & ": PICS_GN_GAC_FWD required for executing the TC ***"); setverdict(inconc); stop; } // Test component configuration f_cf04Up(); // Preamble // Start components v_nodeB := f_getComponent(c_compNodeB); v_nodeC := f_getComponent(c_compNodeC); v_nodeD := f_getComponent(c_compNodeD); v_nodeB.start(f_GEONW_PON_GAC_BV_04_nodeB()); v_nodeC.start(f_GEONW_PON_GAC_BV_04_nodeC()); v_nodeD.start(f_GEONW_PON_GAC_BV_04_nodeD()); // Synchronization f_serverSync3ClientsAndStop({c_prDone, c_tbDone}); // Cleanup f_cf04Down(); } // end f_GEONW_PON_GAC_BV_04 /** * @desc Behavior function for NodeB (TC_GEONW_PON_GAC_BV_04) */ function f_GEONW_PON_GAC_BV_04_nodeB() runs on ItsGeoNetworking { // Local variables var LongPosVector v_longPosVectorNodeC := f_getPosition(c_compNodeC); // Preamble f_prNeighbour(); f_selfOrClientSyncAndVerdict(c_prDone, e_success); // Test Body tc_ac.start; alt { [] a_receiveGeoAnycastWithArea( mw_longPosVectorPosition(v_longPosVectorNodeC), ?, f_getGeoAnycastArea(c_area2)) { tc_ac.stop; log("*** " & testcasename() & ": PASS: GAC message correctly forwarded to area center ***"); f_selfOrClientSyncAndVerdict(c_tbDone, e_success); } [] tc_ac.timeout { log("*** " & testcasename() & ": FAIL: GAC message not received ***"); f_selfOrClientSyncAndVerdict(c_tbDone, e_error); } } // Postamble f_poNeighbour(); } // end f_GEONW_PON_GAC_BV_04_nodeB /** * @desc Behavior function for NodeC (TC_GEONW_PON_GAC_BV_04) */ function f_GEONW_PON_GAC_BV_04_nodeC() runs on ItsGeoNetworking { // Local variables var LongPosVector v_longPosVectorNodeC := f_getPosition(c_compNodeC); // Preamble f_prNeighbour(); f_selfOrClientSyncAndVerdict(c_prDone, e_success); // Test Body f_sendGeoNetMessage( valueof(m_geoNwReq_linkLayerBroadcast( m_geoNwPdu( m_geoNwAnycastPacket( v_longPosVectorNodeC, vc_localSeqNumber, f_getGeoAnycastArea(c_area2) ) ) ) )); f_selfOrClientSyncAndVerdict(c_tbDone, e_success); // Postamble f_poNeighbour(); } // end f_GEONW_PON_GAC_BV_04_nodeC /** * @desc Behavior function for NodeD (TC_GEONW_PON_GAC_BV_04) */ function f_GEONW_PON_GAC_BV_04_nodeD() runs on ItsGeoNetworking { // Local variables var LongPosVector v_longPosVectorNodeC := f_getPosition(c_compNodeC); // Preamble f_prNeighbour(); f_selfOrClientSyncAndVerdict(c_prDone, e_success); // Test Body tc_noac.start; alt { [] a_receiveGeoAnycastWithArea( mw_longPosVectorPosition(v_longPosVectorNodeC), ?, f_getGeoAnycastArea(c_area2)) { tc_noac.stop; log("*** " & testcasename() & ": FAIL: GAC message not forwarded to area center ***"); f_selfOrClientSyncAndVerdict(c_tbDone, e_error); } [] tc_noac.timeout { log("*** " & testcasename() & ": PASS: GAC message not received ***"); f_selfOrClientSyncAndVerdict(c_tbDone, e_success); } } // Postamble f_poNeighbour(); } // end f_GEONW_PON_GAC_BV_04_nodeD } // end GEONW_PON_GAC_BV_04 group GEONW_PON_GAC_BO_05 { /** * @desc TP Function for TC_GEONW_PON_GAC_BO_05 */ function f_GEONW_PON_GAC_BO_05() runs on ItsMtc { // Local variables var ItsGeoNetworking v_nodeB; var ItsGeoNetworking v_nodeC; var ItsGeoNetworking v_nodeD; var UInt16 v_sequenceNumber := f_getInitialSequenceNumber(); // Test control if (not PICS_GN_GAC_FWD) { log("*** " & testcasename() & ": PICS_GN_GAC_FWD required for executing the TC ***"); setverdict(inconc); stop; } // Test component configuration f_cf04Up(); // Preamble // Start components v_nodeB := f_getComponent(c_compNodeB); v_nodeC := f_getComponent(c_compNodeC); v_nodeD := f_getComponent(c_compNodeD); v_nodeB.start(f_GEONW_PON_GAC_BO_05_nodeB()); v_nodeC.start(f_GEONW_PON_GAC_BO_05_nodeC(v_sequenceNumber)); v_nodeD.start(f_GEONW_PON_GAC_BO_05_nodeD(v_sequenceNumber)); // Synchronization f_serverSync3ClientsAndStop({c_prDone, c_tbDone}); // Cleanup f_cf04Down(); } // end f_GEONW_PON_GAC_BO_05 /** * @desc Behavior function for NodeB (TC_GEONW_PON_GAC_BO_05) */ function f_GEONW_PON_GAC_BO_05_nodeB() runs on ItsGeoNetworking { // Local variables var LongPosVector v_longPosVectorNodeC := f_getPosition(c_compNodeC); var template (present) GeoNetworkingInd v_msgInd; //FIXME RGY variable is declared to store the received message var GeoNetworkingInd v_msgIndRcv; // Preamble f_prNeighbour(); tc_ac.start; alt { [] geoNetworkingPort.receive( mw_geoNwInd( mw_geoNwPdu( mw_geoNwAnycastPacketWithArea( mw_longPosVectorPosition(v_longPosVectorNodeC), ?, f_getGeoAnycastArea(c_area2) ) ) ) ) -> value v_msgIndRcv { //FIXME RGY the received value stored in the template variable too v_msgInd:= v_msgIndRcv; tc_ac.stop; log("*** " & testcasename() & ": PASS: Pre-conditions: GAC message correctly forwarded to area center ***"); f_selfOrClientSyncAndVerdict(c_prDone, e_success); } [] tc_ac.timeout { log("*** " & testcasename() & ": INCONC: Pre-conditions: GAC message not received ***"); f_selfOrClientSyncAndVerdict(c_prDone, e_timeout); } } // Test Body v_msgInd.msgIn.basicHeader.routerHopLimit := ?; tc_noac.start; alt { [] geoNetworkingPort.receive(v_msgInd) { tc_noac.stop; log("*** " & testcasename() & ": FAIL: GAC message re-forwarded to area center ***"); f_selfOrClientSyncAndVerdict(c_tbDone, e_error); } [] tc_noac.timeout { log("*** " & testcasename() & ": PASS: GAC message not re-forwarded ***"); f_selfOrClientSyncAndVerdict(c_tbDone, e_success); } } // Postamble f_poNeighbour(); } // end f_GEONW_PON_GAC_BO_05_nodeB /** * @desc Behavior function for NodeC (TC_GEONW_PON_GAC_BO_05) */ function f_GEONW_PON_GAC_BO_05_nodeC(in UInt16 p_sequenceNumber) runs on ItsGeoNetworking { // Local variables var LongPosVector v_longPosVectorNodeC := f_getPosition(c_compNodeC); // Preamble f_prNeighbour(); f_sendGeoNetMessage( valueof(m_geoNwReq_linkLayerBroadcast( m_geoNwPdu( m_geoNwAnycastPacket( v_longPosVectorNodeC, p_sequenceNumber, f_getGeoAnycastArea(c_area2) ), -, c_defaultHopLimit ) ) )); f_selfOrClientSyncAndVerdict(c_prDone, e_success); // Test Body tc_noac.start; alt { [] a_receiveGeoAnycastWithArea( mw_longPosVectorPosition(v_longPosVectorNodeC), ?, f_getGeoAnycastArea(c_area2)) { tc_noac.stop; log("*** " & testcasename() & ": FAIL: GAC re-forwarded! (not to area center!) ***"); f_selfOrClientSyncAndVerdict(c_tbDone, e_error); } [] tc_noac.timeout { log("*** " & testcasename() & ": PASS: GAC message not received ***"); f_selfOrClientSyncAndVerdict(c_tbDone, e_success); } } // Postamble f_poNeighbour(); } // end f_GEONW_PON_GAC_BO_05_nodeC /** * @desc Behavior function for NodeD (TC_GEONW_PON_GAC_BO_05) */ function f_GEONW_PON_GAC_BO_05_nodeD(in UInt16 p_sequenceNumber) runs on ItsGeoNetworking { // Local variables var LongPosVector v_longPosVectorNodeC := f_getPosition(c_compNodeC); // Preamble f_prNeighbour(); tc_noac.start; alt { [] geoNetworkingPort.receive(mw_geoNwInd(mw_geoNwPdu(mw_geoNwAnycastPacketWithArea( mw_longPosVectorPosition(v_longPosVectorNodeC), ?, f_getGeoAnycastArea(c_area2) )))) { tc_noac.stop; log("*** " & testcasename() & ": INCONC: Pre-conditions: GAC message not forwarded to area center ***"); f_selfOrClientSyncAndVerdict(c_prDone, e_error); } [] tc_noac.timeout { log("*** " & testcasename() & ": PASS: Pre-conditions: GAC message not received ***"); f_selfOrClientSyncAndVerdict(c_prDone, e_success); } } // Test Body // send geoAnycast for second time (same source + same seq Nr + lower RHL) f_sendGeoNetMessage( valueof(m_geoNwReq_linkLayerBroadcast( m_geoNwPdu( m_geoNwAnycastPacket( v_longPosVectorNodeC, p_sequenceNumber, f_getGeoAnycastArea(c_area2) ), -, c_defaultHopLimit - 1 ) ) )); tc_noac.start; alt { [] a_receiveGeoAnycastWithArea( mw_longPosVectorPosition(v_longPosVectorNodeC), ?, f_getGeoAnycastArea(c_area2)) { tc_noac.stop; log("*** " & testcasename() & ": FAIL: GAC re-forwarded! (not to area center!) ***"); f_selfOrClientSyncAndVerdict(c_tbDone, e_error); } [] tc_noac.timeout { log("*** " & testcasename() & ": PASS: GAC message not received ***"); f_selfOrClientSyncAndVerdict(c_tbDone, e_success); } } // Postamble f_poNeighbour(); } // end f_GEONW_PON_GAC_BO_05_nodeD } // end GEONW_PON_GAC_BO_05 group GEONW_PON_GAC_BV_06 { /** * @desc TP Function for TC_GEONW_PON_GAC_BV_06 */ function f_GEONW_PON_GAC_BV_06() runs on ItsMtc { // Local variables var ItsGeoNetworking v_nodeB; var ItsGeoNetworking v_nodeC; // Test control if (not PICS_GN_GAC_FWD) { log("*** " & testcasename() & ": PICS_GN_GAC_FWD required for executing the TC ***"); setverdict(inconc); stop; } // Test component configuration f_cf03Up(); // Preamble // Start components v_nodeB := f_getComponent(c_compNodeB); v_nodeC := f_getComponent(c_compNodeC); v_nodeB.start(f_GEONW_PON_GAC_BV_06_nodeB()); v_nodeC.start(f_GEONW_PON_GAC_BV_06_nodeC()); // Synchronization f_serverSync2ClientsAndStop({c_prDone, c_tbDone}); // Cleanup f_cf03Down(); } // end f_GEONW_PON_GAC_BV_06 /** * @desc Behavior function for NodeB (TC_GEONW_PON_GAC_BV_06) */ function f_GEONW_PON_GAC_BV_06_nodeB() runs on ItsGeoNetworking { // Local variables var LongPosVector v_longPosVectorNodeC := f_getPosition(c_compNodeC); // Preamble f_prNeighbour(); f_selfOrClientSyncAndVerdict(c_prDone, e_success); // Test Body tc_ac.start; alt { [] a_receiveGeoAnycastWithAreaWithHopLimit( mw_longPosVectorPosition(v_longPosVectorNodeC), ?, f_getGeoAnycastArea(c_area2), c_defaultHopLimit - 1, c_defaultHopLimit) { tc_ac.stop; log("*** " & testcasename() & ": PASS: GAC message correctly forwarded ***"); f_selfOrClientSyncAndVerdict(c_tbDone, e_success); } [] tc_ac.timeout { log("*** " & testcasename() & ": FAIL: GAC message not forwarded ***"); f_selfOrClientSyncAndVerdict(c_tbDone, e_error); } } // Postamble f_poNeighbour(); } // end f_GEONW_PON_GAC_BV_06_nodeB /** * @desc Behavior function for NodeC (TC_GEONW_PON_GAC_BV_06) */ function f_GEONW_PON_GAC_BV_06_nodeC() runs on ItsGeoNetworking { // Local variables var LongPosVector v_longPosVectorNodeC := f_getPosition(c_compNodeC); var GeoNetworkingInd v_msgInd; // Preamble f_prNeighbour(); f_selfOrClientSyncAndVerdict(c_prDone, e_success); // Test Body f_sendGeoNetMessage( valueof(m_geoNwReq_linkLayerBroadcast( m_geoNwPdu( m_geoNwAnycastPacket( v_longPosVectorNodeC, vc_localSeqNumber, f_getGeoAnycastArea(c_area2), c_defaultHopLimit ), -, c_defaultHopLimit ) ) )); f_selfOrClientSyncAndVerdict(c_tbDone, e_success); // Postamble f_poNeighbour(); } // end f_GEONW_PON_GAC_BV_06_nodeC } // end GEONW_PON_GAC_BV_06 group GEONW_PON_GAC_BO_07 { /** * @desc TP Function for TC_GEONW_PON_GAC_BO_07 */ function f_GEONW_PON_GAC_BO_07() runs on ItsMtc { // Local variables var ItsGeoNetworking v_nodeB; var ItsGeoNetworking v_nodeC; // Test control if (not PICS_GN_GAC_FWD) { log("*** " & testcasename() & ": PICS_GN_GAC_FWD required for executing the TC ***"); setverdict(inconc); stop; } // Test component configuration f_cf03Up(); // Preamble // Start components v_nodeB := f_getComponent(c_compNodeB); v_nodeC := f_getComponent(c_compNodeC); v_nodeB.start(f_GEONW_PON_GAC_BO_07_nodeB()); v_nodeC.start(f_GEONW_PON_GAC_BO_07_nodeC()); // Synchronization f_serverSync2ClientsAndStop({c_prDone, c_tbDone}); // Cleanup f_cf03Down(); } // end f_GEONW_PON_GAC_BO_07 /** * @desc Behavior function for NodeB (TC_GEONW_PON_GAC_BO_07) */ function f_GEONW_PON_GAC_BO_07_nodeB() runs on ItsGeoNetworking { // Local variables var LongPosVector v_longPosVectorNodeC := f_getPosition(c_compNodeC); // Preamble f_prNeighbour(); f_selfOrClientSyncAndVerdict(c_prDone, e_success); // Test Body tc_noac.start; alt { [] a_receiveGeoAnycastWithArea( mw_longPosVectorPosition(v_longPosVectorNodeC), ?, f_getGeoAnycastArea(c_area2)) { tc_noac.stop; log("*** " & testcasename() & ": FAIL: GAC message re-forwarded ***"); f_selfOrClientSyncAndVerdict(c_tbDone, e_error); } [] tc_noac.timeout { log("*** " & testcasename() & ": PASS: GAC message not re-forwarded ***"); f_selfOrClientSyncAndVerdict(c_tbDone, e_success); } } // Postamble f_poNeighbour(); } // end f_GEONW_PON_GAC_BO_07_nodeB /** * @desc Behavior function for NodeC (TC_GEONW_PON_GAC_BO_07) */ function f_GEONW_PON_GAC_BO_07_nodeC() runs on ItsGeoNetworking { // Local variables var LongPosVector v_longPosVectorNodeC := f_getPosition(c_compNodeC); // Preamble f_prNeighbour(); f_selfOrClientSyncAndVerdict(c_prDone, e_success); // Test Body f_sendGeoNetMessage( valueof(m_geoNwReq_linkLayerBroadcast( m_geoNwPdu( m_geoNwAnycastPacket( v_longPosVectorNodeC, vc_localSeqNumber, f_getGeoAnycastArea(c_area2) ), -, c_hopLimit1 ) ) )); f_selfOrClientSyncAndVerdict(c_tbDone, e_success); // Postamble f_poNeighbour(); } // end f_GEONW_PON_GAC_BO_07_nodeC } // end GEONW_PON_GAC_BO_07 /** * @desc TP Function for TC_GEONW_PON_GAC_BV_08 */ function f_GEONW_PON_GAC_BV_08() 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_GAC_DST) { log("*** " & testcasename() & ": PICS_GN_GAC_DST required for executing the TC ***"); setverdict(inconc); stop; } // Test component configuration f_cf01Up(); v_longPosVectorNodeB := f_getPosition(c_compNodeB); // Test adapter configuration // Preamble f_prNeighbour(); f_selfOrClientSyncAndVerdict(c_prDone, e_success); // Test Body v_gnPacket := m_geoNwPdu(m_geoNwAnycastPacket( v_longPosVectorNodeB, vc_localSeqNumber, f_getGeoAnycastArea(c_area1) ) ); f_sendGeoNetMessage(valueof(m_geoNwReq_linkLayerBroadcast(v_gnPacket))); f_sleep(PX_TAC); v_sentRawPayload := valueof(v_gnPacket.gnPacket.packet.payload); for(i:=0; i < lengthof(vc_utInds) and not match(vc_utInds[i].rawPayload, v_sentRawPayload); i:=i+1) { // empty on purpose } if(i < lengthof(vc_utInds)) { log("*** " & testcasename() & ": PASS: GN was transmitted to upper layer ***"); f_selfOrClientSyncAndVerdict(c_tbDone, e_success); } else { log("*** " & testcasename() & ": FAIL: GN was not transmitted to upper layer ***"); f_selfOrClientSyncAndVerdict(c_tbDone, e_error); } log("*** " & testcasename() & ": GAC packet passed to Upper layer ***"); f_selfOrClientSyncAndVerdict(c_tbDone, e_success); // Postamble f_poNeighbour(); f_cf01Down(); } // end f_GEONW_PON_GAC_BV_08 group GEONW_PON_GAC_BO_09 { /** * @desc TP Function for TC_GEONW_PON_GAC_BO_09 */ function f_GEONW_PON_GAC_BO_09() runs on ItsMtc { // Local variables var ItsGeoNetworking v_nodeB; var ItsGeoNetworking v_nodeD; var template (value) GeoNetworkingPdu v_gnPacket; // Test control if (not PICS_GN_GAC_DST) { log("*** " & testcasename() & ": PICS_GN_GAC_DST required for executing the TC ***"); setverdict(inconc); stop; } // Test component configuration f_cf02Up(c_compNodeB); // Preamble // Start components v_nodeB := f_getComponent(c_compNodeB); v_nodeD := f_getComponent(c_compNodeD); v_nodeB.start(f_GEONW_PON_GAC_BO_09_nodeB()); v_nodeD.start(f_GEONW_PON_GAC_BO_09_nodeD()); // Synchronization f_serverSync2ClientsAndStop({c_prDone, c_tbDone}); // Cleanup f_cf02Down(); } // end f_GEONW_PON_GAC_BO_09 /** * @desc Behavior function for NodeB (TC_GEONW_PON_GAC_BO_09) */ function f_GEONW_PON_GAC_BO_09_nodeB() runs on ItsGeoNetworking { // Local variables var LongPosVector v_longPosVectorNodeD := f_getPosition(c_compNodeD); var template (value) GeoNetworkingPdu v_gnPacket; var integer i; var GnRawPayload v_sentRawPayload; // Preamble f_prNeighbour(); f_sleep(PX_TAC); v_gnPacket := m_geoNwPdu(m_geoNwAnycastPacket( v_longPosVectorNodeD, vc_localSeqNumber, f_getGeoAnycastArea(c_area1) ), -, c_defaultHopLimit ); v_sentRawPayload := valueof(v_gnPacket.gnPacket.packet.payload); for(i:=0; i < lengthof(vc_utInds) and not match(vc_utInds[i].rawPayload, v_sentRawPayload); i:=i+1) { // empty on purpose } if(i < lengthof(vc_utInds)) { log("*** " & testcasename() & ": PASS: GN was transmitted to upper layer ***"); vc_utInds := {}; f_selfOrClientSyncAndVerdict(c_prDone, e_success); } else { log("*** " & testcasename() & ": INCONC: GN was not transmitted to upper layer ***"); f_selfOrClientSyncAndVerdict(c_prDone, e_error); } // Test Body v_gnPacket.basicHeader.routerHopLimit := valueof(v_gnPacket.basicHeader.routerHopLimit) / 2; f_sendGeoNetMessage(valueof(m_geoNwReq_linkLayerBroadcast(v_gnPacket))); f_sleep(PX_TAC); if(0 != lengthof(vc_utInds)) { log("*** " & testcasename() & ": FAIL: GN was transmitted to upper layer ***"); f_selfOrClientSyncAndVerdict(c_tbDone, e_error); } else { log("*** " & testcasename() & ": PASS: GN was NOT transmitted to upper layer ***"); f_selfOrClientSyncAndVerdict(c_tbDone, e_success); } // Postamble f_poNeighbour(); } // end f_GEONW_PON_GAC_BO_09_nodeB /** * @desc Behavior function for NodeD (TC_GEONW_PON_GAC_BO_09) */ function f_GEONW_PON_GAC_BO_09_nodeD() runs on ItsGeoNetworking { // Local variables var LongPosVector v_longPosVectorNodeD := f_getPosition(c_compNodeD); var template (value) GeoNetworkingPdu v_gnPacket; var integer i; // Preamble f_prNeighbour(); v_gnPacket := m_geoNwPdu(m_geoNwAnycastPacket( v_longPosVectorNodeD, vc_localSeqNumber, f_getGeoAnycastArea(c_area1) ), -, c_defaultHopLimit ); f_sendGeoNetMessage(valueof(m_geoNwReq_linkLayerBroadcast(v_gnPacket))); f_selfOrClientSyncAndVerdict(c_prDone, e_success); // Test Body f_selfOrClientSyncAndVerdict(c_tbDone, e_success); // Postamble f_poNeighbour(); } // end f_GEONW_PON_GAC_BO_09_nodeD } // end GEONW_PON_GAC_BO_09 /** * @desc TP Function for TC_GEONW_PON_GAC_BV_10 */ function f_GEONW_PON_GAC_BV_10() 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_GAC_DST) { log("*** " & testcasename() & ": PICS_GN_GAC_DST required for executing the TC ***"); setverdict(inconc); stop; } // Test component configuration f_cf01Up(); v_longPosVectorNodeB := f_getPosition(c_compNodeB); // Test adapter configuration // Preamble f_prNeighbour(); f_selfOrClientSyncAndVerdict(c_prDone, e_success); // Test Body v_gnPacket := m_geoNwPdu(m_geoNwAnycastPacket( v_longPosVectorNodeB, vc_localSeqNumber, f_getGeoAnycastArea(c_area2) ) ); f_sendGeoNetMessage(valueof(m_geoNwReq_linkLayerBroadcast(v_gnPacket))); f_sleep(PX_TAC); if(0 != lengthof(vc_utInds)) { log("*** " & testcasename() & ": FAIL: GN was transmitted to upper layer ***"); f_selfOrClientSyncAndVerdict(c_tbDone, e_error); } else { log("*** " & testcasename() & ": PASS: GN was NOT transmitted to upper layer ***"); f_selfOrClientSyncAndVerdict(c_tbDone, e_success); } // Postamble f_poNeighbour(); f_cf01Down(); } // end f_GEONW_PON_GAC_BV_10 group GEONW_PON_GAC_BO_11 { /** * @desc TP Function for TC_GEONW_PON_GAC_BO_11 */ function f_GEONW_PON_GAC_BO_11() runs on ItsMtc { // Local variables var ItsGeoNetworking v_nodeB; var ItsGeoNetworking v_nodeC; var ItsGeoNetworking v_nodeD; var UInt16 v_distanceTooBig; // Test control if (not PICS_GN_GAC_FWD) { log("*** " & testcasename() & ": PICS_GN_GAC_FWD required for executing the TC ***"); setverdict(inconc); stop; } // Test component configuration f_cf04Up(); v_distanceTooBig := float2int(1.1 * f_radiusFromCircularArea(f_getGnMaxAreaSize()*c_squareKm)); // Preamble // Start components v_nodeB := f_getComponent(c_compNodeB); v_nodeC := f_getComponent(c_compNodeC); v_nodeD := f_getComponent(c_compNodeD); v_nodeB.start(f_GEONW_PON_GAC_BO_11_nodeB(v_distanceTooBig)); v_nodeC.start(f_GEONW_PON_GAC_BO_11_nodeC(v_distanceTooBig)); v_nodeD.start(f_GEONW_PON_GAC_BO_11_nodeD(v_distanceTooBig)); // Synchronization f_serverSync3ClientsAndStop({c_prDone, c_tbDone}); // Cleanup f_cf04Down(); } // end f_GEONW_PON_GAC_BO_11 /** * @desc Behavior function for NodeB (TC_GEONW_PON_GAC_BO_11) */ function f_GEONW_PON_GAC_BO_11_nodeB(in UInt16 p_distanceTooBig) runs on ItsGeoNetworking { // Local variables var LongPosVector v_longPosVectorNodeC := f_getPosition(c_compNodeC); var GeoArea v_areaTooBig; // Preamble f_prNeighbour(); v_areaTooBig := f_computeCircularArea( f_computePosition(f_getPosition(c_compNodeB), 1000, 0), p_distanceTooBig ); f_selfOrClientSyncAndVerdict(c_prDone, e_success); // Test Body tc_noac.start; alt { [] geoNetworkingPort.receive(mw_geoNwInd(mw_geoNwPdu(mw_geoNwAnycastPacketWithArea( mw_longPosVectorPosition(v_longPosVectorNodeC), ?, f_geoArea2GeoAnycastArea(v_areaTooBig) )))) { tc_noac.stop; log("*** " & testcasename() & ": FAIL: GAC message forwarded ***"); f_selfOrClientSyncAndVerdict(c_tbDone, e_error); } [] tc_noac.timeout { log("*** " & testcasename() & ": PASS: GAC message not forwarded ***"); f_selfOrClientSyncAndVerdict(c_tbDone, e_success); } } // Postamble f_poNeighbour(); } // end f_GEONW_PON_GAC_BO_11_nodeB /** * @desc Behavior function for NodeC (TC_GEONW_PON_GAC_BO_11) */ function f_GEONW_PON_GAC_BO_11_nodeC(in UInt16 p_distanceTooBig) runs on ItsGeoNetworking { // Local variables var LongPosVector v_longPosVectorNodeC := f_getPosition(c_compNodeC); var GeoArea v_areaTooBig; // Preamble f_prNeighbour(); v_areaTooBig := f_computeCircularArea( f_computePosition(f_getPosition(c_compNodeB), 1000, 0), p_distanceTooBig ); f_sendGeoNetMessage( valueof(m_geoNwReq_linkLayerBroadcast( m_geoNwPdu( m_geoNwAnycastPacket( v_longPosVectorNodeC, vc_localSeqNumber, f_geoArea2GeoAnycastArea(v_areaTooBig) ) ) ) )); f_selfOrClientSyncAndVerdict(c_prDone, e_success); // Test Body f_selfOrClientSyncAndVerdict(c_tbDone, e_success); // Postamble f_poNeighbour(); } // end f_GEONW_PON_GAC_BO_11_nodeC /** * @desc Behavior function for NodeD (TC_GEONW_PON_GAC_BO_11) */ function f_GEONW_PON_GAC_BO_11_nodeD(in UInt16 p_distanceTooBig) runs on ItsGeoNetworking { // Local variables var LongPosVector v_longPosVectorNodeC := f_getPosition(c_compNodeC); var GeoArea v_areaTooBig; // Preamble f_prNeighbour(); v_areaTooBig := f_computeCircularArea( f_computePosition(f_getPosition(c_compNodeB), 1000, 0), p_distanceTooBig ); f_selfOrClientSyncAndVerdict(c_prDone, e_success); // Test Body tc_noac.start; alt { [] geoNetworkingPort.receive(mw_geoNwInd(mw_geoNwPdu(mw_geoNwAnycastPacketWithArea( mw_longPosVectorPosition(v_longPosVectorNodeC), ?, f_geoArea2GeoAnycastArea(v_areaTooBig) )))) { tc_noac.stop; log("*** " & testcasename() & ": FAIL: GAC message forwarded ***"); f_selfOrClientSyncAndVerdict(c_tbDone, e_error); } [] tc_noac.timeout { log("*** " & testcasename() & ": PASS: GAC message not forwarded ***"); f_selfOrClientSyncAndVerdict(c_tbDone, e_success); } } // Postamble f_poNeighbour(); } // end f_GEONW_PON_GAC_BO_11_nodeD } // end GEONW_PON_GAC_BO_11 group GEONW_PON_GAC_BV_13 { /** * @desc TP Function for TC_GEONW_PON_GAC_BV_13 */ function f_GEONW_PON_GAC_BV_13() runs on ItsMtc { // Local variables var ItsGeoNetworking v_nodeB; var ItsGeoNetworking v_nodeD; // Test control if (not PICS_GN_GAC_SRC) { log("*** " & testcasename() & ": PICS_GN_GAC_SRC required for executing the TC ***"); setverdict(inconc); stop; } if(f_getGeoBroadcastForwardingAlgorithm() != e_cbf) { log("*** " & testcasename() & ": PICS_GN_GEOBROADCAST_FORWARDING_ALGORITHM == ( e_cbf ) required for executing the TC ***"); setverdict(inconc); stop; } // Test component configuration f_cf02Up(); // Preamble // Start components v_nodeB := f_getComponent(c_compNodeB); v_nodeD := f_getComponent(c_compNodeD); v_nodeB.start(f_GEONW_PON_GAC_BV_13_nodeB()); v_nodeD.start(f_GEONW_PON_GAC_BV_13_nodeD()); // Synchronization f_serverSync2ClientsAndStop({c_prDone, c_tbDone}); // Cleanup f_cf02Down(); } // end f_GEONW_PON_GAC_BV_13 /** * @desc Behavior function for NodeB (TC_GEONW_PON_GAC_BV_13) */ function f_GEONW_PON_GAC_BV_13_nodeB() runs on ItsGeoNetworking { // Local variables var LongPosVector v_longPosVectorIut := f_getPosition(c_compIut); // Preamble f_prNeighbour(); f_selfOrClientSyncAndVerdict(c_prDone, e_success); // Test Body if(not f_utTriggerEvent(m_generateGeoAnycastMessage(f_getArea(c_area2)))) { log("*** " & testcasename() & ": INCONC: Trigger failed ***"); f_selfOrClientSyncAndVerdict(c_tbDone, e_timeout); } tc_ac.start; alt { [] a_receiveGeoAnycastWithArea( mw_longPosVectorPosition(v_longPosVectorIut), ?, f_getGeoAnycastArea(c_area2)) { tc_ac.stop; log("*** " & testcasename() & ": PASS: GAC message received correctly ***"); f_selfOrClientSyncAndVerdict(c_tbDone, e_success); } [] tc_ac.timeout { log("*** " & testcasename() & ": FAIL: GAC message not received ***"); f_selfOrClientSyncAndVerdict(c_tbDone, e_error); } } // Postamble f_poNeighbour(); } // end f_GEONW_PON_GAC_BV_13_nodeB /** * @desc Behavior function for NodeD (TC_GEONW_PON_GAC_BV_13) */ function f_GEONW_PON_GAC_BV_13_nodeD() runs on ItsGeoNetworking { // Local variables var LongPosVector v_longPosVectorIut := f_getPosition(c_compIut); // Preamble f_prNeighbour(); f_selfOrClientSyncAndVerdict(c_prDone, e_success); // Test Body tc_ac.start; alt { [] a_receiveGeoAnycastWithArea( mw_longPosVectorPosition(v_longPosVectorIut), ?, f_getGeoAnycastArea(c_area2)) { tc_ac.stop; log("*** " & testcasename() & ": PASS: received GAC message ***"); f_selfOrClientSyncAndVerdict(c_tbDone, e_success); } [] tc_ac.timeout { log("*** " & testcasename() & ": FAIL: GAC message not broadcasted ***"); f_selfOrClientSyncAndVerdict(c_tbDone, e_error); } } // Postamble f_poNeighbour(); } // end f_GEONW_PON_GAC_BV_13_nodeD } // end GEONW_PON_GAC_BV_13 } // end geoGeoAnycast // 6.2.2.13 group geoGeoBroadcastCbfAlgorithm { group GEONW_PON_BCA_BV_01 { /** * @desc TP Function for TC_GEONW_PON_BCA_BV_01 */ function f_GEONW_PON_BCA_BV_01() runs on ItsMtc { // Local variables var ItsGeoNetworking v_nodeB; var ItsGeoNetworking v_nodeC; var ItsGeoNetworking v_nodeD; var UInt16 v_sequenceNumberC := f_getInitialSequenceNumber(); // Test control if (not PICS_GN_GBC_FWD) { log("*** " & testcasename() & ": PICS_GN_GBC_FWD required for executing the TC ***"); setverdict(inconc); stop; } if (f_getGeoBroadcastForwardingAlgorithm() != e_cbf) { log("*** " & testcasename() & ": PICS_GN_GEOBROADCAST_FORWARDING_ALGORITHM == e_cbf required for executing the TC ***"); setverdict(inconc); stop; } // if (f_getGeoBroadcastCbfMinTime() < 300) { // log("*** " & testcasename() & ": PICS_GN_GEOBROADCAST_CBF_MIN_TIME >= 300 required for executing the TC ***"); // setverdict(inconc); // stop; // } // Test component configuration f_cf04Up(); // Preamble // Start components v_nodeB := f_getComponent(c_compNodeB); v_nodeC := f_getComponent(c_compNodeC); v_nodeD := f_getComponent(c_compNodeD); v_nodeB.start(f_GEONW_PON_BCA_BV_01_nodeB()); v_nodeC.start(f_GEONW_PON_BCA_BV_01_nodeC(v_sequenceNumberC)); v_nodeD.start(f_GEONW_PON_BCA_BV_01_nodeD(v_sequenceNumberC)); // Synchronization f_serverSync3ClientsAndStop({c_prDone, c_tbDone}); // Cleanup f_cf04Down(); } // end f_GEONW_PON_BCA_BV_01 /** * @desc Behavior function for NodeB (TC_GEONW_PON_BCA_BV_01) */ function f_GEONW_PON_BCA_BV_01_nodeB() runs on ItsGeoNetworking { // Local variables var LongPosVector v_longPosVectorNodeC := f_getPosition(c_compNodeC); // Preamble f_prNeighbour(); f_selfOrClientSyncAndVerdict(c_prDone, e_success); // Test Body tc_noac.start; alt { [] geoNetworkingPort.receive(mw_geoNwInd(mw_geoNwPdu(mw_geoNwBroadcastPacketWithArea( mw_longPosVectorPosition(v_longPosVectorNodeC), ?, f_getGeoBroadcastArea(c_area1) )))) { tc_noac.stop; log("*** " & testcasename() & ": FAIL: GBC message re-broadcasted ***"); f_selfOrClientSyncAndVerdict(c_tbDone, e_error); } [] tc_noac.timeout { log("*** " & testcasename() & ": PASS: GBC message not re-broadcasted ***"); f_selfOrClientSyncAndVerdict(c_tbDone, e_success); } } // Postamble f_poNeighbour(); } // end f_GEONW_PON_BCA_BV_01_nodeB /** * @desc Behavior function for NodeC (TC_GEONW_PON_BCA_BV_01) */ function f_GEONW_PON_BCA_BV_01_nodeC(in UInt16 p_sequenceNumberC) runs on ItsGeoNetworking { // Local variables var LongPosVector v_longPosVectorNodeC := f_getPosition(c_compNodeC); // Preamble f_prNeighbour(); f_sendGeoNetMessage( valueof(m_geoNwReq_linkLayerBroadcast( m_geoNwPdu( m_geoNwBroadcastPacket( v_longPosVectorNodeC, p_sequenceNumberC, f_getGeoBroadcastArea(c_area1) ) ) ) )); f_selfOrClientSyncAndVerdict(c_prDone, e_success); // Test Body tc_noac.start; alt { [] geoNetworkingPort.receive(mw_geoNwInd(mw_geoNwPdu(mw_geoNwBroadcastPacketWithArea( mw_longPosVectorPosition(v_longPosVectorNodeC), ?, f_getGeoBroadcastArea(c_area1) )))) { tc_noac.stop; log("*** " & testcasename() & ": FAIL: GBC message re-broadcasted ***"); f_selfOrClientSyncAndVerdict(c_tbDone, e_error); } [] tc_noac.timeout { log("*** " & testcasename() & ": PASS: GBC message not re-broadcasted ***"); f_selfOrClientSyncAndVerdict(c_tbDone, e_success); } } // Postamble f_poNeighbour(); } // end f_GEONW_PON_BCA_BV_01_nodeC /** * @desc Behavior function for NodeD (TC_GEONW_PON_BCA_BV_01) */ function f_GEONW_PON_BCA_BV_01_nodeD(in UInt16 p_sequenceNumberC) runs on ItsGeoNetworking { // Local variables var LongPosVector v_longPosVectorNodeC := f_getPosition(c_compNodeC); // Preamble f_prNeighbour(); f_selfOrClientSyncAndVerdict(c_prDone, e_success); // Test Body f_sendGeoNetMessage( valueof(m_geoNwReq_linkLayerBroadcast( m_geoNwPdu( m_geoNwBroadcastPacket( v_longPosVectorNodeC, p_sequenceNumberC, f_getGeoBroadcastArea(c_area1) ) ) ) )); tc_noac.start; alt { [] geoNetworkingPort.receive(mw_geoNwInd(mw_geoNwPdu(mw_geoNwBroadcastPacketWithArea( mw_longPosVectorPosition(v_longPosVectorNodeC), ?, f_getGeoBroadcastArea(c_area1) )))) { tc_noac.stop; log("*** " & testcasename() & ": FAIL: GBC message re-broadcasted ***"); f_selfOrClientSyncAndVerdict(c_tbDone, e_error); } [] tc_noac.timeout { log("*** " & testcasename() & ": PASS: GBC message not re-broadcasted ***"); f_selfOrClientSyncAndVerdict(c_tbDone, e_success); } } // Postamble f_poNeighbour(); } // end f_GEONW_PON_BCA_BV_01_nodeD } // end GEONW_PON_BCA_BV_01 group GEONW_PON_BCA_BV_02 { /** * @desc TP Function for TC_GEONW_PON_BCA_BV_02 */ function f_GEONW_PON_BCA_BV_02() runs on ItsMtc { // Local variables var ItsGeoNetworking v_nodeB; var ItsGeoNetworking v_nodeC; var ItsGeoNetworking v_nodeD; // Test control if (not PICS_GN_GBC_FWD) { log("*** " & testcasename() & ": PICS_GN_GBC_FWD required for executing the TC ***"); setverdict(inconc); stop; } if (f_getGeoBroadcastForwardingAlgorithm() != e_cbf) { log("*** " & testcasename() & ": PICS_GN_GEOBROADCAST_FORWARDING_ALGORITHM == e_cbf required for executing the TC ***"); setverdict(inconc); stop; } // if (f_getGeoBroadcastCbfMinTime() < 300) { // log("*** " & testcasename() & ": PICS_GN_GEOBROADCAST_CBF_MIN_TIME >= 300 required for executing the TC ***"); // setverdict(inconc); // stop; // } // Test component configuration f_cf04Up(); // Preamble // Start components v_nodeB := f_getComponent(c_compNodeB); v_nodeC := f_getComponent(c_compNodeC); v_nodeD := f_getComponent(c_compNodeD); v_nodeB.start(f_GEONW_PON_BCA_BV_02_nodeB()); v_nodeC.start(f_GEONW_PON_BCA_BV_02_nodeC()); v_nodeD.start(f_GEONW_PON_BCA_BV_02_nodeD()); // Synchronization f_serverSync3ClientsAndStop({c_prDone, c_tbDone}); // Cleanup f_cf04Down(); } // end f_GEONW_PON_BCA_BV_02 /** * @desc Behavior function for NodeB (TC_GEONW_PON_BCA_BV_02) */ function f_GEONW_PON_BCA_BV_02_nodeB() runs on ItsGeoNetworking { // Local variables var LongPosVector v_longPosVectorNodeC := f_getPosition(c_compNodeC); // Preamble f_prNeighbour(); f_selfOrClientSyncAndVerdict(c_prDone, e_success); // Test Body tc_ac.start; alt { [] geoNetworkingPort.receive(mw_geoNwInd(mw_geoNwPdu(mw_geoNwBroadcastPacketWithArea( mw_longPosVectorPosition(v_longPosVectorNodeC), ?, f_getGeoBroadcastArea(c_area1) )))) { tc_ac.stop; log("*** " & testcasename() & ": PASS: GBC message broadcasted ***"); f_selfOrClientSyncAndVerdict(c_tbDone, e_success); } [] tc_ac.timeout { log("*** " & testcasename() & ": FAIL: GBC message not broadcasted ***"); f_selfOrClientSyncAndVerdict(c_tbDone, e_error); } } // Postamble f_poNeighbour(); } // end f_GEONW_PON_BCA_BV_02_nodeB /** * @desc Behavior function for NodeC (TC_GEONW_PON_BCA_BV_02) */ function f_GEONW_PON_BCA_BV_02_nodeC() runs on ItsGeoNetworking { // Local variables var LongPosVector v_longPosVectorNodeC := f_getPosition(c_compNodeC); var LongPosVector v_longPosVectorIut := f_getPosition(c_compIut); timer t_toCbf := (int2float(f_getGeoBroadcastCbfMaxTime()) + ( int2float(f_getGeoBroadcastCbfMinTime() - f_getGeoBroadcastCbfMaxTime()) / int2float(f_getCbfMaxCommunicationRange()) ) * f_distance(v_longPosVectorNodeC, v_longPosVectorIut)) * 0.95 / 1000.0; // Preamble f_prNeighbour(); f_selfOrClientSyncAndVerdict(c_prDone, e_success); // Test Body f_sendGeoNetMessage( valueof(m_geoNwReq_linkLayerBroadcast( m_geoNwPdu( m_geoNwBroadcastPacket( v_longPosVectorNodeC, vc_localSeqNumber, f_getGeoBroadcastArea(c_area1) ) ) ) )); t_toCbf.start; tc_ac.start; alt { [] geoNetworkingPort.receive(mw_geoNwInd(mw_geoNwPdu(mw_geoNwBroadcastPacketWithArea( mw_longPosVectorPosition(v_longPosVectorNodeC), ?, f_getGeoBroadcastArea(c_area1) )))) { tc_ac.stop; if(t_toCbf.running) { t_toCbf.stop; log("*** " & testcasename() & ": FAIL: GBC retransmitted before CBF timer expiration ***"); f_selfOrClientSyncAndVerdict(c_tbDone, e_error); } else { log("*** " & testcasename() & ": PASS: GBC message received ***"); f_selfOrClientSyncAndVerdict(c_tbDone, e_success); } } [] t_toCbf.timeout { log("*** " & testcasename() & ": INFO: CBF timer elapsed ***"); repeat; } [] tc_ac.timeout { log("*** " & testcasename() & ": FAIL: GBC message not received ***"); f_selfOrClientSyncAndVerdict(c_tbDone, e_error); } } // Postamble f_poNeighbour(); } // end f_GEONW_PON_BCA_BV_02_nodeC /** * @desc Behavior function for NodeD (TC_GEONW_PON_BCA_BV_02) */ function f_GEONW_PON_BCA_BV_02_nodeD() runs on ItsGeoNetworking { // Local variables var LongPosVector v_longPosVectorNodeC := f_getPosition(c_compNodeC); // Preamble f_prNeighbour(); f_selfOrClientSyncAndVerdict(c_prDone, e_success); // Test Body tc_ac.start; alt { [] geoNetworkingPort.receive(mw_geoNwInd(mw_geoNwPdu(mw_geoNwBroadcastPacketWithArea( mw_longPosVectorPosition(v_longPosVectorNodeC), ?, f_getGeoBroadcastArea(c_area1) )))) { tc_ac.stop; log("*** " & testcasename() & ": PASS: GBC message broadcasted ***"); f_selfOrClientSyncAndVerdict(c_tbDone, e_success); } [] tc_ac.timeout { log("*** " & testcasename() & ": FAIL: GBC message not broadcasted ***"); f_selfOrClientSyncAndVerdict(c_tbDone, e_error); } } // Postamble f_poNeighbour(); } // end f_GEONW_PON_BCA_BV_02_nodeD } // end GEONW_PON_BCA_BV_02 group GEONW_PON_BCA_BV_03 { /** * @desc TP Function for TC_GEONW_PON_BCA_BV_03 */ function f_GEONW_PON_BCA_BV_03() runs on ItsMtc { // Local variables var ItsGeoNetworking v_nodeB; var ItsGeoNetworking v_nodeC; var ItsGeoNetworking v_nodeD; // Test control if (not PICS_GN_GBC_FWD) { log("*** " & testcasename() & ": PICS_GN_GBC_FWD required for executing the TC ***"); setverdict(inconc); stop; } if (f_getGeoBroadcastForwardingAlgorithm() != e_cbf) { log("*** " & testcasename() & ": PICS_GN_GEOBROADCAST_FORWARDING_ALGORITHM == e_cbf required for executing the TC ***"); setverdict(inconc); stop; } // if (f_getGeoBroadcastCbfMinTime() < 300) { // log("*** " & testcasename() & ": PICS_GN_GEOBROADCAST_CBF_MIN_TIME >= 300 required for executing the TC ***"); // setverdict(inconc); // stop; // } // Test component configuration f_cf04Up(); // Preamble // Start components v_nodeB := f_getComponent(c_compNodeB); v_nodeC := f_getComponent(c_compNodeC); v_nodeD := f_getComponent(c_compNodeD); v_nodeB.start(f_GEONW_PON_BCA_BV_03_nodeB()); v_nodeC.start(f_GEONW_PON_BCA_BV_03_nodeC()); v_nodeD.start(f_GEONW_PON_BCA_BV_03_nodeD()); // Synchronization f_serverSync3ClientsAndStop({c_prDone, c_tbDone}); // Cleanup f_cf04Down(); } // end f_GEONW_PON_BCA_BV_03 /** * @desc Behavior function for NodeB (TC_GEONW_PON_BCA_BV_03) */ function f_GEONW_PON_BCA_BV_03_nodeB() runs on ItsGeoNetworking { // Local variables var LongPosVector v_longPosVectorNodeC := f_getPosition(c_compNodeC); // Preamble f_prNeighbour(); f_selfOrClientSyncAndVerdict(c_prDone, e_success); // Test Body tc_ac.start; alt { [] geoNetworkingPort.receive(mw_geoNwInd_withLinkLayerDestination(mw_geoNwPdu(mw_geoNwBroadcastPacketWithArea( mw_longPosVectorPosition(v_longPosVectorNodeC), ?, f_getGeoBroadcastArea(c_area2) )), f_getTsGnLocalAddress(c_compNodeB).mid )) { tc_ac.stop; log("*** " & testcasename() & ": PASS: GBC correctly forwarded ***"); f_selfOrClientSyncAndVerdict(c_tbDone, e_success); } [] tc_ac.timeout { log("*** " & testcasename() & ": FAIL: GBC message not forwarded ***"); f_selfOrClientSyncAndVerdict(c_tbDone, e_error); } } // Postamble f_poNeighbour(); } // end f_GEONW_PON_BCA_BV_03_nodeB /** * @desc Behavior function for NodeC (TC_GEONW_PON_BCA_BV_03) */ function f_GEONW_PON_BCA_BV_03_nodeC() runs on ItsGeoNetworking { // Local variables var LongPosVector v_longPosVectorNodeC := f_getPosition(c_compNodeC); // Preamble f_prNeighbour(); f_selfOrClientSyncAndVerdict(c_prDone, e_success); // Test Body f_sendGeoNetMessage( valueof(m_geoNwReq_linkLayerBroadcast( m_geoNwPdu( m_geoNwBroadcastPacket( v_longPosVectorNodeC, vc_localSeqNumber, f_getGeoBroadcastArea(c_area2) ) ) ) )); tc_noac.start; alt { [] geoNetworkingPort.receive(mw_geoNwInd(mw_geoNwPdu(?))) { tc_noac.stop; log("*** " & testcasename() & ": FAIL: Message was broadcasted ***"); f_selfOrClientSyncAndVerdict(c_tbDone, e_error); } [] tc_noac.timeout { log("*** " & testcasename() & ": PASS: Message not broadcasted ***"); f_selfOrClientSyncAndVerdict(c_tbDone, e_success); } } // Postamble f_poNeighbour(); } // end f_GEONW_PON_BCA_BV_03_nodeC /** * @desc Behavior function for NodeD (TC_GEONW_PON_BCA_BV_03) */ function f_GEONW_PON_BCA_BV_03_nodeD() runs on ItsGeoNetworking { // Local variables // Preamble f_prNeighbour(); f_selfOrClientSyncAndVerdict(c_prDone, e_success); // Test Body tc_noac.start; alt { [] geoNetworkingPort.receive(mw_geoNwInd(mw_geoNwPdu(?))) { tc_noac.stop; log("*** " & testcasename() & ": FAIL: Message was broadcasted ***"); f_selfOrClientSyncAndVerdict(c_tbDone, e_error); } [] tc_noac.timeout { log("*** " & testcasename() & ": PASS: Message not broadcasted ***"); f_selfOrClientSyncAndVerdict(c_tbDone, e_success); } } // Postamble f_poNeighbour(); } // end f_GEONW_PON_BCA_BV_03_nodeD } // end GEONW_PON_BCA_BV_03 group GEONW_PON_BCA_BO_04 { /** * @desc TP Function for TC_GEONW_PON_BCA_BO_04 */ function f_GEONW_PON_BCA_BO_04() runs on ItsMtc { // Local variables var ItsGeoNetworking v_nodeB; var ItsGeoNetworking v_nodeC; var ItsGeoNetworking v_nodeD; // Test control if (not PICS_GN_GBC_FWD) { log("*** " & testcasename() & ": PICS_GN_GBC_FWD required for executing the TC ***"); setverdict(inconc); stop; } if (f_getGeoBroadcastForwardingAlgorithm() != e_cbf) { log("*** " & testcasename() & ": PICS_GN_GEOBROADCAST_FORWARDING_ALGORITHM == e_cbf required for executing the TC ***"); setverdict(inconc); stop; } // if (f_getGeoBroadcastCbfMinTime() < 300) { // log("*** " & testcasename() & ": PICS_GN_GEOBROADCAST_CBF_MIN_TIME >= 300 required for executing the TC ***"); // setverdict(inconc); // stop; // } // Test component configuration f_cf04Up(); // Preamble // Start components v_nodeB := f_getComponent(c_compNodeB); v_nodeC := f_getComponent(c_compNodeC); v_nodeD := f_getComponent(c_compNodeD); v_nodeB.start(f_GEONW_PON_BCA_BO_04_nodeB()); v_nodeC.start(f_GEONW_PON_BCA_BO_04_nodeC()); v_nodeD.start(f_GEONW_PON_BCA_BO_04_nodeD()); // Synchronization f_serverSync3ClientsAndStop({c_prDone, c_tbDone}); // Cleanup f_cf04Down(); } // end f_GEONW_PON_BCA_BO_04 /** * @desc Behavior function for NodeB (TC_GEONW_PON_BCA_BO_04) */ function f_GEONW_PON_BCA_BO_04_nodeB() runs on ItsGeoNetworking { // Local variables // Preamble f_prNeighbour(); f_selfOrClientSyncAndVerdict(c_prDone, e_success); // Test Body tc_noac.start; alt { [] geoNetworkingPort.receive(mw_geoNwInd(mw_geoNwPdu(?))) { tc_noac.stop; log("*** " & testcasename() & ": FAIL: GBC received and not discarded ***"); f_selfOrClientSyncAndVerdict(c_tbDone, e_error); } [] tc_noac.timeout { log("*** " & testcasename() & ": PASS: GBC message discarded ***"); f_selfOrClientSyncAndVerdict(c_tbDone, e_success); } } // Postamble f_poNeighbour(); } // end f_GEONW_PON_BCA_BO_04_nodeB /** * @desc Behavior function for NodeC (TC_GEONW_PON_BCA_BO_04) */ function f_GEONW_PON_BCA_BO_04_nodeC() runs on ItsGeoNetworking { // Local variables // Preamble f_prNeighbour(); f_selfOrClientSyncAndVerdict(c_prDone, e_success); // Test Body tc_noac.start; alt { [] geoNetworkingPort.receive(mw_geoNwInd(mw_geoNwPdu(?))) { tc_noac.stop; log("*** " & testcasename() & ": FAIL: GBC received and not discarded ***"); f_selfOrClientSyncAndVerdict(c_tbDone, e_error); } [] tc_noac.timeout { log("*** " & testcasename() & ": PASS: GBC message discarded ***"); f_selfOrClientSyncAndVerdict(c_tbDone, e_success); } } // Postamble f_poNeighbour(); } // end f_GEONW_PON_BCA_BO_04_nodeC /** * @desc Behavior function for NodeD (TC_GEONW_PON_BCA_BO_04) */ function f_GEONW_PON_BCA_BO_04_nodeD() runs on ItsGeoNetworking { // Local variables var LongPosVector v_longPosVectorNodeD := f_getPosition(c_compNodeD); // Preamble f_prNeighbour(); f_selfOrClientSyncAndVerdict(c_prDone, e_success); // Test Body f_sendGeoNetMessage( valueof(m_geoNwReq_linkLayerBroadcast( m_geoNwPdu( m_geoNwBroadcastPacket( v_longPosVectorNodeD, vc_localSeqNumber, f_getGeoBroadcastArea(c_area2) ) ) ) )); tc_noac.start; alt { [] geoNetworkingPort.receive(mw_geoNwInd(mw_geoNwPdu(?))) { tc_noac.stop; log("*** " & testcasename() & ": FAIL: GBC received and not discarded ***"); f_selfOrClientSyncAndVerdict(c_tbDone, e_error); } [] tc_noac.timeout { log("*** " & testcasename() & ": PASS: GBC message discarded ***"); f_selfOrClientSyncAndVerdict(c_tbDone, e_success); } } // Postamble f_poNeighbour(); } // end f_GEONW_PON_BCA_BO_04_nodeD } // end GEONW_PON_BCA_BO_04 group GEONW_PON_BCA_BV_05 { /** * @desc TP Function for TC_GEONW_PON_BCA_BV_05 */ function f_GEONW_PON_BCA_BV_05() runs on ItsMtc { // Local variables var ItsGeoNetworking v_nodeB; var ItsGeoNetworking v_nodeC; var ItsGeoNetworking v_nodeD; // Test control if (not PICS_GN_GBC_FWD) { log("*** " & testcasename() & ": PICS_GN_GBC_FWD required for executing the TC ***"); setverdict(inconc); stop; } if (f_getGeoBroadcastForwardingAlgorithm() != e_cbf) { log("*** " & testcasename() & ": PICS_GN_GEOBROADCAST_FORWARDING_ALGORITHM == e_cbf required for executing the TC ***"); setverdict(inconc); stop; } // if (f_getGeoBroadcastCbfMinTime() < 300) { // log("*** " & testcasename() & ": PICS_GN_GEOBROADCAST_CBF_MIN_TIME >= 300 required for executing the TC ***"); // setverdict(inconc); // stop; // } // Test component configuration f_cf04Up(); // Preamble // Start components v_nodeB := f_getComponent(c_compNodeB); v_nodeC := f_getComponent(c_compNodeC); v_nodeD := f_getComponent(c_compNodeD); v_nodeB.start(f_GEONW_PON_BCA_BV_05_nodeB()); v_nodeC.start(f_GEONW_PON_BCA_BV_05_nodeC()); v_nodeD.start(f_GEONW_PON_BCA_BV_05_nodeD()); // Synchronization f_serverSync3ClientsAndStop({c_prDone, c_tbDone}); // Cleanup f_cf04Down(); } // end f_GEONW_PON_BCA_BV_05 /** * @desc Behavior function for NodeB (TC_GEONW_PON_BCA_BV_05) */ function f_GEONW_PON_BCA_BV_05_nodeB() runs on ItsGeoNetworking { // Local variables var LongPosVector v_longPosVectorNodeC := f_getPosition(c_compNodeC); // Preamble f_prNeighbour(); f_selfOrClientSyncAndVerdict(c_prDone, e_success); // Test Body tc_ac.start; alt { [] geoNetworkingPort.receive(mw_geoNwInd(mw_geoNwPdu(mw_geoNwBroadcastPacketWithArea( mw_longPosVectorPosition(v_longPosVectorNodeC), ?, f_getGeoBroadcastArea(c_area1) )))) { tc_ac.stop; log("*** " & testcasename() & ": PASS: GBC message broadcasted ***"); f_selfOrClientSyncAndVerdict(c_tbDone, e_success); } [] tc_ac.timeout { log("*** " & testcasename() & ": FAIL: GBC message not broadcasted ***"); f_selfOrClientSyncAndVerdict(c_tbDone, e_error); } } // Postamble f_poNeighbour(); } // end f_GEONW_PON_BCA_BV_05_nodeB /** * @desc Behavior function for NodeC (TC_GEONW_PON_BCA_BV_05) */ function f_GEONW_PON_BCA_BV_05_nodeC() runs on ItsGeoNetworking { // Local variables var LongPosVector v_longPosVectorNodeC := f_getPosition(c_compNodeC); // Preamble f_prNeighbour(); f_selfOrClientSyncAndVerdict(c_prDone, e_success); // Test Body tc_ac.start; alt { [] geoNetworkingPort.receive(mw_geoNwInd(mw_geoNwPdu(mw_geoNwBroadcastPacketWithArea( mw_longPosVectorPosition(v_longPosVectorNodeC), ?, f_getGeoBroadcastArea(c_area1) )))) { tc_ac.stop; log("*** " & testcasename() & ": PASS: GBC message broadcasted ***"); f_selfOrClientSyncAndVerdict(c_tbDone, e_success); } [] tc_ac.timeout { log("*** " & testcasename() & ": FAIL: GBC message not broadcasted ***"); f_selfOrClientSyncAndVerdict(c_tbDone, e_error); } } // Postamble f_poNeighbour(); } // end f_GEONW_PON_BCA_BV_05_nodeC /** * @desc Behavior function for NodeD (TC_GEONW_PON_BCA_BV_05) */ function f_GEONW_PON_BCA_BV_05_nodeD() runs on ItsGeoNetworking { // Local variables var LongPosVector v_longPosVectorNodeC := f_getPosition(c_compNodeC); timer t_toCbf := int2float(f_getGeoBroadcastCbfMaxTime()) * 0.95 / 1000.0; // Preamble f_prNonNeighbour(); f_selfOrClientSyncAndVerdict(c_prDone, e_success); // Test Body f_sendGeoNetMessage( valueof(m_geoNwReq_linkLayerBroadcast( m_geoNwPdu( m_geoNwBroadcastPacket( v_longPosVectorNodeC, vc_localSeqNumber, f_getGeoBroadcastArea(c_area1) ) ) ) )); t_toCbf.start; tc_ac.start; alt { [] geoNetworkingPort.receive(mw_geoNwInd(mw_geoNwPdu(mw_geoNwBroadcastPacketWithArea( mw_longPosVectorPosition(v_longPosVectorNodeC), ?, f_getGeoBroadcastArea(c_area1) )))) { tc_ac.stop; if(t_toCbf.running) { t_toCbf.stop; log("*** " & testcasename() & ": FAIL: GBC retransmitted before CBF timer expiration ***"); f_selfOrClientSyncAndVerdict(c_tbDone, e_error); } else { log("*** " & testcasename() & ": PASS: GBC message received ***"); f_selfOrClientSyncAndVerdict(c_tbDone, e_success); } } [] t_toCbf.timeout { log("*** " & testcasename() & ": INFO: CBF timer elapsed ***"); repeat; } [] tc_ac.timeout { log("*** " & testcasename() & ": FAIL: GBC message not received ***"); f_selfOrClientSyncAndVerdict(c_tbDone, e_error); } } // Postamble f_poDefault(); } // end f_GEONW_PON_BCA_BV_05_nodeD } // end GEONW_PON_BCA_BV_05 group GEONW_PON_BCA_BV_06 { /** * @desc TP Function for TC_GEONW_PON_BCA_BV_06 */ function f_GEONW_PON_BCA_BV_06() runs on ItsMtc { // Local variables var ItsGeoNetworking v_nodeB; var ItsGeoNetworking v_nodeC; var ItsGeoNetworking v_nodeD; // Test control if (not PICS_GN_GBC_FWD) { log("*** " & testcasename() & ": PICS_GN_GBC_FWD required for executing the TC ***"); setverdict(inconc); stop; } if (f_getGeoBroadcastForwardingAlgorithm() != e_cbf) { log("*** " & testcasename() & ": PICS_GN_GEOBROADCAST_FORWARDING_ALGORITHM == e_cbf required for executing the TC ***"); setverdict(inconc); stop; } // if (f_getGeoBroadcastCbfMinTime() < 300) { // log("*** " & testcasename() & ": PICS_GN_GEOBROADCAST_CBF_MIN_TIME >= 300 required for executing the TC ***"); // setverdict(inconc); // stop; // } // Test component configuration f_cf04Up(); // Preamble // Start components v_nodeB := f_getComponent(c_compNodeB); v_nodeC := f_getComponent(c_compNodeC); v_nodeD := f_getComponent(c_compNodeD); v_nodeB.start(f_GEONW_PON_BCA_BV_06_nodeB()); v_nodeC.start(f_GEONW_PON_BCA_BV_06_nodeC()); v_nodeD.start(f_GEONW_PON_BCA_BV_06_nodeD()); // Synchronization f_serverSync3ClientsAndStop({c_prDone, c_tbDone}); // Cleanup f_cf04Down(); } // end f_GEONW_PON_BCA_BV_06 /** * @desc Behavior function for NodeB (TC_GEONW_PON_BCA_BV_06) */ function f_GEONW_PON_BCA_BV_06_nodeB() runs on ItsGeoNetworking { // Local variables var LongPosVector v_longPosVectorNodeC := f_getPosition(c_compNodeC); // Preamble f_prNeighbour(); f_selfOrClientSyncAndVerdict(c_prDone, e_success); // Test Body tc_ac.start; alt { [] geoNetworkingPort.receive(mw_geoNwInd(mw_geoNwPdu(mw_geoNwBroadcastPacketWithArea( mw_longPosVectorPosition(v_longPosVectorNodeC), ?, f_getGeoBroadcastArea(c_area2) )))) { tc_ac.stop; log("*** " & testcasename() & ": PASS: GBC broadcasted ***"); f_selfOrClientSyncAndVerdict(c_tbDone, e_success); } [] tc_ac.timeout { log("*** " & testcasename() & ": FAIL: GBC not broadcasted ***"); f_selfOrClientSyncAndVerdict(c_tbDone, e_error); } } // Postamble f_poNeighbour(); } // end f_GEONW_PON_BCA_BV_06_nodeB /** * @desc Behavior function for NodeC (TC_GEONW_PON_BCA_BV_06) */ function f_GEONW_PON_BCA_BV_06_nodeC() runs on ItsGeoNetworking { // Local variables // Preamble f_prNeighbour(); f_selfOrClientSyncAndVerdict(c_prDone, e_success); // Test Body tc_ac.start; alt { [] geoNetworkingPort.receive(mw_geoNwInd(mw_geoNwPdu(?))) { tc_ac.stop; log("*** " & testcasename() & ": PASS: GBC message re-broadcasted ***"); f_selfOrClientSyncAndVerdict(c_tbDone, e_success); } [] tc_ac.timeout { log("*** " & testcasename() & ": FAIL: GBC message not re-broadcasted ***"); f_selfOrClientSyncAndVerdict(c_tbDone, e_error); } } // Postamble f_poNeighbour(); } // end f_GEONW_PON_BCA_BV_06_nodeC /** * @desc Behavior function for NodeD (TC_GEONW_PON_BCA_BV_06) */ function f_GEONW_PON_BCA_BV_06_nodeD() runs on ItsGeoNetworking { // Local variables var LongPosVector v_longPosVectorNodeC := f_getPosition(c_compNodeC); // Preamble f_prNonNeighbour(); f_selfOrClientSyncAndVerdict(c_prDone, e_success); // Test Body f_sendGeoNetMessage( valueof(m_geoNwReq_linkLayerBroadcast( m_geoNwPdu( m_geoNwBroadcastPacket( v_longPosVectorNodeC, vc_localSeqNumber, f_getGeoBroadcastArea(c_area2) ) ) ) )); tc_ac.start; alt { [] geoNetworkingPort.receive(mw_geoNwInd(mw_geoNwPdu(?))) { tc_ac.stop; log("*** " & testcasename() & ": PASS: GBC message re-broadcasted ***"); f_selfOrClientSyncAndVerdict(c_tbDone, e_success); } [] tc_ac.timeout { log("*** " & testcasename() & ": FAIL: GBC message not re-broadcasted ***"); f_selfOrClientSyncAndVerdict(c_tbDone, e_error); } } // Postamble f_poDefault(); } // end f_GEONW_PON_BCA_BV_06_nodeD } // end GEONW_PON_BCA_BV_06 group GEONW_PON_BCA_BV_07 { /** * @desc TP Function for TC_GEONW_PON_BCA_BV_07 */ function f_GEONW_PON_BCA_BV_07() runs on ItsMtc { // Local variables var ItsGeoNetworking v_nodeB; var ItsGeoNetworking v_nodeC; var ItsGeoNetworking v_nodeD; // Test control if (not PICS_GN_GBC_FWD) { log("*** " & testcasename() & ": PICS_GN_GBC_FWD required for executing the TC ***"); setverdict(inconc); stop; } if (f_getGeoBroadcastForwardingAlgorithm() != e_cbf) { log("*** " & testcasename() & ": PICS_GN_GEOBROADCAST_FORWARDING_ALGORITHM == e_cbf required for executing the TC ***"); setverdict(inconc); stop; } // if (f_getGeoBroadcastCbfMinTime() < 300) { // log("*** " & testcasename() & ": PICS_GN_GEOBROADCAST_CBF_MIN_TIME >= 300 required for executing the TC ***"); // setverdict(inconc); // stop; // } // Test component configuration f_cf04Up(); // Preamble // Start components v_nodeB := f_getComponent(c_compNodeB); v_nodeC := f_getComponent(c_compNodeC); v_nodeD := f_getComponent(c_compNodeD); v_nodeB.start(f_GEONW_PON_BCA_BV_07_nodeB()); v_nodeC.start(f_GEONW_PON_BCA_BV_07_nodeC()); v_nodeD.start(f_GEONW_PON_BCA_BV_07_nodeD()); // Synchronization f_serverSync3ClientsAndStop({c_prDone, c_tbDone}); // Cleanup f_cf04Down(); } // end f_GEONW_PON_BCA_BV_07 /** * @desc Behavior function for NodeB (TC_GEONW_PON_BCA_BV_07) */ function f_GEONW_PON_BCA_BV_07_nodeB() runs on ItsGeoNetworking { // Local variables var LongPosVector v_longPosVectorNodeA := f_getPosition(c_compNodeA); // Preamble f_prNeighbour(); f_selfOrClientSyncAndVerdict(c_prDone, e_success); // Test Body tc_ac.start; alt { [] geoNetworkingPort.receive(mw_geoNwInd(mw_geoNwPdu(mw_geoNwBroadcastPacketWithArea( mw_longPosVectorPosition(v_longPosVectorNodeA), ?, f_getGeoBroadcastArea(c_area2) )))) { tc_ac.stop; log("*** " & testcasename() & ": PASS: GBC broadcasted ***"); f_selfOrClientSyncAndVerdict(c_tbDone, e_success); } [] tc_ac.timeout { log("*** " & testcasename() & ": FAIL: GBC not broadcasted ***"); f_selfOrClientSyncAndVerdict(c_tbDone, e_error); } } // Postamble f_poNeighbour(); } // end f_GEONW_PON_BCA_BV_07_nodeB /** * @desc Behavior function for NodeC (TC_GEONW_PON_BCA_BV_07) */ function f_GEONW_PON_BCA_BV_07_nodeC() runs on ItsGeoNetworking { // Local variables var LongPosVector v_longPosVectorNodeC := f_getPosition(c_compNodeC); var LongPosVector v_longPosVectorNodeA := f_getPosition(c_compNodeA); // Preamble v_longPosVectorNodeC.pai := int2bit(0,1); f_changePositon(c_compNodeC, v_longPosVectorNodeC); f_prNeighbour(); f_selfOrClientSyncAndVerdict(c_prDone, e_success); // Test Body f_sendGeoNetMessage( valueof(m_geoNwReq_linkLayerBroadcast( m_geoNwPdu( m_geoNwBroadcastPacket( v_longPosVectorNodeA, vc_localSeqNumber, f_getGeoBroadcastArea(c_area2) ) ) ) )); tc_ac.start; alt { [] geoNetworkingPort.receive(mw_geoNwInd(mw_geoNwPdu(mw_geoNwBroadcastPacketWithArea( mw_longPosVectorPosition(v_longPosVectorNodeA), ?, f_getGeoBroadcastArea(c_area2) )))) { tc_ac.stop; log("*** " & testcasename() & ": PASS: GBC broadcasted ***"); f_selfOrClientSyncAndVerdict(c_tbDone, e_success); } [] tc_ac.timeout { log("*** " & testcasename() & ": FAIL: GBC not broadcasted ***"); f_selfOrClientSyncAndVerdict(c_tbDone, e_error); } } // Postamble f_poNeighbour(); } // end f_GEONW_PON_BCA_BV_07_nodeC /** * @desc Behavior function for NodeD (TC_GEONW_PON_BCA_BV_07) */ function f_GEONW_PON_BCA_BV_07_nodeD() runs on ItsGeoNetworking { // Local variables var LongPosVector v_longPosVectorNodeA := f_getPosition(c_compNodeA); // Preamble f_prNeighbour(); f_selfOrClientSyncAndVerdict(c_prDone, e_success); // Test Body tc_ac.start; alt { [] geoNetworkingPort.receive(mw_geoNwInd(mw_geoNwPdu(mw_geoNwBroadcastPacketWithArea( mw_longPosVectorPosition(v_longPosVectorNodeA), ?, f_getGeoBroadcastArea(c_area2) )))) { tc_ac.stop; log("*** " & testcasename() & ": PASS: GBC broadcasted ***"); f_selfOrClientSyncAndVerdict(c_tbDone, e_success); } [] tc_ac.timeout { log("*** " & testcasename() & ": FAIL: GBC not broadcasted ***"); f_selfOrClientSyncAndVerdict(c_tbDone, e_error); } } // Postamble f_poNeighbour(); } // end f_GEONW_PON_BCA_BV_07_nodeD } // end GEONW_PON_BCA_BV_07 group GEONW_PON_BCA_BV_08 { /** * @desc TP Function for TC_GEONW_PON_BCA_BV_08 */ function f_GEONW_PON_BCA_BV_08() runs on ItsMtc { // Local variables var ItsGeoNetworking v_nodeB; var ItsGeoNetworking v_nodeC; var ItsGeoNetworking v_nodeD; // Test control if (not PICS_GN_GBC_FWD) { log("*** " & testcasename() & ": PICS_GN_GBC_FWD required for executing the TC ***"); setverdict(inconc); stop; } if (f_getGeoBroadcastForwardingAlgorithm() != e_cbf) { log("*** " & testcasename() & ": PICS_GN_GEOBROADCAST_FORWARDING_ALGORITHM == e_cbf required for executing the TC ***"); setverdict(inconc); stop; } // if (f_getGeoBroadcastCbfMinTime() < 300) { // log("*** " & testcasename() & ": PICS_GN_GEOBROADCAST_CBF_MIN_TIME >= 300 required for executing the TC ***"); // setverdict(inconc); // stop; // } // Test component configuration f_cf04Up(); // Preamble // Start components v_nodeB := f_getComponent(c_compNodeB); v_nodeC := f_getComponent(c_compNodeC); v_nodeD := f_getComponent(c_compNodeD); v_nodeB.start(f_GEONW_PON_BCA_BV_08_nodeB()); v_nodeC.start(f_GEONW_PON_BCA_BV_08_nodeC()); v_nodeD.start(f_GEONW_PON_BCA_BV_08_nodeD()); // Synchronization f_serverSync3ClientsAndStop({c_prDone, c_tbDone}); // Cleanup f_cf04Down(); } // end f_GEONW_PON_BCA_BV_08 /** * @desc Behavior function for NodeB (TC_GEONW_PON_BCA_BV_08) */ function f_GEONW_PON_BCA_BV_08_nodeB() runs on ItsGeoNetworking { // Local variables var LongPosVector v_longPosVectorNodeC := f_getPosition(c_compNodeC); // Preamble f_prNeighbour(); f_selfOrClientSyncAndVerdict(c_prDone, e_success); // Test Body tc_ac.start; alt { [] geoNetworkingPort.receive(mw_geoNwInd(mw_geoNwPdu(mw_geoNwBroadcastPacketWithArea( mw_longPosVectorPosition(v_longPosVectorNodeC), ?, f_getGeoBroadcastArea(c_area1) )))) { tc_ac.stop; log("*** " & testcasename() & ": PASS: GBC message broadcasted ***"); f_selfOrClientSyncAndVerdict(c_tbDone, e_success); } [] tc_ac.timeout { log("*** " & testcasename() & ": FAIL: GBC message not broadcasted ***"); f_selfOrClientSyncAndVerdict(c_tbDone, e_error); } } // Postamble f_poNeighbour(); } // end f_GEONW_PON_BCA_BV_08_nodeB /** * @desc Behavior function for NodeC (TC_GEONW_PON_BCA_BV_08) */ function f_GEONW_PON_BCA_BV_08_nodeC() runs on ItsGeoNetworking { // Local variables var LongPosVector v_longPosVectorNodeC := f_getPosition(c_compNodeC); // Preamble f_prNeighbour(); f_selfOrClientSyncAndVerdict(c_prDone, e_success); // Test Body tc_ac.start; alt { [] geoNetworkingPort.receive(mw_geoNwInd(mw_geoNwPdu(mw_geoNwBroadcastPacketWithArea( mw_longPosVectorPosition(v_longPosVectorNodeC), ?, f_getGeoBroadcastArea(c_area1) )))) { tc_ac.stop; log("*** " & testcasename() & ": PASS: GBC message broadcasted ***"); f_selfOrClientSyncAndVerdict(c_tbDone, e_success); } [] tc_ac.timeout { log("*** " & testcasename() & ": FAIL: GBC message not broadcasted ***"); f_selfOrClientSyncAndVerdict(c_tbDone, e_error); } } // Postamble f_poNeighbour(); } // end f_GEONW_PON_BCA_BV_08_nodeC /** * @desc Behavior function for NodeD (TC_GEONW_PON_BCA_BV_08) */ function f_GEONW_PON_BCA_BV_08_nodeD() runs on ItsGeoNetworking { // Local variables var LongPosVector v_longPosVectorNodeC := f_getPosition(c_compNodeC); var LongPosVector v_longPosVectorNodeD := f_getPosition(c_compNodeD); timer t_toCbf := int2float(f_getGeoBroadcastCbfMaxTime()) * 0.95 / 1000.0; // Preamble v_longPosVectorNodeD.pai := int2bit(0,1); f_changePositon(c_compNodeD, v_longPosVectorNodeD); f_prNeighbour(); f_selfOrClientSyncAndVerdict(c_prDone, e_success); // Test Body f_sendGeoNetMessage( valueof(m_geoNwReq_linkLayerBroadcast( m_geoNwPdu( m_geoNwBroadcastPacket( v_longPosVectorNodeC, vc_localSeqNumber, f_getGeoBroadcastArea(c_area1) ) ) ) )); t_toCbf.start; tc_ac.start; alt { [] geoNetworkingPort.receive(mw_geoNwInd(mw_geoNwPdu(mw_geoNwBroadcastPacketWithArea( mw_longPosVectorPosition(v_longPosVectorNodeC), ?, f_getGeoBroadcastArea(c_area1) )))) { tc_ac.stop; if(t_toCbf.running) { t_toCbf.stop; log("*** " & testcasename() & ": FAIL: GBC retransmitted before CBF timer expiration ***"); f_selfOrClientSyncAndVerdict(c_tbDone, e_error); } else { log("*** " & testcasename() & ": PASS: GBC message received ***"); f_selfOrClientSyncAndVerdict(c_tbDone, e_success); } } [] t_toCbf.timeout { log("*** " & testcasename() & ": INFO: CBF timer elapsed ***"); repeat; } [] tc_ac.timeout { log("*** " & testcasename() & ": FAIL: GBC message not received ***"); f_selfOrClientSyncAndVerdict(c_tbDone, e_error); } } // Postamble f_poDefault(); } // end f_GEONW_PON_BCA_BV_08_nodeD } // end GEONW_PON_BCA_BV_08 } // end geoGeoBroadcastCbfAlgorithm // 6.2.2.13 group geoGeoBroadcastAdvAlgorithm { group GEONW_PON_BAA_BV_01 { /** * @desc TP Function for TC_GEONW_PON_BAA_BV_01 */ function f_GEONW_PON_BAA_BV_01() runs on ItsMtc { // Local variables var ItsGeoNetworking v_nodeB; var ItsGeoNetworking v_nodeF; // Test control if (not PICS_GN_GBC_FWD) { log("*** " & testcasename() & ": PICS_GN_GBC_FWD required for executing the TC ***"); setverdict(inconc); stop; } if (f_getGeoBroadcastForwardingAlgorithm() != e_advanced) { log("*** " & testcasename() & ": PICS_GN_GEOBROADCAST_FORWARDING_ALGORITHM == e_advanced required for executing the TC ***"); setverdict(inconc); stop; } // if (f_getGeoBroadcastCbfMinTime() < 300) { // log("*** " & testcasename() & ": PICS_GN_GEOBROADCAST_CBF_MIN_TIME >= 300 required for executing the TC ***"); // setverdict(inconc); // stop; // } // Test component configuration f_cf06Up(); // Preamble // Start components v_nodeB := f_getComponent(c_compNodeB); v_nodeF := f_getComponent(c_compNodeF); v_nodeB.start(f_GEONW_PON_BAA_BV_01_nodeB()); v_nodeF.start(f_GEONW_PON_BAA_BV_01_nodeF()); // Synchronization f_serverSync2ClientsAndStop({c_prDone, c_tbDone}); // Cleanup f_cf06Down(); } // end f_GEONW_PON_BAA_BV_01 /** * @desc Behavior function for NodeB (TC_GEONW_PON_BAA_BV_01) */ function f_GEONW_PON_BAA_BV_01_nodeB() runs on ItsGeoNetworking { // Local variables // Preamble f_prNeighbour(); f_selfOrClientSyncAndVerdict(c_prDone, e_success); // Test Body tc_noac.start; alt { [] geoNetworkingPort.receive(mw_geoNwInd(mw_geoNwPdu(?))) { tc_noac.stop; log("*** " & testcasename() & ": FAIL: Message not discarded ***"); f_selfOrClientSyncAndVerdict(c_tbDone, e_error); } [] tc_noac.timeout { log("*** " & testcasename() & ": PASS: No message received ***"); f_selfOrClientSyncAndVerdict(c_tbDone, e_success); } } // Postamble f_poNeighbour(); } // end f_GEONW_PON_BAA_BV_01_nodeB /** * @desc Behavior function for NodeF (TC_GEONW_PON_BAA_BV_01) */ function f_GEONW_PON_BAA_BV_01_nodeF() runs on ItsGeoNetworking { // Local variables var integer i; var template (value) GeoNetworkingPdu v_gnPacket; var LongPosVector v_longPosVectorNodeB := f_getPosition(c_compNodeB); // Preamble f_prNeighbour(); v_gnPacket := m_geoNwPdu(m_geoNwBroadcastPacket( v_longPosVectorNodeB, vc_localSeqNumber, f_getGeoBroadcastArea(c_area1) ) ); f_sendGeoNetMessage(valueof(m_geoNwReq_linkLayerBroadcast(v_gnPacket))); f_selfOrClientSyncAndVerdict(c_prDone, e_success); // Test Body for(i:=1; i < f_getAdvancedGbcForwardingMaxCounter(); i:=i+1) { f_sendGeoNetMessage(valueof(m_geoNwReq_linkLayerBroadcast(v_gnPacket))); f_sleepIgnoreDef(0.5); } tc_noac.start; alt { [] geoNetworkingPort.receive(mw_geoNwInd(mw_geoNwPdu(?))) { tc_noac.stop; log("*** " & testcasename() & ": FAIL: Message not discarded ***"); f_selfOrClientSyncAndVerdict(c_tbDone, e_error); } [] tc_noac.timeout { log("*** " & testcasename() & ": PASS: No message received ***"); f_selfOrClientSyncAndVerdict(c_tbDone, e_success); } } // Postamble f_poNeighbour(); } // end f_GEONW_PON_BAA_BV_01_nodeF } // end GEONW_PON_BAA_BV_01 group GEONW_PON_BAA_BV_02 { /** * @desc TP Function for TC_GEONW_PON_BAA_BV_02 */ function f_GEONW_PON_BAA_BV_02() runs on ItsMtc { // Local variables var ItsGeoNetworking v_nodeB; var ItsGeoNetworking v_nodeE; // Test control if (not PICS_GN_GBC_FWD) { log("*** " & testcasename() & ": PICS_GN_GBC_FWD required for executing the TC ***"); setverdict(inconc); stop; } if (f_getGeoBroadcastForwardingAlgorithm() != e_advanced) { log("*** " & testcasename() & ": PICS_GN_GEOBROADCAST_FORWARDING_ALGORITHM == e_advanced required for executing the TC ***"); setverdict(inconc); stop; } // if (f_getGeoBroadcastCbfMinTime() < 300) { // log("*** " & testcasename() & ": PICS_GN_GEOBROADCAST_CBF_MIN_TIME >= 300 required for executing the TC ***"); // setverdict(inconc); // stop; // } // Test component configuration f_cf05Up(); // Preamble // Start components v_nodeB := f_getComponent(c_compNodeB); v_nodeE := f_getComponent(c_compNodeE); v_nodeB.start(f_GEONW_PON_BAA_BV_02_nodeB()); v_nodeE.start(f_GEONW_PON_BAA_BV_02_nodeE()); // Synchronization f_serverSync2ClientsAndStop({c_prDone, c_tbDone}); // Cleanup f_cf05Down(); } // end f_GEONW_PON_BAA_BV_02 /** * @desc Behavior function for NodeB (TC_GEONW_PON_BAA_BV_02) */ function f_GEONW_PON_BAA_BV_02_nodeB() runs on ItsGeoNetworking { // Local variables var LongPosVector v_longPosVectorNodeB := f_getPosition(c_compNodeB); // Preamble f_prNeighbour(); f_sendGeoNetMessage(valueof(m_geoNwReq_linkLayerBroadcast( m_geoNwPdu(m_geoNwBroadcastPacket( v_longPosVectorNodeB, 0, f_getGeoBroadcastArea(c_area1) ) ) ))); f_selfOrClientSyncAndVerdict(c_prDone, e_success); // Test Body tc_noac.start; alt { [] geoNetworkingPort.receive(mw_geoNwInd(mw_geoNwPdu(?))) { tc_noac.stop; log("*** " & testcasename() & ": FAIL: Message not discarded ***"); f_selfOrClientSyncAndVerdict(c_tbDone, e_error); } [] tc_noac.timeout { log("*** " & testcasename() & ": PASS: No message received ***"); f_selfOrClientSyncAndVerdict(c_tbDone, e_success); } } // Postamble f_poNeighbour(); } // end f_GEONW_PON_BAA_BV_02_nodeB /** * @desc Behavior function for NodeE (TC_GEONW_PON_BAA_BV_02) */ function f_GEONW_PON_BAA_BV_02_nodeE() runs on ItsGeoNetworking { // Local variables var LongPosVector v_longPosVectorNodeB := f_getPosition(c_compNodeB); // Preamble f_prNeighbour(); f_selfOrClientSyncAndVerdict(c_prDone, e_success); // Test Body f_sendGeoNetMessage(valueof(m_geoNwReq_linkLayerBroadcast( m_geoNwPdu(m_geoNwBroadcastPacket( v_longPosVectorNodeB, 0, f_getGeoBroadcastArea(c_area1) ) ) ))); tc_noac.start; alt { [] geoNetworkingPort.receive (mw_geoNwInd(mw_geoNwPdu(?))){ tc_noac.stop; log("*** " & testcasename() & ": FAIL: Message not discarded ***"); f_selfOrClientSyncAndVerdict(c_tbDone, e_error); } [] tc_noac.timeout { log("*** " & testcasename() & ": PASS: No message received ***"); f_selfOrClientSyncAndVerdict(c_tbDone, e_success); } } // Postamble f_poNeighbour(); } // end f_GEONW_PON_BAA_BV_02_nodeE } // end GEONW_PON_BAA_BV_02 group GEONW_PON_BAA_BV_03 { /** * @desc TP Function for TC_GEONW_PON_BAA_BV_03 */ function f_GEONW_PON_BAA_BV_03() runs on ItsMtc { // Local variables var ItsGeoNetworking v_nodeB; var ItsGeoNetworking v_nodeF; // Test control if (not PICS_GN_GBC_FWD) { log("*** " & testcasename() & ": PICS_GN_GBC_FWD required for executing the TC ***"); setverdict(inconc); stop; } if (f_getGeoBroadcastForwardingAlgorithm() != e_advanced) { log("*** " & testcasename() & ": PICS_GN_GEOBROADCAST_FORWARDING_ALGORITHM == e_advanced required for executing the TC ***"); setverdict(inconc); stop; } // if (f_getGeoBroadcastCbfMinTime() < 300) { // log("*** " & testcasename() & ": PICS_GN_GEOBROADCAST_CBF_MIN_TIME >= 300 required for executing the TC ***"); // setverdict(inconc); // stop; // } // Test component configuration f_cf06Up(); // Preamble // Start components v_nodeB := f_getComponent(c_compNodeB); v_nodeF := f_getComponent(c_compNodeF); v_nodeB.start(f_GEONW_PON_BAA_BV_03_nodeB()); v_nodeF.start(f_GEONW_PON_BAA_BV_03_nodeF()); // Synchronization f_serverSync2ClientsAndStop({c_prDone, c_tbDone}); // Cleanup f_cf06Down(); } // end f_GEONW_PON_BAA_BV_03 /** * @desc Behavior function for NodeB (TC_GEONW_PON_BAA_BV_03) */ function f_GEONW_PON_BAA_BV_03_nodeB() runs on ItsGeoNetworking { // Local variables var LongPosVector v_longPosVectorNodeB := f_getPosition(c_compNodeB); // Preamble f_prNeighbour(); f_sendGeoNetMessage(valueof(m_geoNwReq_linkLayerBroadcast( m_geoNwPdu(m_geoNwBroadcastPacket( v_longPosVectorNodeB, 0, f_getGeoBroadcastArea(c_area1) ) ) ))); f_selfOrClientSyncAndVerdict(c_prDone, e_success); // Test Body tc_ac.start; alt { [] geoNetworkingPort.receive(mw_geoNwInd(mw_geoNwPdu(mw_geoNwBroadcastPacketWithArea( mw_longPosVectorPosition(v_longPosVectorNodeB), ?, f_getGeoBroadcastArea(c_area1) )))) { tc_ac.stop; log("*** " & testcasename() & ": PASS: GBC message received ***"); f_selfOrClientSyncAndVerdict(c_tbDone, e_success); } [] tc_ac.timeout { log("*** " & testcasename() & ": FAIL: GBC message not received ***"); f_selfOrClientSyncAndVerdict(c_tbDone, e_error); } } // Postamble f_poNeighbour(); } // end f_GEONW_PON_BAA_BV_03_nodeB /** * @desc Behavior function for NodeF (TC_GEONW_PON_BAA_BV_03) */ function f_GEONW_PON_BAA_BV_03_nodeF() runs on ItsGeoNetworking { // Local variables var LongPosVector v_longPosVectorNodeB := f_getPosition(c_compNodeB); var LongPosVector v_longPosVectorNodeF := f_getPosition(c_compNodeF); var LongPosVector v_longPosVectorIut := f_getPosition(c_compIut); timer t_toCbf := (int2float(f_getGeoBroadcastCbfMaxTime()) + ( int2float(f_getGeoBroadcastCbfMinTime() - f_getGeoBroadcastCbfMaxTime()) / int2float(f_getCbfMaxCommunicationRange()) ) * f_distance(v_longPosVectorNodeF, v_longPosVectorIut)) * 0.95 / 1000.0; // Preamble f_prNeighbour(); f_selfOrClientSyncAndVerdict(c_prDone, e_success); // Test Body f_sendGeoNetMessage( valueof(m_geoNwReq_linkLayerBroadcast( m_geoNwPdu(m_geoNwBroadcastPacket( v_longPosVectorNodeB, 0, f_getGeoBroadcastArea(c_area1) ) ) ))); t_toCbf.start; tc_ac.start; alt { [] geoNetworkingPort.receive(mw_geoNwInd(mw_geoNwPdu(mw_geoNwBroadcastPacketWithArea( mw_longPosVectorPosition(v_longPosVectorNodeB), ?, f_getGeoBroadcastArea(c_area1) )))) { tc_ac.stop; if(t_toCbf.running) { t_toCbf.stop; log("*** " & testcasename() & ": FAIL: GBC retransmitted before CBF timer expiration ***"); f_selfOrClientSyncAndVerdict(c_tbDone, e_error); } else { log("*** " & testcasename() & ": PASS: GBC message received ***"); f_selfOrClientSyncAndVerdict(c_tbDone, e_success); } } [] t_toCbf.timeout { log("*** " & testcasename() & ": INFO: CBF timer elapsed ***"); repeat; } [] tc_ac.timeout { log("*** " & testcasename() & ": FAIL: GBC message not received ***"); f_selfOrClientSyncAndVerdict(c_tbDone, e_error); } } // Postamble f_poNeighbour(); } // end f_GEONW_PON_BAA_BV_03_nodeF } // end GEONW_PON_BAA_BV_03 group GEONW_PON_BAA_BV_04 { /** * @desc TP Function for TC_GEONW_PON_BAA_BV_04 */ function f_GEONW_PON_BAA_BV_04() runs on ItsMtc { // Local variables var ItsGeoNetworking v_nodeB; var ItsGeoNetworking v_nodeE; // Test control if (not PICS_GN_GBC_FWD) { log("*** " & testcasename() & ": PICS_GN_GBC_FWD required for executing the TC ***"); setverdict(inconc); stop; } if (f_getGeoBroadcastForwardingAlgorithm() != e_advanced) { log("*** " & testcasename() & ": PICS_GN_GEOBROADCAST_FORWARDING_ALGORITHM == e_advanced required for executing the TC ***"); setverdict(inconc); stop; } // if (f_getGeoBroadcastCbfMinTime() < 300) { // log("*** " & testcasename() & ": PICS_GN_GEOBROADCAST_CBF_MIN_TIME >= 300 required for executing the TC ***"); // setverdict(inconc); // stop; // } // Test component configuration f_cf05Up(); // Preamble // Start components v_nodeB := f_getComponent(c_compNodeB); v_nodeE := f_getComponent(c_compNodeE); v_nodeB.start(f_GEONW_PON_BAA_BV_04_nodeB()); v_nodeE.start(f_GEONW_PON_BAA_BV_04_nodeE()); // Synchronization f_serverSync2ClientsAndStop({c_prDone, c_tbDone}); // Cleanup f_cf05Down(); } // end f_GEONW_PON_BAA_BV_04 /** * @desc Behavior function for NodeB (TC_GEONW_PON_BAA_BV_04) */ function f_GEONW_PON_BAA_BV_04_nodeB() runs on ItsGeoNetworking { // Local variables var LongPosVector v_longPosVectorNodeA := f_getPosition(c_compNodeA); // Preamble f_prNeighbour(); f_selfOrClientSyncAndVerdict(c_prDone, e_success); // Test Body tc_ac.start; alt { [] geoNetworkingPort.receive(mw_geoNwInd(mw_geoNwPdu(mw_geoNwBroadcastPacketWithArea( mw_longPosVectorPosition(v_longPosVectorNodeA), ?, f_getGeoBroadcastArea(c_area1) )))) { tc_ac.stop; log("*** " & testcasename() & ": PASS: packet correctly forwarded ***"); f_selfOrClientSyncAndVerdict(c_tbDone, e_success); } [] tc_ac.timeout { log("*** " & testcasename() & ": FAIL: Expected message not received ***"); f_selfOrClientSyncAndVerdict(c_tbDone, e_error); } } // Postamble f_poNeighbour(); } // end f_GEONW_PON_BAA_BV_04_nodeB /** * @desc Behavior function for NodeE (TC_GEONW_PON_BAA_BV_04) */ function f_GEONW_PON_BAA_BV_04_nodeE() runs on ItsGeoNetworking { // Local variables var LongPosVector v_longPosVectorNodeA := f_getPosition(c_compNodeA); // Preamble f_prNeighbour(); f_selfOrClientSyncAndVerdict(c_prDone, e_success); // Test Body f_sendGeoNetMessage( valueof(m_geoNwReq_withLinkLayerDestination( m_geoNwPdu(m_geoNwBroadcastPacket( v_longPosVectorNodeA, 0, f_getGeoBroadcastArea(c_area1) ) ), -, f_getIutMacAddress() ) )); f_selfOrClientSyncAndVerdict(c_tbDone, e_success); // Postamble f_poNeighbour(); } // end f_GEONW_PON_BAA_BV_04_nodeE } // end GEONW_PON_BAA_BV_04 group GEONW_PON_BAA_BV_05 { /** * @desc TP Function for TC_GEONW_PON_BAA_BV_05 */ function f_GEONW_PON_BAA_BV_05() runs on ItsMtc { // Local variables var ItsGeoNetworking v_nodeB; var ItsGeoNetworking v_nodeE; // Test control if (not PICS_GN_GBC_FWD) { log("*** " & testcasename() & ": PICS_GN_GBC_FWD required for executing the TC ***"); setverdict(inconc); stop; } if (f_getGeoBroadcastForwardingAlgorithm() != e_advanced) { log("*** " & testcasename() & ": PICS_GN_GEOBROADCAST_FORWARDING_ALGORITHM == e_advanced required for executing the TC ***"); setverdict(inconc); stop; } // if (f_getGeoBroadcastCbfMinTime() < 300) { // log("*** " & testcasename() & ": PICS_GN_GEOBROADCAST_CBF_MIN_TIME >= 300 required for executing the TC ***"); // setverdict(inconc); // stop; // } // Test component configuration f_cf05Up(); // Preamble // Start components v_nodeB := f_getComponent(c_compNodeB); v_nodeE := f_getComponent(c_compNodeE); v_nodeB.start(f_GEONW_PON_BAA_BV_05_nodeB()); v_nodeE.start(f_GEONW_PON_BAA_BV_05_nodeE()); // Synchronization f_serverSync2ClientsAndStop({c_prDone, c_tbDone}); // Cleanup f_cf05Down(); } // end f_GEONW_PON_BAA_BV_05 /** * @desc Behavior function for NodeB (TC_GEONW_PON_BAA_BV_05) */ function f_GEONW_PON_BAA_BV_05_nodeB() runs on ItsGeoNetworking { // Local variables var LongPosVector v_longPosVectorNodeA := f_getPosition(c_compNodeA); // Preamble f_prNeighbour(); f_selfOrClientSyncAndVerdict(c_prDone, e_success); // Test Body tc_ac.start; alt { [] geoNetworkingPort.receive(mw_geoNwInd(mw_geoNwPdu(mw_geoNwBroadcastPacketWithArea( mw_longPosVectorPosition(v_longPosVectorNodeA), ?, f_getGeoBroadcastArea(c_area1) )))) { tc_ac.stop; log("*** " & testcasename() & ": PASS: packet correctly broadcasted ***"); f_selfOrClientSyncAndVerdict(c_tbDone, e_success); } [] tc_ac.timeout { log("*** " & testcasename() & ": FAIL: Expected message not received ***"); f_selfOrClientSyncAndVerdict(c_tbDone, e_error); } } // Postamble f_poNeighbour(); } // end f_GEONW_PON_BAA_BV_05_nodeB /** * @desc Behavior function for NodeE (TC_GEONW_PON_BAA_BV_05) */ function f_GEONW_PON_BAA_BV_05_nodeE() runs on ItsGeoNetworking { // Local variables var LongPosVector v_longPosVectorNodeA := f_getPosition(c_compNodeA); // Preamble f_prNeighbour(); f_selfOrClientSyncAndVerdict(c_prDone, e_success); // Test Body f_sendGeoNetMessage( valueof(m_geoNwReq_withLinkLayerDestination( m_geoNwPdu(m_geoNwBroadcastPacket( v_longPosVectorNodeA, 0, f_getGeoBroadcastArea(c_area1) ) ), -, f_getIutMacAddress() ) )); tc_ac.start; alt { [] geoNetworkingPort.receive(mw_geoNwInd(mw_geoNwPdu(mw_geoNwBroadcastPacketWithArea( mw_longPosVectorPosition(v_longPosVectorNodeA), ?, f_getGeoBroadcastArea(c_area1) )))) { tc_ac.stop; log("*** " & testcasename() & ": PASS: packet correctly broadcasted ***"); f_selfOrClientSyncAndVerdict(c_tbDone, e_success); } [] tc_ac.timeout { log("*** " & testcasename() & ": FAIL: Expected message not received ***"); f_selfOrClientSyncAndVerdict(c_tbDone, e_error); } } // Postamble f_poNeighbour(); } // end f_GEONW_PON_BAA_BV_05_nodeE } // end GEONW_PON_BAA_BV_05 group GEONW_PON_BAA_BV_06 { /** * @desc TP Function for TC_GEONW_PON_BAA_BV_06 */ function f_GEONW_PON_BAA_BV_06() runs on ItsMtc { // Local variables var ItsGeoNetworking v_nodeB; var ItsGeoNetworking v_nodeE; // Test control if (not PICS_GN_GBC_FWD) { log("*** " & testcasename() & ": PICS_GN_GBC_FWD required for executing the TC ***"); setverdict(inconc); stop; } if (f_getGeoBroadcastForwardingAlgorithm() != e_advanced) { log("*** " & testcasename() & ": PICS_GN_GEOBROADCAST_FORWARDING_ALGORITHM == e_advanced required for executing the TC ***"); setverdict(inconc); stop; } // if (f_getGeoBroadcastCbfMinTime() < 300) { // log("*** " & testcasename() & ": PICS_GN_GEOBROADCAST_CBF_MIN_TIME >= 300 required for executing the TC ***"); // setverdict(inconc); // stop; // } // Test component configuration f_cf05Up(); // Preamble // Start components v_nodeB := f_getComponent(c_compNodeB); v_nodeE := f_getComponent(c_compNodeE); v_nodeB.start(f_GEONW_PON_BAA_BV_06_nodeB()); v_nodeE.start(f_GEONW_PON_BAA_BV_06_nodeE()); // Synchronization f_serverSync2ClientsAndStop({c_prDone, c_tbDone}); // Cleanup f_cf05Down(); } // end f_GEONW_PON_BAA_BV_06 /** * @desc Behavior function for NodeB (TC_GEONW_PON_BAA_BV_06) */ function f_GEONW_PON_BAA_BV_06_nodeB() runs on ItsGeoNetworking { // Local variables var LongPosVector v_longPosVectorNodeE := f_getPosition(c_compNodeE); var LongPosVector v_longPosVectorIut := f_getPosition(c_compIut); timer t_toCbf := (int2float(f_getGeoBroadcastCbfMaxTime()) + ( int2float(f_getGeoBroadcastCbfMinTime() - f_getGeoBroadcastCbfMaxTime()) / int2float(f_getCbfMaxCommunicationRange()) ) * f_distance(v_longPosVectorNodeE, v_longPosVectorIut)) * 0.95 / 1000.0; // Preamble f_prNeighbour(); f_selfOrClientSyncAndVerdict(c_prDone, e_success); // Test Body t_toCbf.start; tc_ac.start; alt { [] geoNetworkingPort.receive(mw_geoNwInd(mw_geoNwPdu(mw_geoNwBroadcastPacketWithArea( mw_longPosVectorPosition(v_longPosVectorNodeE), ?, f_getGeoBroadcastArea(c_area1) )))) { tc_ac.stop; if(t_toCbf.running) { t_toCbf.stop; log("*** " & testcasename() & ": FAIL: GBC retransmitted before CBF timer expiration ***"); f_selfOrClientSyncAndVerdict(c_tbDone, e_error); } else { log("*** " & testcasename() & ": PASS: GBC message received ***"); f_selfOrClientSyncAndVerdict(c_tbDone, e_success); } } [] t_toCbf.timeout { log("*** " & testcasename() & ": INFO: CBF timer elapsed ***"); repeat; } [] tc_ac.timeout { log("*** " & testcasename() & ": FAIL: Expected message not received ***"); f_selfOrClientSyncAndVerdict(c_tbDone, e_error); } } // Postamble f_poNeighbour(); } // end f_GEONW_PON_BAA_BV_06_nodeB /** * @desc Behavior function for NodeE (TC_GEONW_PON_BAA_BV_06) */ function f_GEONW_PON_BAA_BV_06_nodeE() runs on ItsGeoNetworking { // Local variables var LongPosVector v_longPosVectorNodeE := f_getPosition(c_compNodeE); var LongPosVector v_longPosVectorIut := f_getPosition(c_compIut); timer t_toCbf := (int2float(f_getGeoBroadcastCbfMaxTime()) + ( int2float(f_getGeoBroadcastCbfMinTime() - f_getGeoBroadcastCbfMaxTime()) / int2float(f_getCbfMaxCommunicationRange()) ) * f_distance(v_longPosVectorNodeE, v_longPosVectorIut)) * 0.95 / 1000.0; // Preamble f_prNeighbour(); f_selfOrClientSyncAndVerdict(c_prDone, e_success); // Test Body f_sendGeoNetMessage( valueof(m_geoNwReq_linkLayerBroadcast( m_geoNwPdu(m_geoNwBroadcastPacket( v_longPosVectorNodeE, 0, f_getGeoBroadcastArea(c_area1) ) ) ) )); t_toCbf.start; tc_ac.start; alt { [] geoNetworkingPort.receive(mw_geoNwInd(mw_geoNwPdu(mw_geoNwBroadcastPacketWithArea( mw_longPosVectorPosition(v_longPosVectorNodeE), ?, f_getGeoBroadcastArea(c_area1) )))) { tc_ac.stop; if(t_toCbf.running) { t_toCbf.stop; log("*** " & testcasename() & ": FAIL: GBC retransmitted before CBF timer expiration ***"); f_selfOrClientSyncAndVerdict(c_tbDone, e_error); } else { log("*** " & testcasename() & ": PASS: GBC message received ***"); f_selfOrClientSyncAndVerdict(c_tbDone, e_success); } } [] t_toCbf.timeout { log("*** " & testcasename() & ": INFO: CBF timer elapsed ***"); repeat; } [] tc_ac.timeout { log("*** " & testcasename() & ": FAIL: Expected message not received ***"); f_selfOrClientSyncAndVerdict(c_tbDone, e_error); } } // Postamble f_poNeighbour(); } // end f_GEONW_PON_BAA_BV_06_nodeE } // end GEONW_PON_BAA_BV_06 group GEONW_PON_BAA_BV_07 { /** * @desc TP Function for TC_GEONW_PON_BAA_BV_07 */ function f_GEONW_PON_BAA_BV_07() runs on ItsMtc { // Local variables var ItsGeoNetworking v_nodeB; var ItsGeoNetworking v_nodeC; var ItsGeoNetworking v_nodeD; // Test control if (not PICS_GN_GBC_FWD) { log("*** " & testcasename() & ": PICS_GN_GBC_FWD required for executing the TC ***"); setverdict(inconc); stop; } if (f_getGeoBroadcastForwardingAlgorithm() != e_advanced) { log("*** " & testcasename() & ": PICS_GN_GEOBROADCAST_FORWARDING_ALGORITHM == e_advanced required for executing the TC ***"); setverdict(inconc); stop; } // if (f_getGeoBroadcastCbfMinTime() < 300) { // log("*** " & testcasename() & ": PICS_GN_GEOBROADCAST_CBF_MIN_TIME >= 300 required for executing the TC ***"); // setverdict(inconc); // stop; // } // Test component configuration f_cf04Up(); // Preamble // Start components v_nodeB := f_getComponent(c_compNodeB); v_nodeC := f_getComponent(c_compNodeC); v_nodeD := f_getComponent(c_compNodeD); v_nodeB.start(f_GEONW_PON_BAA_BV_07_nodeB()); v_nodeC.start(f_GEONW_PON_BAA_BV_07_nodeC()); v_nodeD.start(f_GEONW_PON_BAA_BV_07_nodeD()); // Synchronization f_serverSync3ClientsAndStop({c_prDone, c_tbDone}); // Cleanup f_cf04Down(); } // end f_GEONW_PON_BAA_BV_07 /** * @desc Behavior function for NodeB (TC_GEONW_PON_BAA_BV_07) */ function f_GEONW_PON_BAA_BV_07_nodeB() runs on ItsGeoNetworking { // Local variables var LongPosVector v_longPosVectorNodeC := f_getPosition(c_compNodeC); // Preamble f_prNeighbour(); f_selfOrClientSyncAndVerdict(c_prDone, e_success); // Test Body tc_ac.start; alt { [] geoNetworkingPort.receive(mw_geoNwInd(mw_geoNwPdu(mw_geoNwBroadcastPacketWithArea( mw_longPosVectorPosition(v_longPosVectorNodeC), ?, f_getGeoBroadcastArea(c_area2) )))) { tc_ac.stop; log("*** " & testcasename() & ": PASS: 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_BAA_BV_07_nodeB /** * @desc Behavior function for NodeC (TC_GEONW_PON_BAA_BV_07) */ function f_GEONW_PON_BAA_BV_07_nodeC() runs on ItsGeoNetworking { // Local variables var LongPosVector v_longPosVectorNodeC := f_getPosition(c_compNodeC); // Preamble f_prNeighbour(); f_selfOrClientSyncAndVerdict(c_prDone, e_success); // Test Body f_sendGeoNetMessage( valueof(m_geoNwReq_linkLayerBroadcast( m_geoNwPdu(m_geoNwBroadcastPacket( v_longPosVectorNodeC, 0, f_getGeoBroadcastArea(c_area2) ) ) ) )); f_selfOrClientSyncAndVerdict(c_tbDone, e_success); // Postamble f_poNeighbour(); } // end f_GEONW_PON_BAA_BV_07_nodeC /** * @desc Behavior function for NodeD (TC_GEONW_PON_BAA_BV_07) */ function f_GEONW_PON_BAA_BV_07_nodeD() runs on ItsGeoNetworking { // Local variables // Preamble f_prNeighbour(); f_selfOrClientSyncAndVerdict(c_prDone, e_success); // Test Body tc_noac.start; alt { [] geoNetworkingPort.receive(mw_geoNwInd(mw_geoNwPdu(?))) { tc_noac.stop; log("*** " & testcasename() & ": FAIL: Message not discarded ***"); f_selfOrClientSyncAndVerdict(c_tbDone, e_error); } [] tc_noac.timeout { log("*** " & testcasename() & ": PASS: No message received ***"); f_selfOrClientSyncAndVerdict(c_tbDone, e_success); } } // Postamble f_poNeighbour(); } // end f_GEONW_PON_BAA_BV_07_nodeD } // end GEONW_PON_BAA_BV_07 group GEONW_PON_BAA_BO_08 { /** * @desc TP Function for TC_GEONW_PON_BAA_BO_08 */ function f_GEONW_PON_BAA_BO_08() runs on ItsMtc { // Local variables var ItsGeoNetworking v_nodeB; var ItsGeoNetworking v_nodeC; var ItsGeoNetworking v_nodeD; // Test control if (not PICS_GN_GBC_FWD) { log("*** " & testcasename() & ": PICS_GN_GBC_FWD required for executing the TC ***"); setverdict(inconc); stop; } if (f_getGeoBroadcastForwardingAlgorithm() != e_advanced) { log("*** " & testcasename() & ": PICS_GN_GEOBROADCAST_FORWARDING_ALGORITHM == e_advanced required for executing the TC ***"); setverdict(inconc); stop; } // if (f_getGeoBroadcastCbfMinTime() < 300) { // log("*** " & testcasename() & ": PICS_GN_GEOBROADCAST_CBF_MIN_TIME >= 300 required for executing the TC ***"); // setverdict(inconc); // stop; // } // Test component configuration f_cf04Up(); // Preamble // Start components v_nodeB := f_getComponent(c_compNodeB); v_nodeC := f_getComponent(c_compNodeC); v_nodeD := f_getComponent(c_compNodeD); v_nodeB.start(f_GEONW_PON_BAA_BO_08_nodeB()); v_nodeC.start(f_GEONW_PON_BAA_BO_08_nodeC()); v_nodeD.start(f_GEONW_PON_BAA_BO_08_nodeD()); // Synchronization f_serverSync3ClientsAndStop({c_prDone, c_tbDone}); // Cleanup f_cf04Down(); } // end f_GEONW_PON_BAA_BO_08 /** * @desc Behavior function for NodeB (TC_GEONW_PON_BAA_BO_08) */ function f_GEONW_PON_BAA_BO_08_nodeB() runs on ItsGeoNetworking { // Local variables // Preamble f_prNeighbour(); f_selfOrClientSyncAndVerdict(c_prDone, e_success); // Test Body tc_noac.start; alt { [] geoNetworkingPort.receive(mw_geoNwInd(mw_geoNwPdu(?))) { tc_noac.stop; log("*** " & testcasename() & ": FAIL: Message not discarded ***"); f_selfOrClientSyncAndVerdict(c_tbDone, e_error); } [] tc_noac.timeout { log("*** " & testcasename() & ": PASS: No message received ***"); f_selfOrClientSyncAndVerdict(c_tbDone, e_success); } } // Postamble f_poNeighbour(); } // end f_GEONW_PON_BAA_BO_08_nodeB /** * @desc Behavior function for NodeC (TC_GEONW_PON_BAA_BO_08) */ function f_GEONW_PON_BAA_BO_08_nodeC() runs on ItsGeoNetworking { // Local variables // Preamble f_prNeighbour(); f_selfOrClientSyncAndVerdict(c_prDone, e_success); // Test Body tc_noac.start; alt { [] geoNetworkingPort.receive(mw_geoNwInd(mw_geoNwPdu(?))) { tc_noac.stop; log("*** " & testcasename() & ": FAIL: Message not discarded ***"); f_selfOrClientSyncAndVerdict(c_tbDone, e_error); } [] tc_noac.timeout { log("*** " & testcasename() & ": PASS: No message received ***"); f_selfOrClientSyncAndVerdict(c_tbDone, e_success); } } // Postamble f_poNeighbour(); } // end f_GEONW_PON_BAA_BO_08_nodeC /** * @desc Behavior function for NodeD (TC_GEONW_PON_BAA_BO_08) */ function f_GEONW_PON_BAA_BO_08_nodeD() runs on ItsGeoNetworking { // Local variables var LongPosVector v_longPosVectorNodeD := f_getPosition(c_compNodeD); // Preamble f_prNeighbour(); f_selfOrClientSyncAndVerdict(c_prDone, e_success); // Test Body f_sendGeoNetMessage( valueof(m_geoNwReq_linkLayerBroadcast( m_geoNwPdu(m_geoNwBroadcastPacket( v_longPosVectorNodeD, 0, f_getGeoBroadcastArea(c_area2) ) ) ) )); f_selfOrClientSyncAndVerdict(c_tbDone, e_success); // Postamble f_poNeighbour(); } // end f_GEONW_PON_BAA_BO_08_nodeD } // end GEONW_PON_BAA_BO_08 group GEONW_PON_BAA_BV_09 { /** * @desc TP Function for TC_GEONW_PON_BAA_BV_09 */ function f_GEONW_PON_BAA_BV_09() runs on ItsMtc { // Local variables var ItsGeoNetworking v_nodeB; var ItsGeoNetworking v_nodeE; // Test control if (not PICS_GN_GBC_FWD) { log("*** " & testcasename() & ": PICS_GN_GBC_FWD required for executing the TC ***"); setverdict(inconc); stop; } if (f_getGeoBroadcastForwardingAlgorithm() != e_advanced) { log("*** " & testcasename() & ": PICS_GN_GEOBROADCAST_FORWARDING_ALGORITHM == e_advanced required for executing the TC ***"); setverdict(inconc); stop; } // if (f_getGeoBroadcastCbfMinTime() < 300) { // log("*** " & testcasename() & ": PICS_GN_GEOBROADCAST_CBF_MIN_TIME >= 300 required for executing the TC ***"); // setverdict(inconc); // stop; // } // Test component configuration f_cf05Up(); // Preamble // Start components v_nodeB := f_getComponent(c_compNodeB); v_nodeE := f_getComponent(c_compNodeE); v_nodeB.start(f_GEONW_PON_BAA_BV_09_nodeB()); v_nodeE.start(f_GEONW_PON_BAA_BV_09_nodeE()); // Synchronization f_serverSync2ClientsAndStop({c_prDone, c_tbDone}); // Cleanup f_cf05Down(); } // end f_GEONW_PON_BAA_BV_09 /** * @desc Behavior function for NodeB (TC_GEONW_PON_BAA_BV_09) */ function f_GEONW_PON_BAA_BV_09_nodeB() runs on ItsGeoNetworking { // Local variables var LongPosVector v_longPosVectorNodeB := f_getPosition(c_compNodeB); timer t_toCbf := int2float(f_getGeoBroadcastCbfMaxTime()) * 0.95 / 1000.0; // Preamble f_prNeighbour(); f_selfOrClientSyncAndVerdict(c_prDone, e_success); // Test Body t_toCbf.start; tc_ac.start; alt { [] geoNetworkingPort.receive(mw_geoNwInd(mw_geoNwPdu(mw_geoNwBroadcastPacketWithArea( mw_longPosVectorPosition(v_longPosVectorNodeB), ?, f_getGeoBroadcastArea(c_area1) )))) { tc_ac.stop; if(t_toCbf.running) { t_toCbf.stop; log("*** " & testcasename() & ": FAIL: GBC retransmitted before CBF timer expiration ***"); f_selfOrClientSyncAndVerdict(c_tbDone, e_error); } else { log("*** " & testcasename() & ": PASS: GBC message received ***"); f_selfOrClientSyncAndVerdict(c_tbDone, e_success); } } [] t_toCbf.timeout { log("*** " & testcasename() & ": INFO: CBF timer elapsed ***"); repeat; } [] tc_ac.timeout { log("*** " & testcasename() & ": FAIL: Expected message not received ***"); f_selfOrClientSyncAndVerdict(c_tbDone, e_error); } } // Postamble f_poNeighbour(); } // end f_GEONW_PON_BAA_BV_06_nodeB /** * @desc Behavior function for NodeE (TC_GEONW_PON_BAA_BV_09) */ function f_GEONW_PON_BAA_BV_09_nodeE() runs on ItsGeoNetworking { // Local variables var LongPosVector v_longPosVectorNodeB := f_getPosition(c_compNodeB); timer t_toCbf := int2float(f_getGeoBroadcastCbfMaxTime()) * 0.95 / 1000.0; // Preamble f_prNonNeighbour(); f_selfOrClientSyncAndVerdict(c_prDone, e_success); // Test Body f_sendGeoNetMessage( valueof(m_geoNwReq_linkLayerBroadcast( m_geoNwPdu(m_geoNwBroadcastPacket( v_longPosVectorNodeB, 0, f_getGeoBroadcastArea(c_area1) ) ) ) )); t_toCbf.start; tc_ac.start; alt { [] geoNetworkingPort.receive(mw_geoNwInd(mw_geoNwPdu(mw_geoNwBroadcastPacketWithArea( mw_longPosVectorPosition(v_longPosVectorNodeB), ?, f_getGeoBroadcastArea(c_area1) )))) { tc_ac.stop; if(t_toCbf.running) { t_toCbf.stop; log("*** " & testcasename() & ": FAIL: GBC retransmitted before CBF timer expiration ***"); f_selfOrClientSyncAndVerdict(c_tbDone, e_error); } else { log("*** " & testcasename() & ": PASS: GBC message received ***"); f_selfOrClientSyncAndVerdict(c_tbDone, e_success); } } [] t_toCbf.timeout { log("*** " & testcasename() & ": INFO: CBF timer elapsed ***"); repeat; } [] tc_ac.timeout { log("*** " & testcasename() & ": FAIL: Expected message not received ***"); f_selfOrClientSyncAndVerdict(c_tbDone, e_error); } } // Postamble f_poNeighbour(); } // end f_GEONW_PON_BAA_BV_09_nodeE } // end GEONW_PON_BAA_BV_09 group GEONW_PON_BAA_BV_10 { /** * @desc TP Function for TC_GEONW_PON_BAA_BV_10 */ function f_GEONW_PON_BAA_BV_10() runs on ItsMtc { // Local variables var ItsGeoNetworking v_nodeB; var ItsGeoNetworking v_nodeC; var ItsGeoNetworking v_nodeD; // Test control if (not PICS_GN_GBC_FWD) { log("*** " & testcasename() & ": PICS_GN_GBC_FWD required for executing the TC ***"); setverdict(inconc); stop; } if (f_getGeoBroadcastForwardingAlgorithm() != e_advanced) { log("*** " & testcasename() & ": PICS_GN_GEOBROADCAST_FORWARDING_ALGORITHM == e_advanced required for executing the TC ***"); setverdict(inconc); stop; } // if (f_getGeoBroadcastCbfMinTime() < 300) { // log("*** " & testcasename() & ": PICS_GN_GEOBROADCAST_CBF_MIN_TIME >= 300 required for executing the TC ***"); // setverdict(inconc); // stop; // } // Test component configuration f_cf04Up(); // Preamble // Start components v_nodeB := f_getComponent(c_compNodeB); v_nodeC := f_getComponent(c_compNodeC); v_nodeD := f_getComponent(c_compNodeD); v_nodeB.start(f_GEONW_PON_BAA_BV_10_nodeB()); v_nodeC.start(f_GEONW_PON_BAA_BV_10_nodeC()); v_nodeD.start(f_GEONW_PON_BAA_BV_10_nodeD()); // Synchronization f_serverSync3ClientsAndStop({c_prDone, c_tbDone}); // Cleanup f_cf04Down(); } // end f_GEONW_PON_BAA_BV_10 /** * @desc Behavior function for NodeB (TC_GEONW_PON_BAA_BV_10) */ function f_GEONW_PON_BAA_BV_10_nodeB() runs on ItsGeoNetworking { // Local variables var LongPosVector v_longPosVectorNodeC := f_getPosition(c_compNodeC); // Preamble f_prNeighbour(); f_selfOrClientSyncAndVerdict(c_prDone, e_success); // Test Body tc_ac.start; alt { [] geoNetworkingPort.receive(mw_geoNwInd(mw_geoNwPdu(mw_geoNwBroadcastPacketWithArea( mw_longPosVectorPosition(v_longPosVectorNodeC), ?, f_getGeoBroadcastArea(c_area2) )))) { tc_ac.stop; log("*** " & testcasename() & ": PASS: 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_BAA_BV_10_nodeB /** * @desc Behavior function for NodeC (TC_GEONW_PON_BAA_BV_10) */ function f_GEONW_PON_BAA_BV_10_nodeC() runs on ItsGeoNetworking { // Local variables var LongPosVector v_longPosVectorNodeC := f_getPosition(c_compNodeC); // Preamble f_prNonNeighbour(); f_selfOrClientSyncAndVerdict(c_prDone, e_success); // Test Body f_sendGeoNetMessage( valueof(m_geoNwReq_linkLayerBroadcast( m_geoNwPdu(m_geoNwBroadcastPacket( v_longPosVectorNodeC, 0, f_getGeoBroadcastArea(c_area2) ) ) ) )); tc_ac.start; alt { [] geoNetworkingPort.receive(mw_geoNwInd(mw_geoNwPdu(mw_geoNwBroadcastPacketWithArea( mw_longPosVectorPosition(v_longPosVectorNodeC), ?, f_getGeoBroadcastArea(c_area2) )))) { tc_ac.stop; log("*** " & testcasename() & ": PASS: 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_BAA_BV_10_nodeC /** * @desc Behavior function for NodeD (TC_GEONW_PON_BAA_BV_10) */ function f_GEONW_PON_BAA_BV_10_nodeD() runs on ItsGeoNetworking { // Local variables var LongPosVector v_longPosVectorNodeC := f_getPosition(c_compNodeC); // Preamble f_prNeighbour(); f_selfOrClientSyncAndVerdict(c_prDone, e_success); // Test Body tc_ac.start; alt { [] geoNetworkingPort.receive(mw_geoNwInd(mw_geoNwPdu(mw_geoNwBroadcastPacketWithArea( mw_longPosVectorPosition(v_longPosVectorNodeC), ?, f_getGeoBroadcastArea(c_area2) )))) { tc_ac.stop; log("*** " & testcasename() & ": PASS: 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_BAA_BV_10_nodeD } // end GEONW_PON_BAA_BV_10 group GEONW_PON_BAA_BV_11 { /** * @desc TP Function for TC_GEONW_PON_BAA_BV_11 */ function f_GEONW_PON_BAA_BV_11() runs on ItsMtc { // Local variables var ItsGeoNetworking v_nodeB; var ItsGeoNetworking v_nodeD; // Test control if (not PICS_GN_GBC_FWD) { log("*** " & testcasename() & ": PICS_GN_GBC_FWD required for executing the TC ***"); setverdict(inconc); stop; } if (f_getGeoBroadcastForwardingAlgorithm() != e_advanced) { log("*** " & testcasename() & ": PICS_GN_GEOBROADCAST_FORWARDING_ALGORITHM == e_advanced required for executing the TC ***"); setverdict(inconc); stop; } // if (f_getGeoBroadcastCbfMinTime() < 300) { // log("*** " & testcasename() & ": PICS_GN_GEOBROADCAST_CBF_MIN_TIME >= 300 required for executing the TC ***"); // setverdict(inconc); // stop; // } // Test component configuration f_cf07Up(); // Preamble // Start components v_nodeB := f_getComponent(c_compNodeB); v_nodeD := f_getComponent(c_compNodeD); v_nodeB.start(f_GEONW_PON_BAA_BV_11_nodeB()); v_nodeD.start(f_GEONW_PON_BAA_BV_11_nodeD()); // Synchronization f_serverSync2ClientsAndStop({c_prDone, c_tbDone}); // Cleanup f_cf06Down(); } // end f_GEONW_PON_BAA_BV_11 /** * @desc Behavior function for NodeB (TC_GEONW_PON_BAA_BV_11) */ function f_GEONW_PON_BAA_BV_11_nodeB() runs on ItsGeoNetworking { // Local variables var LongPosVector v_longPosVectorNodeB := f_getPosition(c_compNodeB); // Preamble f_prNeighbour(); f_sendGeoNetMessage(valueof(m_geoNwReq_linkLayerBroadcast( m_geoNwPdu(m_geoNwBroadcastPacket( v_longPosVectorNodeB, 0, f_getGeoBroadcastArea(c_area1) ) ) ))); f_selfOrClientSyncAndVerdict(c_prDone, e_success); // Test Body tc_ac.start; alt { [] geoNetworkingPort.receive(mw_geoNwInd(mw_geoNwPdu(mw_geoNwBroadcastPacketWithArea( mw_longPosVectorPosition(v_longPosVectorNodeB), ?, f_getGeoBroadcastArea(c_area1) )))) { tc_ac.stop; log("*** " & testcasename() & ": PASS: GBC message received ***"); f_selfOrClientSyncAndVerdict(c_tbDone, e_success); } [] tc_ac.timeout { log("*** " & testcasename() & ": FAIL: GBC message not received ***"); f_selfOrClientSyncAndVerdict(c_tbDone, e_error); } } // Postamble f_poNeighbour(); } // end f_GEONW_PON_BAA_BV_11_nodeB /** * @desc Behavior function for NodeD (TC_GEONW_PON_BAA_BV_11) */ function f_GEONW_PON_BAA_BV_11_nodeD() runs on ItsGeoNetworking { // Local variables var LongPosVector v_longPosVectorNodeB := f_getPosition(c_compNodeB); var LongPosVector v_longPosVectorIut := f_getPosition(c_compIut); timer t_toCbf := (int2float(f_getGeoBroadcastCbfMaxTime()) + ( int2float(f_getGeoBroadcastCbfMinTime() - f_getGeoBroadcastCbfMaxTime()) / int2float(f_getCbfMaxCommunicationRange()) ) * f_distance(v_longPosVectorNodeB, v_longPosVectorIut)) * 0.95 / 1000.0; // Preamble f_prNeighbour(); f_selfOrClientSyncAndVerdict(c_prDone, e_success); // Test Body f_sendGeoNetMessage(valueof(m_geoNwReq_linkLayerBroadcast( m_geoNwPdu(m_geoNwBroadcastPacket( v_longPosVectorNodeB, 0, f_getGeoBroadcastArea(c_area1) ) ) ))); t_toCbf.start; tc_ac.start; alt { [] geoNetworkingPort.receive(mw_geoNwInd(mw_geoNwPdu(mw_geoNwBroadcastPacketWithArea( mw_longPosVectorPosition(v_longPosVectorNodeB), ?, f_getGeoBroadcastArea(c_area1) )))) { tc_ac.stop; if(t_toCbf.running) { t_toCbf.stop; log("*** " & testcasename() & ": FAIL: GBC retransmitted before CBF timer expiration ***"); f_selfOrClientSyncAndVerdict(c_tbDone, e_error); } else { log("*** " & testcasename() & ": PASS: GBC message received ***"); f_selfOrClientSyncAndVerdict(c_tbDone, e_success); } } [] t_toCbf.timeout { log("*** " & testcasename() & ": INFO: CBF timer elapsed ***"); repeat; } [] tc_ac.timeout { log("*** " & testcasename() & ": FAIL: GBC message not received ***"); f_selfOrClientSyncAndVerdict(c_tbDone, e_error); } } // Postamble f_poNeighbour(); } // end f_GEONW_PON_BAA_BV_11_nodeD } // end GEONW_PON_BAA_BV_11 } // end geoGeoBroadcastCbfAlgorithm } // end geoProtocolOperation // 6.2.3 Capacities group geoCapacities { // 6.2.3.1 group geoCapLocationService { /** * @desc TP Function for TC_GEONW_CAP_LOS_BV_01 */ function f_GEONW_CAP_LOS_BV_01() runs on ItsGeoNetworking { // Local variables var LongPosVector v_longPosVectorNodeA; var LongPosVector v_longPosVectorNodeB; var LongPosVector v_longPosVectorIut; var GeoNetworkingInd v_msg; var integer v_packetSize := 0; var integer v_index := 0; var integer v_nbrOfPackets := 0; // Test control if (not PICS_GN_LS_REQ_SRC) { log("*** " & testcasename() & ": PICS_GN_LS_REQ_SRC required for executing the TC ***"); setverdict(inconc); stop; } // Test component configuration f_cf01Up(); // Test adapter configuration // Preamble v_longPosVectorNodeA := f_getPosition(c_compNodeA); v_longPosVectorNodeB := f_getPosition(c_compNodeB); v_longPosVectorIut := f_getPosition(c_compIut); f_prNeighbour(); // Trigger message to NodeB in order to get an estimation of packet size if ( not f_utTriggerEvent(m_generateGeoUnicastMessageWithPayload(v_longPosVectorNodeB.gnAddr, char2oct("PAYLOAD_" & oct2str(int2oct(0, 2))))) ) { log("*** " & testcasename() & ": INCONC: Trigger failed ***"); f_selfOrClientSyncAndVerdict(c_prDone, e_timeout); } tc_ac.start; alt { [] geoNetworkingPort.receive( mw_geoNwInd( mw_geoNwPdu( mw_geoNwUnicastPacket( mw_shortPosVectorPosition(f_longPosVector2ShortPosVector(v_longPosVectorNodeB)), ? ) ) ) ) -> value v_msg { var GeoNetworkingReq v_req; tc_ac.stop; //if we use directly v_msg(GeoNetworkingInd) for encvalue the encoder must also be able to provide //encoding of "incoming messages"... v_req.msgOut := v_msg.msgIn; v_packetSize := lengthof(bit2oct(encvalue(v_req.msgOut))); } } // implicitely trigger LS_REQUEST if ( not f_utTriggerEvent(m_generateGeoUnicastMessage(v_longPosVectorNodeA.gnAddr)) ) { log("*** " & testcasename() & ": INCONC: Trigger failed ***"); f_selfOrClientSyncAndVerdict(c_prDone, e_timeout); } tc_ac.start; alt { [] a_receiveLsRequest( ?, v_longPosVectorNodeA.gnAddr.mid, v_longPosVectorIut ) { } } f_selfOrClientSyncAndVerdict(c_prDone, e_success); // Test Body // Fill the LS buffer + one more message to remove an older message v_nbrOfPackets := f_getLsPacketBufferSize() / v_packetSize + 1; log("*** " & testcasename() & ": " & int2str(v_nbrOfPackets) & " ***"); for (v_index:=1; v_index <= v_nbrOfPackets; v_index:=v_index+1) { if ( not f_utTriggerEvent(m_generateGeoUnicastMessageWithPayload(v_longPosVectorNodeA.gnAddr, char2oct("PAYLOAD_" & oct2str(int2oct(v_index, 2))))) ) { log("*** " & testcasename() & ": INCONC: Trigger failed ***"); f_selfOrClientSyncAndVerdict(c_tbDone, e_timeout); } } f_sleepIgnoreDef(0.5); f_sendGeoNetMessage( valueof(m_geoNwReq_linkLayerBroadcast( m_geoNwPdu( m_geoNwLsReplyPacket( v_longPosVectorNodeB, f_longPosVector2ShortPosVector(v_longPosVectorIut), vc_localSeqNumber ) ) ) )); // packet 1 shall be dropped v_index := 2; tc_ac.start; alt { [] geoNetworkingPort.receive( f_receiveGeoNetMessageWithPayload( mw_geoNwInd( mw_geoNwPdu( mw_geoNwUnicastPacket( mw_shortPosVectorPosition(f_longPosVector2ShortPosVector(v_longPosVectorNodeA)), ? ) ) ), char2oct("PAYLOAD_" & oct2str(int2oct(v_index, 2))) ) ) { if (v_index < v_nbrOfPackets) { v_index := v_index + 1; repeat; } tc_ac.stop; log("*** " & testcasename() & ": Older message was removed, new message was inserted ***"); f_selfOrClientSyncAndVerdict(c_tbDone, e_success); } [] tc_ac.timeout { log("*** " & testcasename() & ": Expected amount of messages were not received ***"); f_selfOrClientSyncAndVerdict(c_tbDone, e_error); } } // Postamble f_poNeighbour(); f_cf01Down(); } // end f_GEONW_CAP_LOS_BV_01 } // end geoCapLocationService // 6.2.3.2 group geoCapForwardingPacketBuffer { group GEONW_CAP_FPB_BV_01 { /** * @desc TP Function for TC_GEONW_CAP_LOS_BV_01 */ function f_GEONW_CAP_FPB_BV_01() runs on ItsMtc { // Local variables var ItsGeoNetworking v_nodeB; var ItsGeoNetworking v_nodeC; var template (value) GeoNetworkingPdu v_geoNetworkingMsg; var integer v_packetSize := 0; var integer v_nbrOfPackets := 0; var integer v_payloadSize := f_min(1400, f_getUcForwardingPacketBufferSize() / 10 ); var octetstring v_payload; const integer c_nbrOfDiscardedMessages := 1; var UInt16 v_sequenceNumberC := f_getInitialSequenceNumber(); // Test control if (not PICS_GN_GUC_FWD) { log("*** " & testcasename() & ": PICS_GN_GUC_FWD required for executing the TC ***"); setverdict(inconc); stop; } // Test component configuration f_cf03Up(); // Preamble // Prepare GUC message v_payload := int2oct(0, v_payloadSize); v_geoNetworkingMsg := m_geoNwPdu( m_geoNwUnicastPacket( m_dummyLongPosVector, f_longPosVector2ShortPosVector(valueof(m_dummyLongPosVector)), 0) ); v_geoNetworkingMsg.gnPacket.packet.payload := valueof(v_payload); v_packetSize := lengthof(bit2oct(encvalue(v_geoNetworkingMsg))); // Fill the UC forwarding buffer + c_nbrOfDiscardedMessages more message to remove older messages v_nbrOfPackets := f_getUcForwardingPacketBufferSize() / v_packetSize + c_nbrOfDiscardedMessages + 1; log("*** " & testcasename() & ": " & int2str(v_nbrOfPackets) & " ***"); // Start components v_nodeB := f_getComponent(c_compNodeB); v_nodeC := f_getComponent(c_compNodeC); v_nodeB.start(f_GEONW_CAP_FPB_BV_01_nodeB(v_sequenceNumberC, v_nbrOfPackets, c_nbrOfDiscardedMessages)); v_nodeC.start(f_GEONW_CAP_FPB_BV_01_nodeC(v_sequenceNumberC, v_nbrOfPackets, v_geoNetworkingMsg)); // Synchronization f_serverSync2ClientsAndStop({c_prDone, c_tbDone}); // Cleanup f_cf03Down(); } // end f_GEONW_CAP_FPB_BV_01 /** * @desc Behavior function for NodeB (TC_GEONW_CAP_FPB_BV_01) * @param p_sequenceNumberC Initial sequence number of NodeC * @param p_nbrOfPackets Number of packets sent by other component * @param p_nbrOfDiscardedMessages Number of packets that should be discarded */ function f_GEONW_CAP_FPB_BV_01_nodeB( in UInt16 p_sequenceNumberC, in integer p_nbrOfPackets, in integer p_nbrOfDiscardedMessages ) runs on ItsGeoNetworking { // Local variables var LongPosVector v_longPosVectorNodeA := f_getPosition(c_compNodeA); var UInt16 v_expectedSeqNumber := p_sequenceNumberC + p_nbrOfDiscardedMessages + 1; var integer v_nbReceivedMessages := 0; // Preamble f_prDefault(); // NodeB is not yet a neighbour f_selfOrClientSyncAndVerdict(c_prDone, e_success); // Test Body f_startBeingNeighbour(); tc_ac.start; alt { [] geoNetworkingPort.receive( mw_geoNwInd( mw_geoNwPdu( mw_geoNwUnicastPacket( mw_shortPosVectorPosition(f_longPosVector2ShortPosVector(v_longPosVectorNodeA)), v_expectedSeqNumber ) ) ) ) { v_nbReceivedMessages := v_nbReceivedMessages + 1; v_expectedSeqNumber := v_expectedSeqNumber + 1; repeat; // repeat in any case => IUT may send more messages ! } [] geoNetworkingPort.receive( mw_geoNwInd( mw_geoNwPdu( mw_geoNwUnicastPacket( mw_shortPosVectorPosition(f_longPosVector2ShortPosVector(v_longPosVectorNodeA)), ? ) ) ) ) { tc_ac.stop; log("*** " & testcasename() & ": FAIL: Unexpected message received (Bad sequence number) ***"); f_selfOrClientSyncAndVerdict(c_tbDone, e_error); } [] tc_ac.timeout { if(v_nbReceivedMessages == (p_nbrOfPackets - p_nbrOfDiscardedMessages)) { log("*** " & testcasename() & ": PASS: Older messages wer removed, new messages were inserted ***"); f_selfOrClientSyncAndVerdict(c_tbDone, e_success); } else { log("*** " & testcasename() & ": FAIL: Expected amount of messages were not received ***"); f_selfOrClientSyncAndVerdict(c_tbDone, e_error); } } } // Postamble f_poNeighbour(); } // end f_GEONW_CAP_FPB_BV_01_nodeB /** * @desc Behavior function for NodeC (TC_GEONW_CAP_FPB_BV_01) * @param p_sequenceNumberC Initial sequence number of NodeC * @param p_nbrOfPackets Number of packets to be send * @param p_geoNetworkingMsg Pdu to be sent (template) */ function f_GEONW_CAP_FPB_BV_01_nodeC( in UInt16 p_sequenceNumberC, in integer p_nbrOfPackets, in template (value) GeoNetworkingPdu p_geoNetworkingMsg ) runs on ItsGeoNetworking { // Local variables var LongPosVector v_longPosVectorNodeA := f_getPosition(c_compNodeA); var LongPosVector v_longPosVectorNodeC := f_getPosition(c_compNodeC); var integer i := 0; // Preamble f_prNeighbour(); vc_localSeqNumber := p_sequenceNumberC; p_geoNetworkingMsg.gnPacket.packet.extendedHeader.geoUnicastHeader.srcPosVector := v_longPosVectorNodeC; p_geoNetworkingMsg.gnPacket.packet.extendedHeader.geoUnicastHeader.dstPosVector := f_longPosVector2ShortPosVector(v_longPosVectorNodeA); for (i:=0; i < p_nbrOfPackets; i:=i+1) { p_geoNetworkingMsg.gnPacket.packet.extendedHeader.geoUnicastHeader.seqNumber := vc_localSeqNumber; f_sendGeoNetMessage(valueof(m_geoNwReq_linkLayerBroadcast(p_geoNetworkingMsg))); } f_selfOrClientSyncAndVerdict(c_prDone, e_success); // Test Body f_selfOrClientSyncAndVerdict(c_tbDone, e_success); // Postamble f_poNeighbour(); } // end f_GEONW_CAP_FPB_BV_01_nodeC } // end GEONW_CAP_FPB_BV_01 group GEONW_CAP_FPB_BV_02 { /** * @desc TP Function for TC_GEONW_CAP_FPB_BV_02 */ function f_GEONW_CAP_FPB_BV_02() runs on ItsMtc { // Local variables var ItsGeoNetworking v_nodeB; var ItsGeoNetworking v_nodeC; var template (value) GeoNetworkingPdu v_geoNetworkingMsg; var integer v_packetSize := 0; var integer v_nbrOfPackets := 0; const integer c_nbrOfDiscardedMessages := 1; var UInt16 v_sequenceNumberC := f_getInitialSequenceNumber(); const octetstring c_defaultPayload := char2oct("DEFAULT_PAYLOAD"); const integer c_itsGnMaxSduSize := 1398; var octetstring v_payload := c_defaultPayload; // Test control if (not PICS_GN_GBC_FWD) { log("*** " & testcasename() & ": PICS_GN_GBC_FWD required for executing the TC ***"); setverdict(inconc); stop; } // Test component configuration f_cf03Up(); // Preamble // Prepare GBC message v_geoNetworkingMsg := m_geoNwPdu(m_geoNwBroadcastPacket( m_dummyLongPosVector, 0, m_dummyGeoBroadcastArea)); while (lengthof(v_payload) < (c_itsGnMaxSduSize- lengthof(c_defaultPayload))) { v_payload := v_payload & c_defaultPayload; } v_geoNetworkingMsg.gnPacket.packet.payload := valueof(v_payload); v_packetSize := lengthof(bit2oct(encvalue(v_geoNetworkingMsg))); // Fill the BC forwarding buffer + c_nbrOfDiscardedMessages more message to remove older messages v_nbrOfPackets := f_getBcForwardingPacketBufferSize() / v_packetSize + c_nbrOfDiscardedMessages; // Start components v_nodeB := f_getComponent(c_compNodeB); v_nodeC := f_getComponent(c_compNodeC); v_nodeB.start(f_GEONW_CAP_FPB_BV_02_nodeB(v_sequenceNumberC, v_nbrOfPackets, c_nbrOfDiscardedMessages)); v_nodeC.start(f_GEONW_CAP_FPB_BV_02_nodeC(v_sequenceNumberC, v_nbrOfPackets, v_geoNetworkingMsg)); // Synchronization f_serverSync2ClientsAndStop({c_prDone, c_tbDone}); // Cleanup f_cf03Down(); } // end f_GEONW_CAP_FPB_BV_02 /** * @desc Behavior function for NodeB (TC_GEONW_CAP_FPB_BV_02) * @param p_sequenceNumberC Initial sequence number of NodeC * @param p_nbrOfPackets Number of packets sent by other component * @param p_nbrOfDiscardedMessages Number of packets that should be discarded */ function f_GEONW_CAP_FPB_BV_02_nodeB( in UInt16 p_sequenceNumberC, in integer p_nbrOfPackets, in integer p_nbrOfDiscardedMessages ) runs on ItsGeoNetworking { // Local variables var LongPosVector v_longPosVectorIut := f_getPosition(c_compIut); var LongPosVector v_longPosVectorNodeC := f_getPosition(c_compNodeC); var UInt16 v_expectedSeqNumber := p_sequenceNumberC + p_nbrOfDiscardedMessages; var integer v_nbReceivedMessages := 0; // Preamble f_prDefault(); // NodeB is not yet a neighbour f_selfOrClientSyncAndVerdict(c_prDone, e_success); // Test Body f_startBeingNeighbour(); tc_ac.start; alt { [] a_receiveGeoBroadcast( mw_longPosVectorPosition(v_longPosVectorNodeC), v_expectedSeqNumber ) { v_nbReceivedMessages := v_nbReceivedMessages + 1; v_expectedSeqNumber := v_expectedSeqNumber + 1; repeat; // repeat in any case => IUT may send more messages ! } [] a_receiveGeoBroadcast( mw_longPosVectorPosition(v_longPosVectorNodeC), ? ) { tc_ac.stop; log("*** " & testcasename() & ": FAIL: Unexpected message received (Bad sequence number) ***"); f_selfOrClientSyncAndVerdict(c_tbDone, e_error); } [] tc_ac.timeout { if(v_nbReceivedMessages == (p_nbrOfPackets - p_nbrOfDiscardedMessages)) { log("*** " & testcasename() & ": PASS: Older messages wer removed, new messages were inserted ***"); f_selfOrClientSyncAndVerdict(c_tbDone, e_success); } else { log("*** " & testcasename() & ": FAIL: Expected amount of messages were not received ***"); f_selfOrClientSyncAndVerdict(c_tbDone, e_error); } } } // Postamble f_poNeighbour(); } // end f_GEONW_CAP_FPB_BV_02_nodeB /** * @desc Behavior function for NodeC (TC_GEONW_CAP_FPB_BV_02) * @param p_sequenceNumberC Initial sequence number of NodeC * @param p_nbrOfPackets Number of packets to be send * @param p_geoNetworkingMsg Pdu to be sent (template) */ function f_GEONW_CAP_FPB_BV_02_nodeC( in UInt16 p_sequenceNumberC, in integer p_nbrOfPackets, in template (value) GeoNetworkingPdu p_geoNetworkingMsg ) runs on ItsGeoNetworking { // Local variables var LongPosVector v_longPosVectorNodeC := f_getPosition(c_compNodeC); var integer i := 0; var GnRawPayload v_payload := valueof(p_geoNetworkingMsg.gnPacket.packet.payload); //save the given payload // Preamble f_prNeighbour(); vc_localSeqNumber := p_sequenceNumberC; p_geoNetworkingMsg.gnPacket.packet := m_geoNwBroadcastPacket( v_longPosVectorNodeC, 0, f_getGeoBroadcastArea(c_area2) ); p_geoNetworkingMsg.gnPacket.packet.payload := v_payload; //set back the original given payload for (i:=0; i < p_nbrOfPackets; i:=i+1) { p_geoNetworkingMsg.gnPacket.packet.extendedHeader.geoBroadcastHeader.seqNumber := vc_localSeqNumber; f_sendGeoNetMessage(valueof(m_geoNwReq_linkLayerBroadcast(p_geoNetworkingMsg))); } f_selfOrClientSyncAndVerdict(c_prDone, e_success); // Test Body f_selfOrClientSyncAndVerdict(c_tbDone, e_success); // Postamble f_poNeighbour(); } // end f_GEONW_CAP_FPB_BV_02_nodeC } // end GEONW_CAP_FPB_BV_02 } // end geoCapForwardingPacketBuffer } // end geoCapacities } // end ItsGeoNetworking_TpFunctions