/* * @author STF 276 * @version $Id$ * @desc This module specifies functions definitions * based on the IPv6 meta message type. * */ module LibIpv6_Interface_Functions { //LibCommon import from LibCommon_BasicTypesAndValues all; import from LibCommon_DataStrings all; import from LibCommon_VerdictControl { type FncRetCode }; //LibIpv6 import from LibIpv6_Interface_TypesAndValues all; import from LibIpv6_Interface_Templates all; import from LibIpv6_ModuleParameters all; import from LibIpv6_ExternalFunctions all; import from LibIpv6_CommonRfcs_Functions all; import from LibIpv6_CommonRfcs_TypesAndValues all; group rfc2460Root_Functions { group ipv6Packets { /* * @desc This sends a General IPv6 packet * from an IPv6 node to any NUT. * A General IPv6 packet is used in the case where only Extension headers * need to be sent. * @remark Time limit is defined by module parameter PX_TAC (see comp type) * @param p_msg MIPHeader to be sent * @return execution status */ function f_sendGeneralIpv6(template Ipv6Packet p_msg) runs on LibIpv6Node return FncRetCode { //Variables var Ipv6Packet v_ipPkt; v_ipPkt := valueof(p_msg); //set extensionHeaders if (ispresent(v_ipPkt.extHdrList)) { if(f_setExtensionHeaders( v_ipPkt.extHdrList, v_ipPkt.ipv6Hdr.sourceAddress, v_ipPkt.ipv6Hdr.destinationAddress, v_ipPkt) != e_success) { log(" **** f_sendGeneralIpv6: Error when calculating length of extension headers ****"); return e_error; } } //calc payloadLen v_ipPkt.ipv6Hdr.payloadLength := fx_payloadLength (v_ipPkt); //send ipPort.send(v_ipPkt); return e_success; }//end f_sendGeneralIpv6 group extHdrFns { /* * @desc This goes through the extension header list and calculates length, checksum * and other specific functions of the different extension headers * @param p_srcAddr Source Address of IPv6 packet * @param p_dstAddr Dst Address of IPv6 packet * @param p_extHdrList Extension Header List * @return execution status */ function f_setExtensionHeaders( inout ExtensionHeaderList p_extHdrList, in Ipv6Address p_srcAddr, in Ipv6Address p_dstAddr, in Ipv6Packet p_ipv6Packet) runs on LibIpv6Node return FncRetCode { var FncRetCode v_ret := e_success; var UInt8 i; var Ipv6Address v_homeAddress := c_16ZeroBytes; var UInt8 v_nrOfTunnelHdr := 0; for (i:=0; i