/** * @author ETSI / STF405 * @version $URL: svn+ssh://vcs.etsi.org/TTCN3/LIB/LibIts/trunk/ttcn/GeoNetworking/LibItsGeoNetworking_Functions.ttcn $ * $Id: LibItsGeoNetworking_Functions.ttcn 168 2010-09-22 15:18:22Z berge $ * @desc Module containing functions for Ipv6OverGeoNetworking * */ module LibItsIpv6OverGeoNetworking_Functions { // Libcommon import from LibCommon_BasicTypesAndValues all; import from LibCommon_DataStrings all; import from LibCommon_VerdictControl all; // LibIts import from LibIts_TestSystem all; import from LibIts_Interface all; import from LibItsGeoNetworking_TypesAndValues all; import from LibItsGeoNetworking_Functions all; import from LibItsGeoNetworking_Templates all; import from LibItsIpv6OverGeoNetworking_TypesAndValues all; import from LibItsIpv6OverGeoNetworking_Templates all; group ipv6OverGeoConfigurationFunctions { /** * @desc This configuration features: * - one ITS node (IUT) * - two ITS nodes (nodeA, nodeB) * - Area1 which only includes NodeB and IUT * - Area2 which only includes NodeB * NodeB being close to the area center */ function f_ipv6_cf01Up() runs on ItsNt { // Variables // Map map(self:ipv6OverGeoNetworkingPort, system:ipv6OverGeoNetworkingPort); f_cf01Up(); f_addAddresses(vc_addressTable, c_compIut); f_addAddresses(vc_addressTable, c_compNodeA); f_addAddresses(vc_addressTable, c_compNodeB); } // end f_cf01Up /** * @desc Deletes configuration cf01 */ function f_ipv6_cf01Down() runs on ItsNt { // Map unmap(self:ipv6OverGeoNetworkingPort, system:ipv6OverGeoNetworkingPort); f_cf01Down(); } // end f_cf01Down } // end group ipv6OverGeoConfigurationFunctions group testAdapter { function f_taUpdateInterfaces() { //TODO } } // end group testAdapter group sendFunctions { function f_sendGeoBroadcastWithRtAdv( in template (value) GvlTableEntry p_gvl, in charstring p_compName ) runs on ItsNt { var AddressTableEntry v_nodeAddresses := f_getAddresses(p_compName); var LongPosVector v_nodeLongPosVector := f_getPosition(p_compName); f_sendGeoNetMessage( m_geoNwReq( m_geoNwPduWithPayload( m_geoBroadcastHeader( v_nodeLongPosVector, v_nodeLongPosVector, vc_localSeqNumber, f_getGeoBroadcastArea(valueof(p_gvl.area)) ), m_ipv6Payload( m_ipv6Packet( v_nodeAddresses.lla, c_allNodesMca, c_icmpHdr, m_rtAdvWithOptions( m_rtAdvOpt_prefixOpt( p_gvl.prefixLength, c_lFlag1, c_aFlag1, c_validLifetime30s, c_preferredLifetime30s, p_gvl.prefix ) ) ) ) ) ) ); } } //end group sendFunctions group miscellaneous { /** * @desc Gets the Geographical Virtual link entry associated to an area * @param p_areaIndex The index of the area */ function f_getGVL(in integer p_areaIndex) runs on ItsNt return GvlTableEntry { return valueof(vc_gvlTable[p_areaIndex]); } // end f_getGVL function f_getGvlInterface(in integer p_areaIndex) runs on ItsNt return charstring { return f_getGVL(p_areaIndex).interface } // end f_getGvlInterface function f_getTVL() runs on ItsNt return GvlTableEntry { return valueof(vc_gvlTable[0]); // FIXME !!! } // end f_getTVL /** * @desc Retrieves the MAC address from the GN address. * @param p_gnAddr The GN address * @return The MAC address */ function f_gnAddr2MacAddr(in GN_Address p_gnAddr) return MacAddress { return p_gnAddr.mid; } // end f_gnAddr2MacAddr /** * @desc Retrieves the GN address from the MAC address. * @param p_macAddr The MAC address * @return The GN address */ function f_macAddr2GnAddr(in MacAddress p_macAddr) return GN_Address { var GN_Address v_gnAddr := valueof(m_dummyGnAddr); v_gnAddr.mid := p_macAddr; return v_gnAddr; } // end f_macAddr2GnAddr /** * @desc Compute an Unique Interface ID based on a MAC Address * @param p_macAddr MAC Address * @return Unique interface ID */ function f_createUniqueInterfaceId ( in Oct6 p_macAddr ) return Oct8 { var UInt8 i; var Oct3 v_leftPartMac := int2oct(0,3); var Oct3 v_rightPartMac := int2oct(0,3); var Bit24 v_leftPartBits := int2bit(0,24); var Bit24 v_leftPartBitMask := oct2bit('020000'O); //get leftPart for (i:=0; i 64) { log("**** f_computeGlobalAddress: Wrong prefixLen ****"); return '00000000000000000000000000000000'O; } else { //Fill v_prefixReady with existing Prefix for (i:=0; i63 and p_trafficClass<128) { v_trafficClass.reliability := e_low; v_trafficClass.latency := e_medium } else if (p_trafficClass>127 and p_trafficClass<193) { v_trafficClass.reliability := e_low; v_trafficClass.latency := e_low } else { v_trafficClass.reliability := e_low; v_trafficClass.latency := e_veryLow } return v_trafficClass; } // end f_getTrafficClassFromPriority } // end group miscellaneous } // end LibItsIpv6OverGeoNetworking_Functions