Loading ttcn3/EtsiLibrary/LibIpv6/LibCommonRfcs/LibIpv6_Interface_Functions.ttcn +113 −18 Original line number Diff line number Diff line Loading @@ -78,24 +78,27 @@ group rfc2460Root_Functions { var UInt8 v_nrOfTunnelHdr := 0; var Ipv6Address v_pseudoSrcAddr := c_16ZeroBytes; var Ipv6Address v_pseudoDstAddr := c_16ZeroBytes; var boolean v_loop := true; var Ipv6Packet v_originalIpv6Packet; var Ipv6Packet v_activeIpv6Packet := p_ipv6Packet; for (i:=0; i<sizeof(p_extHdrList);i:=i+1) { for (i:=0; i<sizeof(p_extHdrList) and v_loop ;i:=i+1) { if (ischosen(p_extHdrList[i].mobileHeader)) { if (f_isPresentHomeAddressOption(p_extHdrList, v_homeAddress) == e_success) {//used in all packets that are sent to registered CN v_pseudoSrcAddr := v_homeAddress; v_pseudoDstAddr := p_dstAddr; v_pseudoDstAddr := v_activeIpv6Packet.ipv6Hdr.destinationAddress; } else if (f_isPresentRoutingHeaderType2(p_extHdrList, v_homeAddress) == e_success) { v_pseudoSrcAddr := p_srcAddr; v_pseudoSrcAddr := v_activeIpv6Packet.ipv6Hdr.sourceAddress; v_pseudoDstAddr := v_homeAddress; } else { v_pseudoSrcAddr := p_srcAddr; v_pseudoDstAddr := p_dstAddr; v_pseudoSrcAddr := v_activeIpv6Packet.ipv6Hdr.sourceAddress; v_pseudoDstAddr := v_activeIpv6Packet.ipv6Hdr.destinationAddress; } v_ret := f_setMobileHeader( p_srcAddr, p_dstAddr, v_ret := f_setMobileHeader( v_activeIpv6Packet.ipv6Hdr.sourceAddress, v_activeIpv6Packet.ipv6Hdr.destinationAddress, v_pseudoSrcAddr, v_pseudoDstAddr, p_extHdrList[i].mobileHeader); Loading @@ -105,24 +108,65 @@ group rfc2460Root_Functions { p_extHdrList[i].tunneledIpv6.payloadLength := fx_tunnelledPayloadLength(p_ipv6Packet, v_nrOfTunnelHdr); // Tunneled header is the active packet p_srcAddr := p_extHdrList[i].tunneledIpv6.sourceAddress; p_dstAddr := p_extHdrList[i].tunneledIpv6.destinationAddress; //p_srcAddr := p_extHdrList[i].tunneledIpv6.sourceAddress; //p_dstAddr := p_extHdrList[i].tunneledIpv6.destinationAddress; v_activeIpv6Packet.ipv6Hdr.sourceAddress := p_extHdrList[i].tunneledIpv6.sourceAddress; v_activeIpv6Packet.ipv6Hdr.destinationAddress := p_extHdrList[i].tunneledIpv6.destinationAddress; } else if (ischosen(p_extHdrList[i].espHeader)) { v_ret := f_setEspHeader(p_ipv6Packet, p_extHdrList[i].espHeader); v_ret := f_getOriginalIpv6Packet( v_activeIpv6Packet, p_extHdrList[i].espHeader, v_originalIpv6Packet); if (v_ret == e_success) { if (ispresent(v_originalIpv6Packet.extHdrList)) { p_extHdrList := v_originalIpv6Packet.extHdrList; } p_srcAddr := v_originalIpv6Packet.ipv6Hdr.sourceAddress; p_dstAddr := v_originalIpv6Packet.ipv6Hdr.destinationAddress; v_activeIpv6Packet := v_originalIpv6Packet; f_setExtensionHeaders( p_extHdrList, p_srcAddr, p_dstAddr, v_activeIpv6Packet); v_loop := false; } } }//end for if (ispresent(v_activeIpv6Packet.ipv6Payload)) { v_ret := f_calcIpv6PayloadChecksum(v_activeIpv6Packet); } return v_ret; }//end f_setExtensionHeaders }//end group extHdrFns function f_calcIpv6PayloadChecksum( inout Ipv6Packet p_ipv6Packet) return FncRetCode { if(ischosen(p_ipv6Packet.ipv6Payload.echoReplyMsg)) { if(p_ipv6Packet.ipv6Payload.echoReplyMsg.checksum != c_2ZeroBytes) { //calc checksum p_ipv6Packet.ipv6Payload.echoReplyMsg.checksum := fx_icmpv6Checksum(p_ipv6Packet); } } else if(ischosen(p_ipv6Packet.ipv6Payload.echoRequestMsg)) { if(p_ipv6Packet.ipv6Payload.echoRequestMsg.checksum != c_2ZeroBytes) { //calc checksum p_ipv6Packet.ipv6Payload.echoRequestMsg.checksum := fx_icmpv6Checksum(p_ipv6Packet); } } return e_success; }//end f_calcIpv6PayloadChecksum } //end group ipv6Packets Loading Loading @@ -708,22 +752,73 @@ group rfc4303Esp_ExtHdrFunctions { return v_key; }//end f_createSecretKey /* * @desc * This function is used when sending messages. * @param p_msg ExtensionHeaderList to be treated * @return execution status */ function f_getOriginalIpv6Packet( in Ipv6Packet p_ipv6Packet, in EspHeader p_espHeader, out Ipv6Packet p_originalIpv6Packet) runs on LibIpv6Node return FncRetCode { var UInt8 i; var boolean v_loop := true; if (not(ispresent(p_espHeader.espPayload.espIpDatagram.extHdrList)) and not(ispresent(p_espHeader.espPayload.espIpDatagram.ipv6Payload))) { log("**** f_setEspHeader: EspHeader.espPayload.espIpDatagram received that does neither contain extHdrList not ipv6Payload => EspHeader is not constructed correctly ****") return e_error; } //Build original packet p_originalIpv6Packet.ipv6Hdr := p_ipv6Packet.ipv6Hdr; if (ispresent(p_espHeader.espPayload.espIpDatagram.extHdrList)) { p_originalIpv6Packet.extHdrList := p_espHeader.espPayload.espIpDatagram.extHdrList; } if (ispresent(p_espHeader.espPayload.espIpDatagram.ipv6Payload)) { p_originalIpv6Packet.ipv6Payload := p_espHeader.espPayload.espIpDatagram.ipv6Payload; } // is a tunneledIpv6Hdr in the extHdrList? If yes, then it becomes the Ipv6Hdr of the original packet if (ispresent(p_espHeader.espPayload.espIpDatagram.extHdrList)) { for (i:=0; i<sizeof(p_espHeader.espPayload.espIpDatagram.extHdrList) and v_loop ;i:=i+1) { if (ischosen(p_espHeader.espPayload.espIpDatagram.extHdrList[i].tunneledIpv6)) { p_originalIpv6Packet.ipv6Hdr := p_espHeader.espPayload.espIpDatagram.extHdrList[i].tunneledIpv6; v_loop := false; } else { p_originalIpv6Packet.extHdrList[i] := p_espHeader.espPayload.espIpDatagram.extHdrList[i]; } } } return e_success; }//end f_setEspHeader /* * @desc This goes through the Mip header and calculates length, checksum * and other specific functions of the different messages. * @desc * This function is used when sending messages. * @param p_msg ExtensionHeaderList to be treated * @return execution status */ function f_setEspHeader( in Ipv6Packet p_ipv6Packet, /*in*/inout EspHeader p_espHeader) /* function f_setEspHeader( in Ipv6Packet p_ipv6Packet, inout EspHeader p_espHeader) runs on LibIpv6Node return FncRetCode { var Ipv6Header v_originalIpv6Hdr; var EchoRequest v_originalEchoRequest; var EchoReply v_originalEchoReply; //treat MipHdr and other ext if (ispresent(p_espHeader.espPayload.espIpDatagram.extHdrList)) { } 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 Loading Loading @@ -772,7 +867,7 @@ group rfc4303Esp_ExtHdrFunctions { return e_success; }//end f_setEspHeader */ }//end group rfc4303Esp_ExtHdrFunctions Loading ttcn3/EtsiLibrary/LibIpv6/LibCommonRfcs/LibIpv6_Interface_Templates.ttcn +0 −21 Original line number Diff line number Diff line Loading @@ -1470,27 +1470,6 @@ group cryptoTemplates { // template PlaintextData m_plaintextData (in template ExtensionHeaderList p_extensionHeaderList, // in template Ipv6Payload p_ipv6Payload) := { // extHdrList := p_extensionHeaderList, // ipv6Payload := p_ipv6Payload // } //TODO check this, maybe add parameter for iv, etc... /* template PlaintextData m_plaintextData (in template ExtensionHeaderList p_extensionHeaderList, in template Ipv6Payload p_ipv6Payload) := { iv := omit, espPayloadData := { extHdrList := p_extensionHeaderList, ipv6Payload := p_ipv6Payload, tfcPadding := omit }, padding := omit, padLength := 0, nextHdr := 135 } */ template EspIpDatagram m_espIpDatagram(template ExtensionHeaderList p_extHdrList, template Ipv6Payload p_ipv6Payload) := { extHdrList := p_extHdrList, ipv6Payload := p_ipv6Payload Loading ttcn3/EtsiLibrary/LibIpv6/LibCommonRfcs/LibIpv6_Interface_TypesAndValues.ttcn +4 −4 Original line number Diff line number Diff line Loading @@ -1085,11 +1085,11 @@ module LibIpv6_Interface_TypesAndValues { UInt32 spi,//random, from SAD UInt32 seqNbr,//counter value, from SAD // Payload EspPayload espPayload, /*encrypted*/ EspPayload espPayload, // Trailer Oct1to255 padding optional,//depends on enc-algo UInt8 padLength,//depends on enc-algo UInt8 nextHdr, /*encrypted*/ Oct1to255 padding optional,//depends on enc-algo /*encrypted*/ UInt8 padLength,//depends on enc-algo /*encrypted*/ UInt8 nextHdr, octetstring icv optional// depends on integrity-algo } with { Loading ttcn3/EtsiLibrary/LibIpv6/LibCore/LibIpv6_Rfc2463Icmpv6_Functions.ttcn +3 −2 Original line number Diff line number Diff line Loading @@ -84,12 +84,13 @@ return e_error; } } //calc payloadLen v_ipPkt.ipv6Hdr.payloadLength := fx_payloadLength (v_ipPkt); //calc checksum //this is done in f_setExtensionHeaders //calc payloadLen //this is done in test adapter //send ipPort.send(v_ipPkt); Loading Loading
ttcn3/EtsiLibrary/LibIpv6/LibCommonRfcs/LibIpv6_Interface_Functions.ttcn +113 −18 Original line number Diff line number Diff line Loading @@ -78,24 +78,27 @@ group rfc2460Root_Functions { var UInt8 v_nrOfTunnelHdr := 0; var Ipv6Address v_pseudoSrcAddr := c_16ZeroBytes; var Ipv6Address v_pseudoDstAddr := c_16ZeroBytes; var boolean v_loop := true; var Ipv6Packet v_originalIpv6Packet; var Ipv6Packet v_activeIpv6Packet := p_ipv6Packet; for (i:=0; i<sizeof(p_extHdrList);i:=i+1) { for (i:=0; i<sizeof(p_extHdrList) and v_loop ;i:=i+1) { if (ischosen(p_extHdrList[i].mobileHeader)) { if (f_isPresentHomeAddressOption(p_extHdrList, v_homeAddress) == e_success) {//used in all packets that are sent to registered CN v_pseudoSrcAddr := v_homeAddress; v_pseudoDstAddr := p_dstAddr; v_pseudoDstAddr := v_activeIpv6Packet.ipv6Hdr.destinationAddress; } else if (f_isPresentRoutingHeaderType2(p_extHdrList, v_homeAddress) == e_success) { v_pseudoSrcAddr := p_srcAddr; v_pseudoSrcAddr := v_activeIpv6Packet.ipv6Hdr.sourceAddress; v_pseudoDstAddr := v_homeAddress; } else { v_pseudoSrcAddr := p_srcAddr; v_pseudoDstAddr := p_dstAddr; v_pseudoSrcAddr := v_activeIpv6Packet.ipv6Hdr.sourceAddress; v_pseudoDstAddr := v_activeIpv6Packet.ipv6Hdr.destinationAddress; } v_ret := f_setMobileHeader( p_srcAddr, p_dstAddr, v_ret := f_setMobileHeader( v_activeIpv6Packet.ipv6Hdr.sourceAddress, v_activeIpv6Packet.ipv6Hdr.destinationAddress, v_pseudoSrcAddr, v_pseudoDstAddr, p_extHdrList[i].mobileHeader); Loading @@ -105,24 +108,65 @@ group rfc2460Root_Functions { p_extHdrList[i].tunneledIpv6.payloadLength := fx_tunnelledPayloadLength(p_ipv6Packet, v_nrOfTunnelHdr); // Tunneled header is the active packet p_srcAddr := p_extHdrList[i].tunneledIpv6.sourceAddress; p_dstAddr := p_extHdrList[i].tunneledIpv6.destinationAddress; //p_srcAddr := p_extHdrList[i].tunneledIpv6.sourceAddress; //p_dstAddr := p_extHdrList[i].tunneledIpv6.destinationAddress; v_activeIpv6Packet.ipv6Hdr.sourceAddress := p_extHdrList[i].tunneledIpv6.sourceAddress; v_activeIpv6Packet.ipv6Hdr.destinationAddress := p_extHdrList[i].tunneledIpv6.destinationAddress; } else if (ischosen(p_extHdrList[i].espHeader)) { v_ret := f_setEspHeader(p_ipv6Packet, p_extHdrList[i].espHeader); v_ret := f_getOriginalIpv6Packet( v_activeIpv6Packet, p_extHdrList[i].espHeader, v_originalIpv6Packet); if (v_ret == e_success) { if (ispresent(v_originalIpv6Packet.extHdrList)) { p_extHdrList := v_originalIpv6Packet.extHdrList; } p_srcAddr := v_originalIpv6Packet.ipv6Hdr.sourceAddress; p_dstAddr := v_originalIpv6Packet.ipv6Hdr.destinationAddress; v_activeIpv6Packet := v_originalIpv6Packet; f_setExtensionHeaders( p_extHdrList, p_srcAddr, p_dstAddr, v_activeIpv6Packet); v_loop := false; } } }//end for if (ispresent(v_activeIpv6Packet.ipv6Payload)) { v_ret := f_calcIpv6PayloadChecksum(v_activeIpv6Packet); } return v_ret; }//end f_setExtensionHeaders }//end group extHdrFns function f_calcIpv6PayloadChecksum( inout Ipv6Packet p_ipv6Packet) return FncRetCode { if(ischosen(p_ipv6Packet.ipv6Payload.echoReplyMsg)) { if(p_ipv6Packet.ipv6Payload.echoReplyMsg.checksum != c_2ZeroBytes) { //calc checksum p_ipv6Packet.ipv6Payload.echoReplyMsg.checksum := fx_icmpv6Checksum(p_ipv6Packet); } } else if(ischosen(p_ipv6Packet.ipv6Payload.echoRequestMsg)) { if(p_ipv6Packet.ipv6Payload.echoRequestMsg.checksum != c_2ZeroBytes) { //calc checksum p_ipv6Packet.ipv6Payload.echoRequestMsg.checksum := fx_icmpv6Checksum(p_ipv6Packet); } } return e_success; }//end f_calcIpv6PayloadChecksum } //end group ipv6Packets Loading Loading @@ -708,22 +752,73 @@ group rfc4303Esp_ExtHdrFunctions { return v_key; }//end f_createSecretKey /* * @desc * This function is used when sending messages. * @param p_msg ExtensionHeaderList to be treated * @return execution status */ function f_getOriginalIpv6Packet( in Ipv6Packet p_ipv6Packet, in EspHeader p_espHeader, out Ipv6Packet p_originalIpv6Packet) runs on LibIpv6Node return FncRetCode { var UInt8 i; var boolean v_loop := true; if (not(ispresent(p_espHeader.espPayload.espIpDatagram.extHdrList)) and not(ispresent(p_espHeader.espPayload.espIpDatagram.ipv6Payload))) { log("**** f_setEspHeader: EspHeader.espPayload.espIpDatagram received that does neither contain extHdrList not ipv6Payload => EspHeader is not constructed correctly ****") return e_error; } //Build original packet p_originalIpv6Packet.ipv6Hdr := p_ipv6Packet.ipv6Hdr; if (ispresent(p_espHeader.espPayload.espIpDatagram.extHdrList)) { p_originalIpv6Packet.extHdrList := p_espHeader.espPayload.espIpDatagram.extHdrList; } if (ispresent(p_espHeader.espPayload.espIpDatagram.ipv6Payload)) { p_originalIpv6Packet.ipv6Payload := p_espHeader.espPayload.espIpDatagram.ipv6Payload; } // is a tunneledIpv6Hdr in the extHdrList? If yes, then it becomes the Ipv6Hdr of the original packet if (ispresent(p_espHeader.espPayload.espIpDatagram.extHdrList)) { for (i:=0; i<sizeof(p_espHeader.espPayload.espIpDatagram.extHdrList) and v_loop ;i:=i+1) { if (ischosen(p_espHeader.espPayload.espIpDatagram.extHdrList[i].tunneledIpv6)) { p_originalIpv6Packet.ipv6Hdr := p_espHeader.espPayload.espIpDatagram.extHdrList[i].tunneledIpv6; v_loop := false; } else { p_originalIpv6Packet.extHdrList[i] := p_espHeader.espPayload.espIpDatagram.extHdrList[i]; } } } return e_success; }//end f_setEspHeader /* * @desc This goes through the Mip header and calculates length, checksum * and other specific functions of the different messages. * @desc * This function is used when sending messages. * @param p_msg ExtensionHeaderList to be treated * @return execution status */ function f_setEspHeader( in Ipv6Packet p_ipv6Packet, /*in*/inout EspHeader p_espHeader) /* function f_setEspHeader( in Ipv6Packet p_ipv6Packet, inout EspHeader p_espHeader) runs on LibIpv6Node return FncRetCode { var Ipv6Header v_originalIpv6Hdr; var EchoRequest v_originalEchoRequest; var EchoReply v_originalEchoReply; //treat MipHdr and other ext if (ispresent(p_espHeader.espPayload.espIpDatagram.extHdrList)) { } 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 Loading Loading @@ -772,7 +867,7 @@ group rfc4303Esp_ExtHdrFunctions { return e_success; }//end f_setEspHeader */ }//end group rfc4303Esp_ExtHdrFunctions Loading
ttcn3/EtsiLibrary/LibIpv6/LibCommonRfcs/LibIpv6_Interface_Templates.ttcn +0 −21 Original line number Diff line number Diff line Loading @@ -1470,27 +1470,6 @@ group cryptoTemplates { // template PlaintextData m_plaintextData (in template ExtensionHeaderList p_extensionHeaderList, // in template Ipv6Payload p_ipv6Payload) := { // extHdrList := p_extensionHeaderList, // ipv6Payload := p_ipv6Payload // } //TODO check this, maybe add parameter for iv, etc... /* template PlaintextData m_plaintextData (in template ExtensionHeaderList p_extensionHeaderList, in template Ipv6Payload p_ipv6Payload) := { iv := omit, espPayloadData := { extHdrList := p_extensionHeaderList, ipv6Payload := p_ipv6Payload, tfcPadding := omit }, padding := omit, padLength := 0, nextHdr := 135 } */ template EspIpDatagram m_espIpDatagram(template ExtensionHeaderList p_extHdrList, template Ipv6Payload p_ipv6Payload) := { extHdrList := p_extHdrList, ipv6Payload := p_ipv6Payload Loading
ttcn3/EtsiLibrary/LibIpv6/LibCommonRfcs/LibIpv6_Interface_TypesAndValues.ttcn +4 −4 Original line number Diff line number Diff line Loading @@ -1085,11 +1085,11 @@ module LibIpv6_Interface_TypesAndValues { UInt32 spi,//random, from SAD UInt32 seqNbr,//counter value, from SAD // Payload EspPayload espPayload, /*encrypted*/ EspPayload espPayload, // Trailer Oct1to255 padding optional,//depends on enc-algo UInt8 padLength,//depends on enc-algo UInt8 nextHdr, /*encrypted*/ Oct1to255 padding optional,//depends on enc-algo /*encrypted*/ UInt8 padLength,//depends on enc-algo /*encrypted*/ UInt8 nextHdr, octetstring icv optional// depends on integrity-algo } with { Loading
ttcn3/EtsiLibrary/LibIpv6/LibCore/LibIpv6_Rfc2463Icmpv6_Functions.ttcn +3 −2 Original line number Diff line number Diff line Loading @@ -84,12 +84,13 @@ return e_error; } } //calc payloadLen v_ipPkt.ipv6Hdr.payloadLength := fx_payloadLength (v_ipPkt); //calc checksum //this is done in f_setExtensionHeaders //calc payloadLen //this is done in test adapter //send ipPort.send(v_ipPkt); Loading