Loading ttcn3/EtsiLibrary/LibIpv6/LibCommonRfcs/LibIpv6_Interface_Functions.ttcn +67 −60 Original line number Diff line number Diff line Loading @@ -109,12 +109,16 @@ group rfc2460Root_Functions { p_dstAddr := p_extHdrList[i].tunneledIpv6.destinationAddress; } /* else if (ischosen(p_extHdrList[i].)) { f_setSecurityHdr(); } */ else if (ischosen(p_extHdrList[i].espHeader)) { v_ret := f_setEspHeader(p_ipv6Packet, p_extHdrList[i].espHeader); } }//end for return v_ret; }//end f_setExtensionHeaders }//end group extHdrFns Loading Loading @@ -704,68 +708,71 @@ group rfc4303Esp_ExtHdrFunctions { return v_key; }//end f_createSecretKey // function f_buildEspExtHdr( // in Sa p_sa, // in PlaintextData p_plaintextData, // out ExtensionHeader p_extensionHeader) // runs on LibIpv6Node // return FncRetCode { // // Variables // var EncryptResult v_encryptResult; /// var IntegrityResult v_integrityResult; // var FncRetCode v_ret := e_error; // var octetstring v_padding := c_1ZeroByte; //TODO check this /* // Encrypt espPayloadData v_ret := fx_encrypt( p_sa.ipSecProtocolMode, p_sa.espEncryptionAlgo, p_sa.espEncryptionKey, p_plaintextData, v_encryptResult); if ( v_ret != e_success ) {return v_ret;} // Fill EspExtHdr var EspHeader v_espHdr := valueof(m_espHdr_dummy); // Header v_espHdr.securityParametersIndex := p_sa.securityParametersIndex; v_espHdr.sequenceNumber := p_sa.sequenceNumber; // Payload if (ispresent(v_encryptResult.iv)) { v_espHdr.iv := v_encryptResult.iv; } // Encrypted payload is assigend for integrity calculation. // Afterwards plaintext will be assigned v_espHdr.espPayloadData.ciphertextData := v_encryptResult.ciphertextData; if (ispresent(v_encryptResult.tfcPadding)) { v_espHdr.tfcPadding := v_encryptResult.tfcPadding; } // Byte Align v_ret := fx_byteAlignEspHeader(4, v_espHdr, v_padding); if ( v_ret != e_success ) {return v_ret;} if (v_padding != c_1ZeroByte) { v_espHdr.padding := v_padding; v_espHdr.padLength := lengthof(v_padding); } // Integrity v_ret := fx_macEspHdr( p_sa.espIntegrityAlgo, p_sa.espIntegrityKey, v_espHdr, v_integrityResult); if ( v_ret != e_success ) {return v_ret;} if (ispresent(v_integrityResult.icv)) { v_espHdr.icv := v_integrityResult.icv; } // Assign Plaintext EspPayload v_espHdr.espPayloadData.plaintextData := p_plaintextData; p_extensionHeader := {espHeader := v_espHdr}; * @desc This goes through the Mip header and calculates length, checksum * and other specific functions of the different messages. * This function is used when sending messages. * @param p_msg ExtensionHeaderList to be treated * @return execution status */ // return e_success; function f_setEspHeader( in Ipv6Packet p_ipv6Packet, /*in*/inout EspHeader p_espHeader) runs on LibIpv6Node return FncRetCode { var Ipv6Header v_originalIpv6Hdr; var EchoRequest v_originalEchoRequest; var EchoReply v_originalEchoReply; if (ispresent(p_espHeader.espPayload.espIpDatagram.ipv6Payload)) { if (ischosen(p_espHeader.espPayload.espIpDatagram.ipv6Payload.echoRequestMsg)) { if (ischosen(p_espHeader.espPayload.espIpDatagram.extHdrList[0].tunneledIpv6)) {//tunnelMode v_originalIpv6Hdr := p_espHeader.espPayload.espIpDatagram.extHdrList[0].tunneledIpv6; } else { //transportMode v_originalIpv6Hdr := p_ipv6Packet.ipv6Hdr; } //build original packet v_originalEchoRequest := { ipv6Hdr := v_originalIpv6Hdr, extHdrList := omit, ipv6Payload := p_espHeader.espPayload.espIpDatagram.ipv6Payload } //calc checksum if (v_originalEchoRequest.ipv6Payload.echoRequestMsg.checksum != c_2ZeroBytes) { //calc checksum v_originalEchoRequest.ipv6Payload.echoRequestMsg.checksum := fx_icmpv6Checksum(v_originalEchoRequest); } //assign checksum p_espHeader.espPayload.espIpDatagram.ipv6Payload.echoRequestMsg.checksum := v_originalEchoRequest.ipv6Payload.echoRequestMsg.checksum; } else if (ischosen(p_espHeader.espPayload.espIpDatagram.ipv6Payload.echoReplyMsg)) { if (ischosen(p_espHeader.espPayload.espIpDatagram.extHdrList[0].tunneledIpv6)) {//tunnelMode v_originalIpv6Hdr := p_espHeader.espPayload.espIpDatagram.extHdrList[0].tunneledIpv6; } else { //transportMode v_originalIpv6Hdr := p_ipv6Packet.ipv6Hdr; } //build original packet v_originalEchoReply := { ipv6Hdr := v_originalIpv6Hdr, extHdrList := omit, ipv6Payload := p_espHeader.espPayload.espIpDatagram.ipv6Payload } //calc checksum if (v_originalEchoReply.ipv6Payload.echoReplyMsg.checksum != c_2ZeroBytes) { //calc checksum v_originalEchoReply.ipv6Payload.echoReplyMsg.checksum := fx_icmpv6Checksum(v_originalEchoReply); } //assign checksum p_espHeader.espPayload.espIpDatagram.ipv6Payload.echoReplyMsg.checksum := v_originalEchoReply.ipv6Payload.echoReplyMsg.checksum; } } return e_success; }//end f_setEspHeader // }//end function f_buildEspExtHdr }//end group rfc4303Esp_ExtHdrFunctions Loading ttcn3/EtsiLibrary/LibIpv6/LibCommonRfcs/LibIpv6_Interface_Templates.ttcn +19 −1 Original line number Diff line number Diff line Loading @@ -17,6 +17,7 @@ import from LibIpv6_CommonRfcs_TypesAndValues all; import from LibIpv6_Rfc3775Mipv6_TypesAndValues all; import from LibIpv6_Rfc4068FastHandovers_TypesAndValues all; import from LibIpv6_Rfc2463Icmpv6_TypesAndValues all; group rfc2460Root_Templates { Loading Loading @@ -607,6 +608,23 @@ } //end group ipv6AddressTemplates group ipv6PayloadTemplates { /* * @param p_echoRequestMsg Echo Request Message */ template Ipv6Payload m_ipv6Payload_echoRequestMsg ( in template EchoRequestMsg p_echoRequestMsg ) := { echoRequestMsg := p_echoRequestMsg } }//end group ipv6Templates }//end group rfc2460Root_Templates group rfc3775Mipv6_ExtHdrTemplates { Loading ttcn3/EtsiLibrary/LibIpv6/LibCore/LibIpv6_Rfc2463Icmpv6_Functions.ttcn +36 −0 Original line number Diff line number Diff line Loading @@ -61,6 +61,42 @@ }//end f_sendEchoRequest /* * @desc This sends an ICMPv6 echo request from an IPv6 node to * any NUT. Prior it modifies IPv6 packet payload length * and ICMPv6 checksum to their correct values using external * functions. * @remark The template passed in must NOT contain any matching expressions! * @param p_echoRequest Ipv6 packet value or template with echo request to be sent * @return execution status */ function f_sendEchoRequestWithEsp (in template EchoRequestWithEsp p_echoRequestWithEsp) runs on LibIpv6Node return FncRetCode { var EchoRequestWithEsp v_ipPkt; v_ipPkt := valueof(p_echoRequestWithEsp); if (ispresent(v_ipPkt.extHdrList)) { if(f_setExtensionHeaders( v_ipPkt.extHdrList, v_ipPkt.ipv6Hdr.sourceAddress, v_ipPkt.ipv6Hdr.destinationAddress, v_ipPkt) != e_success) { log(" **** EchoRequestWithEsp: Error when calculating length of extension headers ****"); return e_error; } } //calc payloadLen v_ipPkt.ipv6Hdr.payloadLength := fx_payloadLength (v_ipPkt); //calc checksum //this is done in f_setExtensionHeaders //send ipPort.send(v_ipPkt); return e_success; }//end f_sendEchoRequestWithEsp /* * @desc This sends an ICMPv6 echo request from an IPv6 node to any NUT. * Prior it modifies IPv6 packet payload length and ICMPv6 checksum Loading ttcn3/EtsiLibrary/LibIpv6/LibCore/LibIpv6_Rfc2463Icmpv6_Templates.ttcn +41 −2 Original line number Diff line number Diff line Loading @@ -580,6 +580,45 @@ } // end group ICMPv6_Echo_Request group ICMPv6_Echo_Request_Esp { /* * @param p_nextHeader Next header identifier value to be used. * @param p_src Binary IPv6 address associated with the * test component. * @param p_dst Binary IPv6 address associated with NUT. * @param p_extHdrList List of extension header in the packet. */ template EchoRequestWithEsp m_echoRequest_esp ( UInt8 p_nextHeader, template Ipv6Address p_src, template Ipv6Address p_dst, template ExtensionHeaderList p_extHdrList ) := { ipv6Hdr := m_ipHdr_nextHdr_srcDst(p_nextHeader, p_src, p_dst), extHdrList := p_extHdrList, ipv6Payload := omit } }//end group ICMPv6_Echo_Request_Esp group ICMPv6_EchoRequestMsg { template EchoRequestMsg m_echoRequestMsg ( UInt16 p_id, UInt16 p_seqNr ) := { icmpType:= c_echoRequestMsg, icmpCode:= c_icmpCode0, checksum:= c_2ZeroBytes, identifier:= p_id, sequenceNumber:= p_seqNr, data:= omit } }//end group ICMPv6_EchoRequestPayload group ICMPv6_Other { /* Loading ttcn3/EtsiLibrary/LibIpv6/LibCommonRfcs/LibIpv6_Interface_TypesAndValues.ttcn +1 −1 File changed.Contains only whitespace changes. Show changes Loading
ttcn3/EtsiLibrary/LibIpv6/LibCommonRfcs/LibIpv6_Interface_Functions.ttcn +67 −60 Original line number Diff line number Diff line Loading @@ -109,12 +109,16 @@ group rfc2460Root_Functions { p_dstAddr := p_extHdrList[i].tunneledIpv6.destinationAddress; } /* else if (ischosen(p_extHdrList[i].)) { f_setSecurityHdr(); } */ else if (ischosen(p_extHdrList[i].espHeader)) { v_ret := f_setEspHeader(p_ipv6Packet, p_extHdrList[i].espHeader); } }//end for return v_ret; }//end f_setExtensionHeaders }//end group extHdrFns Loading Loading @@ -704,68 +708,71 @@ group rfc4303Esp_ExtHdrFunctions { return v_key; }//end f_createSecretKey // function f_buildEspExtHdr( // in Sa p_sa, // in PlaintextData p_plaintextData, // out ExtensionHeader p_extensionHeader) // runs on LibIpv6Node // return FncRetCode { // // Variables // var EncryptResult v_encryptResult; /// var IntegrityResult v_integrityResult; // var FncRetCode v_ret := e_error; // var octetstring v_padding := c_1ZeroByte; //TODO check this /* // Encrypt espPayloadData v_ret := fx_encrypt( p_sa.ipSecProtocolMode, p_sa.espEncryptionAlgo, p_sa.espEncryptionKey, p_plaintextData, v_encryptResult); if ( v_ret != e_success ) {return v_ret;} // Fill EspExtHdr var EspHeader v_espHdr := valueof(m_espHdr_dummy); // Header v_espHdr.securityParametersIndex := p_sa.securityParametersIndex; v_espHdr.sequenceNumber := p_sa.sequenceNumber; // Payload if (ispresent(v_encryptResult.iv)) { v_espHdr.iv := v_encryptResult.iv; } // Encrypted payload is assigend for integrity calculation. // Afterwards plaintext will be assigned v_espHdr.espPayloadData.ciphertextData := v_encryptResult.ciphertextData; if (ispresent(v_encryptResult.tfcPadding)) { v_espHdr.tfcPadding := v_encryptResult.tfcPadding; } // Byte Align v_ret := fx_byteAlignEspHeader(4, v_espHdr, v_padding); if ( v_ret != e_success ) {return v_ret;} if (v_padding != c_1ZeroByte) { v_espHdr.padding := v_padding; v_espHdr.padLength := lengthof(v_padding); } // Integrity v_ret := fx_macEspHdr( p_sa.espIntegrityAlgo, p_sa.espIntegrityKey, v_espHdr, v_integrityResult); if ( v_ret != e_success ) {return v_ret;} if (ispresent(v_integrityResult.icv)) { v_espHdr.icv := v_integrityResult.icv; } // Assign Plaintext EspPayload v_espHdr.espPayloadData.plaintextData := p_plaintextData; p_extensionHeader := {espHeader := v_espHdr}; * @desc This goes through the Mip header and calculates length, checksum * and other specific functions of the different messages. * This function is used when sending messages. * @param p_msg ExtensionHeaderList to be treated * @return execution status */ // return e_success; function f_setEspHeader( in Ipv6Packet p_ipv6Packet, /*in*/inout EspHeader p_espHeader) runs on LibIpv6Node return FncRetCode { var Ipv6Header v_originalIpv6Hdr; var EchoRequest v_originalEchoRequest; var EchoReply v_originalEchoReply; if (ispresent(p_espHeader.espPayload.espIpDatagram.ipv6Payload)) { if (ischosen(p_espHeader.espPayload.espIpDatagram.ipv6Payload.echoRequestMsg)) { if (ischosen(p_espHeader.espPayload.espIpDatagram.extHdrList[0].tunneledIpv6)) {//tunnelMode v_originalIpv6Hdr := p_espHeader.espPayload.espIpDatagram.extHdrList[0].tunneledIpv6; } else { //transportMode v_originalIpv6Hdr := p_ipv6Packet.ipv6Hdr; } //build original packet v_originalEchoRequest := { ipv6Hdr := v_originalIpv6Hdr, extHdrList := omit, ipv6Payload := p_espHeader.espPayload.espIpDatagram.ipv6Payload } //calc checksum if (v_originalEchoRequest.ipv6Payload.echoRequestMsg.checksum != c_2ZeroBytes) { //calc checksum v_originalEchoRequest.ipv6Payload.echoRequestMsg.checksum := fx_icmpv6Checksum(v_originalEchoRequest); } //assign checksum p_espHeader.espPayload.espIpDatagram.ipv6Payload.echoRequestMsg.checksum := v_originalEchoRequest.ipv6Payload.echoRequestMsg.checksum; } else if (ischosen(p_espHeader.espPayload.espIpDatagram.ipv6Payload.echoReplyMsg)) { if (ischosen(p_espHeader.espPayload.espIpDatagram.extHdrList[0].tunneledIpv6)) {//tunnelMode v_originalIpv6Hdr := p_espHeader.espPayload.espIpDatagram.extHdrList[0].tunneledIpv6; } else { //transportMode v_originalIpv6Hdr := p_ipv6Packet.ipv6Hdr; } //build original packet v_originalEchoReply := { ipv6Hdr := v_originalIpv6Hdr, extHdrList := omit, ipv6Payload := p_espHeader.espPayload.espIpDatagram.ipv6Payload } //calc checksum if (v_originalEchoReply.ipv6Payload.echoReplyMsg.checksum != c_2ZeroBytes) { //calc checksum v_originalEchoReply.ipv6Payload.echoReplyMsg.checksum := fx_icmpv6Checksum(v_originalEchoReply); } //assign checksum p_espHeader.espPayload.espIpDatagram.ipv6Payload.echoReplyMsg.checksum := v_originalEchoReply.ipv6Payload.echoReplyMsg.checksum; } } return e_success; }//end f_setEspHeader // }//end function f_buildEspExtHdr }//end group rfc4303Esp_ExtHdrFunctions Loading
ttcn3/EtsiLibrary/LibIpv6/LibCommonRfcs/LibIpv6_Interface_Templates.ttcn +19 −1 Original line number Diff line number Diff line Loading @@ -17,6 +17,7 @@ import from LibIpv6_CommonRfcs_TypesAndValues all; import from LibIpv6_Rfc3775Mipv6_TypesAndValues all; import from LibIpv6_Rfc4068FastHandovers_TypesAndValues all; import from LibIpv6_Rfc2463Icmpv6_TypesAndValues all; group rfc2460Root_Templates { Loading Loading @@ -607,6 +608,23 @@ } //end group ipv6AddressTemplates group ipv6PayloadTemplates { /* * @param p_echoRequestMsg Echo Request Message */ template Ipv6Payload m_ipv6Payload_echoRequestMsg ( in template EchoRequestMsg p_echoRequestMsg ) := { echoRequestMsg := p_echoRequestMsg } }//end group ipv6Templates }//end group rfc2460Root_Templates group rfc3775Mipv6_ExtHdrTemplates { Loading
ttcn3/EtsiLibrary/LibIpv6/LibCore/LibIpv6_Rfc2463Icmpv6_Functions.ttcn +36 −0 Original line number Diff line number Diff line Loading @@ -61,6 +61,42 @@ }//end f_sendEchoRequest /* * @desc This sends an ICMPv6 echo request from an IPv6 node to * any NUT. Prior it modifies IPv6 packet payload length * and ICMPv6 checksum to their correct values using external * functions. * @remark The template passed in must NOT contain any matching expressions! * @param p_echoRequest Ipv6 packet value or template with echo request to be sent * @return execution status */ function f_sendEchoRequestWithEsp (in template EchoRequestWithEsp p_echoRequestWithEsp) runs on LibIpv6Node return FncRetCode { var EchoRequestWithEsp v_ipPkt; v_ipPkt := valueof(p_echoRequestWithEsp); if (ispresent(v_ipPkt.extHdrList)) { if(f_setExtensionHeaders( v_ipPkt.extHdrList, v_ipPkt.ipv6Hdr.sourceAddress, v_ipPkt.ipv6Hdr.destinationAddress, v_ipPkt) != e_success) { log(" **** EchoRequestWithEsp: Error when calculating length of extension headers ****"); return e_error; } } //calc payloadLen v_ipPkt.ipv6Hdr.payloadLength := fx_payloadLength (v_ipPkt); //calc checksum //this is done in f_setExtensionHeaders //send ipPort.send(v_ipPkt); return e_success; }//end f_sendEchoRequestWithEsp /* * @desc This sends an ICMPv6 echo request from an IPv6 node to any NUT. * Prior it modifies IPv6 packet payload length and ICMPv6 checksum Loading
ttcn3/EtsiLibrary/LibIpv6/LibCore/LibIpv6_Rfc2463Icmpv6_Templates.ttcn +41 −2 Original line number Diff line number Diff line Loading @@ -580,6 +580,45 @@ } // end group ICMPv6_Echo_Request group ICMPv6_Echo_Request_Esp { /* * @param p_nextHeader Next header identifier value to be used. * @param p_src Binary IPv6 address associated with the * test component. * @param p_dst Binary IPv6 address associated with NUT. * @param p_extHdrList List of extension header in the packet. */ template EchoRequestWithEsp m_echoRequest_esp ( UInt8 p_nextHeader, template Ipv6Address p_src, template Ipv6Address p_dst, template ExtensionHeaderList p_extHdrList ) := { ipv6Hdr := m_ipHdr_nextHdr_srcDst(p_nextHeader, p_src, p_dst), extHdrList := p_extHdrList, ipv6Payload := omit } }//end group ICMPv6_Echo_Request_Esp group ICMPv6_EchoRequestMsg { template EchoRequestMsg m_echoRequestMsg ( UInt16 p_id, UInt16 p_seqNr ) := { icmpType:= c_echoRequestMsg, icmpCode:= c_icmpCode0, checksum:= c_2ZeroBytes, identifier:= p_id, sequenceNumber:= p_seqNr, data:= omit } }//end group ICMPv6_EchoRequestPayload group ICMPv6_Other { /* Loading
ttcn3/EtsiLibrary/LibIpv6/LibCommonRfcs/LibIpv6_Interface_TypesAndValues.ttcn +1 −1 File changed.Contains only whitespace changes. Show changes