Loading ttcn3/EtsiLibrary/LibIpv6/LibCore/LibIpv6_Rfc2460Root_Functions.ttcn +46 −52 Original line number Diff line number Diff line Loading @@ -17,35 +17,11 @@ import from LibIpv6_Interface all; import from LibIpv6_ExternalFunctions all; import from LibIpv6_MultiRfcs_Functions all; import from LibIpv6_MultiRfcs_TypesAndValues all; group ipv6Packets { /* * @desc This sends an IPv6 epacket from an IPv6 node to * any NUT. Prior it modifies IPv6 packet payload length. * @remark The template passed in must NOT contain any matching expressions! * @param p_genIpv6 Ipv6 packet value or template with Ipv6 packet to be sent * @return execution status */ function f_sendIpv6Packet (in template GeneralIpv6 p_genIpv6) runs on LibIpv6Node return FncRetCode { var Ipv6Packet v_ipPkt; v_ipPkt.generalIpv6 := valueof(p_genIpv6); //calc payloadLen v_ipPkt.generalIpv6.ipv6Hdr.payloadLength := fx_payloadLength (v_ipPkt); //send ipPort.send(v_ipPkt.generalIpv6); return e_success; }//end f_sendIpv6Packet } //end group ipv6Packets group extHdrFns { /* * @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 Loading @@ -63,7 +39,7 @@ //calc payloadLen v_ipPkt.generalIpv6.ipv6Hdr.payloadLength := fx_payloadLength (v_ipPkt); //set extensionHeaders if(f_setExtensionHeaders(v_ipPkt.generalIpv6.extHdrList) != e_success) { if(f_setGeneralIpv6ExtensionHeaders(v_ipPkt.generalIpv6) != e_success) { log(" **** f_sendIpv6ExtHdrs: Error whem calculating length of extension headers ****"); return e_error; } Loading @@ -71,31 +47,49 @@ ipPort.send(v_ipPkt.generalIpv6); return e_success; } }//end f_sendGeneralIpv6 /* * @desc This goes through the extension header list and calculates length, checksum * and other specific functions of the different extension headers * @param p_msg ExtensionHeaderList to be treated * @param p_mipPrefixSol GeneralIpv6 * @return execution status */ function f_setExtensionHeaders(inout ExtensionHeaderList p_extHdrList) function f_setGeneralIpv6ExtensionHeaders(inout GeneralIpv6 p_generalIpv6) runs on LibIpv6Node return FncRetCode { var UInt8 i; var Ipv6Address v_homeAddress := c_16ZeroBytes; //select ext hdrs that need special calculation for (i:=0; i<=sizeof(p_extHdrList);i:=i+1) { if (ischosen(p_extHdrList[i].mipHeader)) { f_setMipHeader(p_extHdrList[i].mipHeader); for (i:=0; i<=sizeof(p_generalIpv6.extHdrList);i:=i+1) { if (ischosen(p_generalIpv6.extHdrList[i].mipHeader)) { if (f_isPresentHomeAddressOption(p_generalIpv6.extHdrList, v_homeAddress) == e_success) { f_setMipHeader( v_homeAddress, p_generalIpv6.ipv6Hdr.destinationAddress, p_generalIpv6.extHdrList[i].mipHeader); } else { f_setMipHeader( p_generalIpv6.ipv6Hdr.sourceAddress, p_generalIpv6.ipv6Hdr.destinationAddress, p_generalIpv6.extHdrList[i].mipHeader); } } /* else if (ischosen(p_extHdrList[i].)) { f_setSecurityHdr(); } */ } return e_success; } }//end f_setGeneralIpv6ExtensionHeaders } //end group ipv6Packets group extHdrFns { }//end group extHdrFns Loading ttcn3/EtsiLibrary/LibIpv6/LibMobility/LibIpv6_Rfc3775Mipv6_Functions.ttcn +68 −2 Original line number Diff line number Diff line Loading @@ -55,7 +55,7 @@ module LibIpv6_Rfc3775Mipv6_Functions { v_ipPkt.homeAgentAddressDiscoveryRequest := valueof(p_haAddrDreq); //calc MipHeader length/checksum if present f_setExtensionHeaders(v_ipPkt.homeAgentAddressDiscoveryRequest.extHdrList); f_setHaAddrDreqExtensionHeaders(v_ipPkt.homeAgentAddressDiscoveryRequest); //calc payloadLen v_ipPkt.homeAgentAddressDiscoveryRequest.ipv6Hdr.payloadLength := fx_payloadLength (v_ipPkt); //set checksum to zero Loading @@ -69,6 +69,39 @@ module LibIpv6_Rfc3775Mipv6_Functions { } // end f_sendHaAddrDreq /* * @desc This goes through the extension header list and calculates length, checksum * and other specific functions of the different extension headers * @param p_haAddrDreq HomeAgentAddressDiscoveryRequest * @return execution status */ function f_setHaAddrDreqExtensionHeaders(inout HomeAgentAddressDiscoveryRequest p_haAddrDreq) runs on LibIpv6Node return FncRetCode { var UInt8 i; var Ipv6Address v_homeAddress := c_16ZeroBytes; //select ext hdrs that need special calculation for (i:=0; i<=sizeof(p_haAddrDreq.extHdrList);i:=i+1) { if (ischosen(p_haAddrDreq.extHdrList[i].mipHeader)) { if (f_isPresentHomeAddressOption(p_haAddrDreq.extHdrList, v_homeAddress) == e_success) { f_setMipHeader( v_homeAddress, p_haAddrDreq.ipv6Hdr.destinationAddress, p_haAddrDreq.extHdrList[i].mipHeader); } else { f_setMipHeader( p_haAddrDreq.ipv6Hdr.sourceAddress, p_haAddrDreq.ipv6Hdr.destinationAddress, p_haAddrDreq.extHdrList[i].mipHeader); } } /* else if (ischosen(p_extHdrList[i].)) { f_setSecurityHdr(); } */ } return e_success; }//end f_setHaAddrDreqExtensionHeaders /* * @desc DHAADRequest message is sent, and DHAADResp is expected * The gla of HA is returned via inout variable. Loading Loading @@ -355,7 +388,7 @@ module LibIpv6_Rfc3775Mipv6_Functions { v_ipPkt.mobilePrefixSolicitation := valueof(p_mipPrefixSol); //calc MipHeader length/checksum if present f_setExtensionHeaders(v_ipPkt.mobilePrefixSolicitation.extHdrList); f_setMipPrefixSolExtensionHeaders(v_ipPkt.mobilePrefixSolicitation); //calc payloadLen v_ipPkt.mobilePrefixSolicitation.ipv6Hdr.payloadLength := fx_payloadLength (v_ipPkt); //set checksum to zero Loading @@ -369,6 +402,39 @@ module LibIpv6_Rfc3775Mipv6_Functions { } // end f_sendMipPrefixSol /* * @desc This goes through the extension header list and calculates length, checksum * and other specific functions of the different extension headers * @param p_mipPrefixSol MobilePrefixSolicitation * @return execution status */ function f_setMipPrefixSolExtensionHeaders(inout MobilePrefixSolicitation p_mipPrefixSol) runs on LibIpv6Node return FncRetCode { var UInt8 i; var Ipv6Address v_homeAddress := c_16ZeroBytes; //select ext hdrs that need special calculation for (i:=0; i<=sizeof(p_mipPrefixSol.extHdrList);i:=i+1) { if (ischosen(p_mipPrefixSol.extHdrList[i].mipHeader)) { if (f_isPresentHomeAddressOption(p_mipPrefixSol.extHdrList, v_homeAddress) == e_success) { f_setMipHeader( v_homeAddress, p_mipPrefixSol.ipv6Hdr.destinationAddress, p_mipPrefixSol.extHdrList[i].mipHeader); } else { f_setMipHeader( p_mipPrefixSol.ipv6Hdr.sourceAddress, p_mipPrefixSol.ipv6Hdr.destinationAddress, p_mipPrefixSol.extHdrList[i].mipHeader); } } /* else if (ischosen(p_extHdrList[i].)) { f_setSecurityHdr(); } */ } return e_success; }//end f_setMipPrefixSolExtensionHeaders /* * @desc DHAADReply messages is sent, and DHAADResp is expected * @param p_mnCoaTn Mobile Node Care Of Address of test node Loading ttcn3/EtsiLibrary/LibIpv6/LibMultiRfcs/LibIpv6_ExternalFunctions.ttcn +7 −1 Original line number Diff line number Diff line Loading @@ -38,10 +38,16 @@ return octetstring; /* @desc This external function calculates the checksum for MIPv6 Header. * If HomeAddressOption present, then this external function is called with the * HomeAddress as Source Address * @param p_srcAddr Source Address to be used for Checksum calculation * @param p_dstAddr MipHeader * @param p_mipHeader MipHeader * @return MIPv6 Header checksum */ external function fx_mipHeaderChecksum( in MipHeader p_mipHeader) external function fx_mipHeaderChecksum( in Ipv6Address p_srcAddr, in Ipv6Address p_dstAddr, in MipHeader p_mipHeader) return Oct2; /* @desc This external function calculates the length of MIPv6 Header. Loading ttcn3/EtsiLibrary/LibIpv6/LibMultiRfcs/LibIpv6_MultiRfcs_Functions.ttcn +36 −4 Original line number Diff line number Diff line Loading @@ -80,9 +80,13 @@ * @param p_msg ExtensionHeaderList to be treated * @return execution status */ function f_setMipHeader(inout MipHeader p_mipHeader) function f_setMipHeader(in Ipv6Address p_srcAddr, in Ipv6Address p_dstAddr, inout MipHeader p_mipHeader) runs on LibIpv6Node return FncRetCode { var MipHeader v_mipHeader := valueof(p_mipHeader); var Ipv6Address v_homeAddress := c_16ZeroBytes ; if (ischosen(p_mipHeader.mipMessage.homeTestInit)) { //calc homeNonceIndex TODO Loading @@ -99,11 +103,39 @@ //set mipChecksum to zero p_mipHeader.checksum := c_2ZeroBytes; //calc mipChecksum p_mipHeader.checksum := fx_mipHeaderChecksum(p_mipHeader); p_mipHeader.checksum := fx_mipHeaderChecksum( p_srcAddr, p_dstAddr, p_mipHeader); return e_success; } /* * @desc This goes through the ExtensionHeaderList and * checks if a HomeAddressOption is present. * @param p_extHdrList ExtensionHeaderList to be treated * @param p_homeAddr Home address of HomeAddressOption * @return execution status */ function f_isPresentHomeAddressOption( in ExtensionHeaderList p_extHdrList, inout Ipv6Address p_homeAddr) runs on LibIpv6Node return FncRetCode { var FncRetCode v_ret := e_error; var UInt8 i,j; //select ext hdrs that need special calculation for (i:=0; i<=sizeof(p_extHdrList);i:=i+1) { if (ischosen(p_extHdrList[i].destinationOptionHeader)) { for (j:=0; j<=sizeof(p_extHdrList[i].destinationOptionHeader.destOptionList);j:=j+1) { if (ischosen(p_extHdrList[i].destinationOptionHeader.destOptionList[j].homeAddressOption)) { p_homeAddr := p_extHdrList[i].destinationOptionHeader.destOptionList[j].homeAddressOption.homeAddress; v_ret := e_success; } } } } return v_ret; }//end function f_isPresentHomeAddressOption }//end group mipHdrFns Loading Loading
ttcn3/EtsiLibrary/LibIpv6/LibCore/LibIpv6_Rfc2460Root_Functions.ttcn +46 −52 Original line number Diff line number Diff line Loading @@ -17,35 +17,11 @@ import from LibIpv6_Interface all; import from LibIpv6_ExternalFunctions all; import from LibIpv6_MultiRfcs_Functions all; import from LibIpv6_MultiRfcs_TypesAndValues all; group ipv6Packets { /* * @desc This sends an IPv6 epacket from an IPv6 node to * any NUT. Prior it modifies IPv6 packet payload length. * @remark The template passed in must NOT contain any matching expressions! * @param p_genIpv6 Ipv6 packet value or template with Ipv6 packet to be sent * @return execution status */ function f_sendIpv6Packet (in template GeneralIpv6 p_genIpv6) runs on LibIpv6Node return FncRetCode { var Ipv6Packet v_ipPkt; v_ipPkt.generalIpv6 := valueof(p_genIpv6); //calc payloadLen v_ipPkt.generalIpv6.ipv6Hdr.payloadLength := fx_payloadLength (v_ipPkt); //send ipPort.send(v_ipPkt.generalIpv6); return e_success; }//end f_sendIpv6Packet } //end group ipv6Packets group extHdrFns { /* * @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 Loading @@ -63,7 +39,7 @@ //calc payloadLen v_ipPkt.generalIpv6.ipv6Hdr.payloadLength := fx_payloadLength (v_ipPkt); //set extensionHeaders if(f_setExtensionHeaders(v_ipPkt.generalIpv6.extHdrList) != e_success) { if(f_setGeneralIpv6ExtensionHeaders(v_ipPkt.generalIpv6) != e_success) { log(" **** f_sendIpv6ExtHdrs: Error whem calculating length of extension headers ****"); return e_error; } Loading @@ -71,31 +47,49 @@ ipPort.send(v_ipPkt.generalIpv6); return e_success; } }//end f_sendGeneralIpv6 /* * @desc This goes through the extension header list and calculates length, checksum * and other specific functions of the different extension headers * @param p_msg ExtensionHeaderList to be treated * @param p_mipPrefixSol GeneralIpv6 * @return execution status */ function f_setExtensionHeaders(inout ExtensionHeaderList p_extHdrList) function f_setGeneralIpv6ExtensionHeaders(inout GeneralIpv6 p_generalIpv6) runs on LibIpv6Node return FncRetCode { var UInt8 i; var Ipv6Address v_homeAddress := c_16ZeroBytes; //select ext hdrs that need special calculation for (i:=0; i<=sizeof(p_extHdrList);i:=i+1) { if (ischosen(p_extHdrList[i].mipHeader)) { f_setMipHeader(p_extHdrList[i].mipHeader); for (i:=0; i<=sizeof(p_generalIpv6.extHdrList);i:=i+1) { if (ischosen(p_generalIpv6.extHdrList[i].mipHeader)) { if (f_isPresentHomeAddressOption(p_generalIpv6.extHdrList, v_homeAddress) == e_success) { f_setMipHeader( v_homeAddress, p_generalIpv6.ipv6Hdr.destinationAddress, p_generalIpv6.extHdrList[i].mipHeader); } else { f_setMipHeader( p_generalIpv6.ipv6Hdr.sourceAddress, p_generalIpv6.ipv6Hdr.destinationAddress, p_generalIpv6.extHdrList[i].mipHeader); } } /* else if (ischosen(p_extHdrList[i].)) { f_setSecurityHdr(); } */ } return e_success; } }//end f_setGeneralIpv6ExtensionHeaders } //end group ipv6Packets group extHdrFns { }//end group extHdrFns Loading
ttcn3/EtsiLibrary/LibIpv6/LibMobility/LibIpv6_Rfc3775Mipv6_Functions.ttcn +68 −2 Original line number Diff line number Diff line Loading @@ -55,7 +55,7 @@ module LibIpv6_Rfc3775Mipv6_Functions { v_ipPkt.homeAgentAddressDiscoveryRequest := valueof(p_haAddrDreq); //calc MipHeader length/checksum if present f_setExtensionHeaders(v_ipPkt.homeAgentAddressDiscoveryRequest.extHdrList); f_setHaAddrDreqExtensionHeaders(v_ipPkt.homeAgentAddressDiscoveryRequest); //calc payloadLen v_ipPkt.homeAgentAddressDiscoveryRequest.ipv6Hdr.payloadLength := fx_payloadLength (v_ipPkt); //set checksum to zero Loading @@ -69,6 +69,39 @@ module LibIpv6_Rfc3775Mipv6_Functions { } // end f_sendHaAddrDreq /* * @desc This goes through the extension header list and calculates length, checksum * and other specific functions of the different extension headers * @param p_haAddrDreq HomeAgentAddressDiscoveryRequest * @return execution status */ function f_setHaAddrDreqExtensionHeaders(inout HomeAgentAddressDiscoveryRequest p_haAddrDreq) runs on LibIpv6Node return FncRetCode { var UInt8 i; var Ipv6Address v_homeAddress := c_16ZeroBytes; //select ext hdrs that need special calculation for (i:=0; i<=sizeof(p_haAddrDreq.extHdrList);i:=i+1) { if (ischosen(p_haAddrDreq.extHdrList[i].mipHeader)) { if (f_isPresentHomeAddressOption(p_haAddrDreq.extHdrList, v_homeAddress) == e_success) { f_setMipHeader( v_homeAddress, p_haAddrDreq.ipv6Hdr.destinationAddress, p_haAddrDreq.extHdrList[i].mipHeader); } else { f_setMipHeader( p_haAddrDreq.ipv6Hdr.sourceAddress, p_haAddrDreq.ipv6Hdr.destinationAddress, p_haAddrDreq.extHdrList[i].mipHeader); } } /* else if (ischosen(p_extHdrList[i].)) { f_setSecurityHdr(); } */ } return e_success; }//end f_setHaAddrDreqExtensionHeaders /* * @desc DHAADRequest message is sent, and DHAADResp is expected * The gla of HA is returned via inout variable. Loading Loading @@ -355,7 +388,7 @@ module LibIpv6_Rfc3775Mipv6_Functions { v_ipPkt.mobilePrefixSolicitation := valueof(p_mipPrefixSol); //calc MipHeader length/checksum if present f_setExtensionHeaders(v_ipPkt.mobilePrefixSolicitation.extHdrList); f_setMipPrefixSolExtensionHeaders(v_ipPkt.mobilePrefixSolicitation); //calc payloadLen v_ipPkt.mobilePrefixSolicitation.ipv6Hdr.payloadLength := fx_payloadLength (v_ipPkt); //set checksum to zero Loading @@ -369,6 +402,39 @@ module LibIpv6_Rfc3775Mipv6_Functions { } // end f_sendMipPrefixSol /* * @desc This goes through the extension header list and calculates length, checksum * and other specific functions of the different extension headers * @param p_mipPrefixSol MobilePrefixSolicitation * @return execution status */ function f_setMipPrefixSolExtensionHeaders(inout MobilePrefixSolicitation p_mipPrefixSol) runs on LibIpv6Node return FncRetCode { var UInt8 i; var Ipv6Address v_homeAddress := c_16ZeroBytes; //select ext hdrs that need special calculation for (i:=0; i<=sizeof(p_mipPrefixSol.extHdrList);i:=i+1) { if (ischosen(p_mipPrefixSol.extHdrList[i].mipHeader)) { if (f_isPresentHomeAddressOption(p_mipPrefixSol.extHdrList, v_homeAddress) == e_success) { f_setMipHeader( v_homeAddress, p_mipPrefixSol.ipv6Hdr.destinationAddress, p_mipPrefixSol.extHdrList[i].mipHeader); } else { f_setMipHeader( p_mipPrefixSol.ipv6Hdr.sourceAddress, p_mipPrefixSol.ipv6Hdr.destinationAddress, p_mipPrefixSol.extHdrList[i].mipHeader); } } /* else if (ischosen(p_extHdrList[i].)) { f_setSecurityHdr(); } */ } return e_success; }//end f_setMipPrefixSolExtensionHeaders /* * @desc DHAADReply messages is sent, and DHAADResp is expected * @param p_mnCoaTn Mobile Node Care Of Address of test node Loading
ttcn3/EtsiLibrary/LibIpv6/LibMultiRfcs/LibIpv6_ExternalFunctions.ttcn +7 −1 Original line number Diff line number Diff line Loading @@ -38,10 +38,16 @@ return octetstring; /* @desc This external function calculates the checksum for MIPv6 Header. * If HomeAddressOption present, then this external function is called with the * HomeAddress as Source Address * @param p_srcAddr Source Address to be used for Checksum calculation * @param p_dstAddr MipHeader * @param p_mipHeader MipHeader * @return MIPv6 Header checksum */ external function fx_mipHeaderChecksum( in MipHeader p_mipHeader) external function fx_mipHeaderChecksum( in Ipv6Address p_srcAddr, in Ipv6Address p_dstAddr, in MipHeader p_mipHeader) return Oct2; /* @desc This external function calculates the length of MIPv6 Header. Loading
ttcn3/EtsiLibrary/LibIpv6/LibMultiRfcs/LibIpv6_MultiRfcs_Functions.ttcn +36 −4 Original line number Diff line number Diff line Loading @@ -80,9 +80,13 @@ * @param p_msg ExtensionHeaderList to be treated * @return execution status */ function f_setMipHeader(inout MipHeader p_mipHeader) function f_setMipHeader(in Ipv6Address p_srcAddr, in Ipv6Address p_dstAddr, inout MipHeader p_mipHeader) runs on LibIpv6Node return FncRetCode { var MipHeader v_mipHeader := valueof(p_mipHeader); var Ipv6Address v_homeAddress := c_16ZeroBytes ; if (ischosen(p_mipHeader.mipMessage.homeTestInit)) { //calc homeNonceIndex TODO Loading @@ -99,11 +103,39 @@ //set mipChecksum to zero p_mipHeader.checksum := c_2ZeroBytes; //calc mipChecksum p_mipHeader.checksum := fx_mipHeaderChecksum(p_mipHeader); p_mipHeader.checksum := fx_mipHeaderChecksum( p_srcAddr, p_dstAddr, p_mipHeader); return e_success; } /* * @desc This goes through the ExtensionHeaderList and * checks if a HomeAddressOption is present. * @param p_extHdrList ExtensionHeaderList to be treated * @param p_homeAddr Home address of HomeAddressOption * @return execution status */ function f_isPresentHomeAddressOption( in ExtensionHeaderList p_extHdrList, inout Ipv6Address p_homeAddr) runs on LibIpv6Node return FncRetCode { var FncRetCode v_ret := e_error; var UInt8 i,j; //select ext hdrs that need special calculation for (i:=0; i<=sizeof(p_extHdrList);i:=i+1) { if (ischosen(p_extHdrList[i].destinationOptionHeader)) { for (j:=0; j<=sizeof(p_extHdrList[i].destinationOptionHeader.destOptionList);j:=j+1) { if (ischosen(p_extHdrList[i].destinationOptionHeader.destOptionList[j].homeAddressOption)) { p_homeAddr := p_extHdrList[i].destinationOptionHeader.destOptionList[j].homeAddressOption.homeAddress; v_ret := e_success; } } } } return v_ret; }//end function f_isPresentHomeAddressOption }//end group mipHdrFns Loading