Loading NewTypeStructure/EtsiLibrary/LibIpv6/LibCommonRfcs/LibIpv6_Interface.ttcn +75 −32 Original line number Diff line number Diff line Loading @@ -44,7 +44,6 @@ module LibIpv6_Interface { type port Ipv6Port message { inout //Imported from Rfc 2463 DestinationUnreachable, PacketTooBig, Loading @@ -66,59 +65,103 @@ module LibIpv6_Interface { MobilePrefixSolicitation, MobilePrefixAdvertisement, MipRouterAdvertisement, OtherIcmpv6Hdr, OtherIcmpv6, //hand encoded IPv6 packets RawIpv6Packet, //UDP UdpPacket, //MetaPdu Ipv6Packet, Ipv6Packet //General IPv6 packet GeneralIpv6 //GeneralIpv6 }//end type port Ipv6Port /* * @desc PDU type derived from RFC2463 clause 4.1 */ type record Ipv6Packet { Ipv6Header ipv6Hdr, ExtensionHeaderList extHdrList optional, Ipv6Payload ipv6Payload optional } with { encode "TODO"; } //Alias //Imported from Rfc 2463 type Ipv6Packet DestinationUnreachable; type Ipv6Packet PacketTooBig; type Ipv6Packet TimeExceeded; type Ipv6Packet ParameterProblem; type Ipv6Packet EchoRequest; type Ipv6Packet EchoReply; //Imported from Rfc 2461 type Ipv6Packet RouterAdvertisement; type Ipv6Packet RouterSolicitation; type Ipv6Packet NeighborSolicitation; type Ipv6Packet NeighborAdvertisement; type Ipv6Packet Redirect; //Imported from Rfc 2894 type Ipv6Packet RouterRenumbering; //Imported from Rfc XXXX Mipv6 type Ipv6Packet HomeAgentAddressDiscoveryRequest; type Ipv6Packet HomeAgentAddressDiscoveryReply; type Ipv6Packet MobilePrefixSolicitation; type Ipv6Packet MobilePrefixAdvertisement; type Ipv6Packet MipRouterAdvertisement; //Default value type Ipv6Packet OtherIcmpv6; //Udp type Ipv6Packet UdpPacket; //General IPv6 packet // type octetstring Ipv6Packet;//TODO check this /* * @desc This meta packet type contains any Ipv6 packets. * This type is used mainly for checksum calculation */ type union Ipv6Packet { type union Ipv6Payload { //type union Ipv6Packet { //Imported from Rfc 2463 DestinationUnreachable destinationUnreachable, PacketTooBig packetTooBig, TimeExceeded timeExceeded, ParameterProblem parameterProblem, EchoRequest echoRequest, EchoReply echoReply, DestinationUnreachableMsg destinationUnreachableMsg, PacketTooBigMsg packetTooBigMsg, TimeExceededMsg timeExceededMsg, ParameterProblemMsg parameterProblemMsg, EchoRequestMsg echoRequestMsg, EchoReplyMsg echoReplyMsg, //Imported from Rfc 2461 RouterAdvertisement routerAdvert, RouterSolicitation routerSolicitation, NeighborSolicitation nbrSolicitation, NeighborAdvertisement nbrAdvert, Redirect redirect, RouterAdvertisementMsg routerAdvertMsg, RouterSolicitationMsg routerSolicitationMsg, NeighborSolicitationMsg nbrSolicitationMsg, NeighborAdvertisementMsg nbrAdvertMsg, RedirectMsg redirectMsg, //Imported from Rfc 2894 RouterRenumbering routerRenumbering, RouterRenumberingMsg routerRenumberingMsg, //Imported from Rfc XXXX Mipv6 HomeAgentAddressDiscoveryRequest homeAgentAddressDiscoveryRequest, HomeAgentAddressDiscoveryReply homeAgentAddressDiscoveryReply, MobilePrefixSolicitation mobilePrefixSolicitation, MobilePrefixAdvertisement mobilePrefixAdvertisement, MipRouterAdvertisement mipRouterAdvertisement, HomeAgentAddressDiscoveryRequestMsg homeAgentAddressDiscoveryRequestMsg, HomeAgentAddressDiscoveryReplyMsg homeAgentAddressDiscoveryReplyMsg, MobilePrefixSolicitationMsg mobilePrefixSolicitationMsg, MobilePrefixAdvertisementMsg mobilePrefixAdvertisementMsg, MobileRouterAdvertisementMsg mobileRouterAdvertisementMsg, //Default value OtherIcmpv6Hdr otherHeader, OtherIcmpv6Msg otherIcmpv6Msg, //Udp UdpPacket udpPacket, UdpMsg udpMsg, //General IPv6 packet GeneralIpv6 generalIpv6 //GeneralIpv6 generalIpv6 octetstring generalIpv6Msg } with { //DTE TODO encode "isPDU=LibIpv6_Interface;" } template Ipv6Packet mw_ipPkt := ? ; template Ipv6Packet m_ipPkt_echoRequest (in template EchoRequest p_echoRequest) := { echoRequest := p_echoRequest } //smu template Ipv6Packet m_ipPkt_echoRequest (in template EchoRequest p_echoRequest) := { //smu echoRequest := p_echoRequest //smu } /* * @desc This type is intended to be used to send "hand encoded" Loading NewTypeStructure/EtsiLibrary/LibIpv6/LibCore/LibIpv6_Rfc2460Root_Functions.ttcn +8 −8 Original line number Diff line number Diff line Loading @@ -30,26 +30,26 @@ * @param p_msg MIPHeader to be sent * @return execution status */ function f_sendGeneralIpv6(template GeneralIpv6 p_msg) function f_sendGeneralIpv6(template Ipv6Packet p_msg) runs on LibIpv6Node return FncRetCode { //Variables var Ipv6Packet v_ipPkt; v_ipPkt.generalIpv6 := valueof(p_msg); v_ipPkt := valueof(p_msg); //set extensionHeaders if (ispresent(v_ipPkt.generalIpv6.extHdrList)) { if(f_setExtensionHeaders( v_ipPkt.generalIpv6.extHdrList, v_ipPkt.generalIpv6.ipv6Hdr.sourceAddress, v_ipPkt.generalIpv6.ipv6Hdr.destinationAddress, 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.generalIpv6.ipv6Hdr.payloadLength := fx_payloadLength (v_ipPkt); v_ipPkt.ipv6Hdr.payloadLength := fx_payloadLength (v_ipPkt); //send ipPort.send(v_ipPkt.generalIpv6); ipPort.send(v_ipPkt); return e_success; }//end f_sendGeneralIpv6 Loading NewTypeStructure/EtsiLibrary/LibIpv6/LibCore/LibIpv6_Rfc2460Root_Templates.ttcn +40 −40 Original line number Diff line number Diff line Loading @@ -15,7 +15,9 @@ import from LibIpv6_CommonRfcs_Templates all; import from LibIpv6_CommonRfcs_TypesAndValues all; import from LibIpv6_Rfc2460Root_TypesAndValues all ; import from LibIpv6_Rfc2462StatelessAddressAutoconf_TypesAndValues all; //import from LibIpv6_Rfc2462StatelessAddressAutoconf_TypesAndValues all; import from LibIpv6_Interface all; group ipv6HeaderTemplates{ Loading Loading @@ -460,7 +462,7 @@ * @param p_dst Binary IPv6 address associated with NUT. * @param p_data Data sent in the Echo Request packet. */ template GeneralIpv6 m_generalIpv6_extHdr_srcDst_data ( template Ipv6Packet m_generalIpv6_extHdr_srcDst_data ( UInt8 p_nextHeader, template ExtensionHeaderList p_extHdrList, template Ipv6Address p_src, Loading @@ -469,7 +471,9 @@ ) := { ipv6Hdr := m_ipHdr_nextHdr_srcDst(p_nextHeader, p_src, p_dst), extHdrList := p_extHdrList, data:= p_data ipv6Payload := { generalIpv6Msg := p_data } } /* Loading @@ -480,16 +484,16 @@ * @param p_dst Binary IPv6 address associated with NUT. * */ // template GeneralIpv6 mw_extHdr_srcDst( // UInt8 p_nextHeader, // template ExtensionHeaderList p_extHdrList, // template Ipv6Address p_src, // template Ipv6Address p_dst // ) := { // ipv6Hdr := mw_ipHdr_nextHdr_srcDst(p_nextHeader, p_src, p_dst), // extHdrList := p_extHdrList, // data:= omit // } template Ipv6Packet mw_extHdr_srcDst( UInt8 p_nextHeader, template ExtensionHeaderList p_extHdrList, template Ipv6Address p_src, template Ipv6Address p_dst ) := { ipv6Hdr := mw_ipHdr_nextHdr_srcDst(p_nextHeader, p_src, p_dst), extHdrList := p_extHdrList, ipv6Payload := omit } /* * @param p_nextHeader Next header identifier value to be used. Loading @@ -498,15 +502,14 @@ * test component. * @param p_dst Binary IPv6 address associated with NUT. */ template GeneralIpv6 mw_generalIpv6_extHdr_srcDst ( template Ipv6Packet mw_generalIpv6_extHdr_srcDst ( UInt8 p_nextHeader, template ExtensionHeaderList p_extHdrList, template Ipv6Address p_src, template Ipv6Address p_dst ) := { template Ipv6Address p_dst ) := { ipv6Hdr := mw_ipHdr_nextHdr_srcDst(p_nextHeader, p_src, p_dst), extHdrList := p_extHdrList, data:= * ipv6Payload := * } } //end group generalIpv6MessageTemplates Loading @@ -521,15 +524,14 @@ * @param p_dst Binary IPv6 address associated with NUT. * */ template GeneralIpv6 m_generalIpv6_srcDst( template Ipv6Packet m_generalIpv6_srcDst( UInt8 p_nextHeader, template Ipv6Address p_src, template Ipv6Address p_dst, template ExtensionHeaderList p_extHdrList ) := { template ExtensionHeaderList p_extHdrList ) := { ipv6Hdr := m_ipHdr_nextHdr_srcDst(p_nextHeader, p_src, p_dst), extHdrList := p_extHdrList, data := omit ipv6Payload := omit } /* Loading @@ -540,15 +542,14 @@ * @param p_dst Binary IPv6 address associated with NUT. * */ template GeneralIpv6 mw_generalIpv6_srcDst( template Ipv6Packet mw_generalIpv6_srcDst( UInt8 p_nextHeader, template Ipv6Address p_src, template Ipv6Address p_dst, template ExtensionHeaderList p_extHdrList ) := { template ExtensionHeaderList p_extHdrList ) := { ipv6Hdr := mw_ipHdr_nextHdr_srcDst(p_nextHeader, p_src, p_dst), extHdrList := p_extHdrList, data := * ipv6Payload := * } /* Loading @@ -559,14 +560,13 @@ * @param p_dst Binary IPv6 address associated with NUT. * */ template GeneralIpv6 mw_generalIpv6_dst( template Ipv6Packet mw_generalIpv6_dst( UInt8 p_nextHeader, template Ipv6Address p_dst, template ExtensionHeaderList p_extHdrList ) := { template ExtensionHeaderList p_extHdrList ) := { ipv6Hdr := mw_ipHdr_nextHdr_dst(p_nextHeader, p_dst), extHdrList := p_extHdrList, data := * ipv6Payload := * } }//end group ipPacketsWithOnlyExtensionHdrsTemplates Loading NewTypeStructure/EtsiLibrary/LibIpv6/LibCore/LibIpv6_Rfc2460Root_TypesAndValues.ttcn +9 −10 Original line number Diff line number Diff line Loading @@ -269,17 +269,16 @@ /* * @desc PDU type derived from RFC2460 */ type record GeneralIpv6 { Ipv6Header ipv6Hdr, ExtensionHeaderList extHdrList optional, octetstring data optional } with { encode "isPDU=LibIpv6_Rfc2460Root_TypesAndValues;"; encode (data) "length=getIntTag('IPv6Header_payloadLength');"; } //smu type record GeneralIpv6 { //smu Ipv6Header ipv6Hdr, //smu ExtensionHeaderList extHdrList optional, //smu octetstring data optional //smu } //smu with { //smu encode "isPDU=LibIpv6_Rfc2460Root_TypesAndValues;"; //smu encode (data) "length=getIntTag('IPv6Header_payloadLength');"; //smu } //TODO solve payload location problem /* * @desc PDU type to be used when building ESP payload for encryption Loading NewTypeStructure/EtsiLibrary/LibIpv6/LibCore/LibIpv6_Rfc2461NeighborDiscovery_Functions.ttcn +47 −67 Original line number Diff line number Diff line Loading @@ -42,25 +42,25 @@ module LibIpv6_Rfc2461NeighborDiscovery_Functions { runs on LibIpv6Node return FncRetCode { var Ipv6Packet v_ipPkt; v_ipPkt.redirect := valueof(p_redirect); v_ipPkt := valueof(p_redirect); //set extensionHeaders if (ispresent(v_ipPkt.generalIpv6.extHdrList)) { if(f_setExtensionHeaders( v_ipPkt.redirect.extHdrList, v_ipPkt.redirect.ipv6Hdr.sourceAddress, v_ipPkt.redirect.ipv6Hdr.destinationAddress, 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_sendRedirect: Error when calculating length of extension headers ****"); return e_error; } } //calc payloadLen v_ipPkt.redirect.ipv6Hdr.payloadLength := fx_payloadLength (v_ipPkt); v_ipPkt.ipv6Hdr.payloadLength := fx_payloadLength (v_ipPkt); //set checksum to zero v_ipPkt.redirect.checksum := c_2ZeroBytes; v_ipPkt.ipv6Payload.redirectMsg.checksum := c_2ZeroBytes; //calc checksum v_ipPkt.redirect.checksum := fx_icmpv6Checksum(v_ipPkt); v_ipPkt.ipv6Payload.redirectMsg.checksum := fx_icmpv6Checksum(v_ipPkt); //send ipPort.send(v_ipPkt.redirect); ipPort.send(v_ipPkt); return e_success; Loading @@ -82,25 +82,25 @@ module LibIpv6_Rfc2461NeighborDiscovery_Functions { runs on LibIpv6Node return FncRetCode { var Ipv6Packet v_ipPkt; v_ipPkt.routerAdvert := valueof(p_rtAdv); v_ipPkt := valueof(p_rtAdv); //set extensionHeaders if (ispresent(v_ipPkt.generalIpv6.extHdrList)) { if(f_setExtensionHeaders( v_ipPkt.routerAdvert.extHdrList, v_ipPkt.routerAdvert.ipv6Hdr.sourceAddress, v_ipPkt.routerAdvert.ipv6Hdr.destinationAddress, 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_sendRtAdv: Error when calculating length of extension headers ****"); return e_error; } } //calc payloadLen v_ipPkt.routerAdvert.ipv6Hdr.payloadLength := fx_payloadLength (v_ipPkt); v_ipPkt.ipv6Hdr.payloadLength := fx_payloadLength (v_ipPkt); //set checksum to zero v_ipPkt.routerAdvert.checksum := c_2ZeroBytes; v_ipPkt.ipv6Payload.routerAdvertMsg.checksum := c_2ZeroBytes; //calc checksum v_ipPkt.routerAdvert.checksum := fx_icmpv6Checksum(v_ipPkt); v_ipPkt.ipv6Payload.routerAdvertMsg.checksum := fx_icmpv6Checksum(v_ipPkt); //send ipPort.send(v_ipPkt.routerAdvert); ipPort.send(v_ipPkt); return e_success; Loading Loading @@ -233,25 +233,25 @@ module LibIpv6_Rfc2461NeighborDiscovery_Functions { runs on LibIpv6Node return FncRetCode { var Ipv6Packet v_ipPkt; v_ipPkt.nbrAdvert := valueof(p_nbrAdv); v_ipPkt := valueof(p_nbrAdv); //set extensionHeaders if (ispresent(v_ipPkt.nbrAdvert.extHdrList)) { if(f_setExtensionHeaders( v_ipPkt.nbrAdvert.extHdrList, v_ipPkt.nbrAdvert.ipv6Hdr.sourceAddress, v_ipPkt.nbrAdvert.ipv6Hdr.destinationAddress, 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_sendNbrAdv: Error when calculating length of extension headers ****"); return e_error; } } //calc payloadLen v_ipPkt.nbrAdvert.ipv6Hdr.payloadLength := fx_payloadLength (v_ipPkt); v_ipPkt.ipv6Hdr.payloadLength := fx_payloadLength (v_ipPkt); //set checksum to zero v_ipPkt.nbrAdvert.checksum := c_2ZeroBytes; v_ipPkt.ipv6Payload.nbrAdvertMsg.checksum := c_2ZeroBytes; //calc checksum v_ipPkt.nbrAdvert.checksum := fx_icmpv6Checksum(v_ipPkt); v_ipPkt.ipv6Payload.nbrAdvertMsg.checksum := fx_icmpv6Checksum(v_ipPkt); //send ipPort.send(v_ipPkt.nbrAdvert); ipPort.send(v_ipPkt); return e_success; Loading @@ -269,31 +269,11 @@ module LibIpv6_Rfc2461NeighborDiscovery_Functions { function f_sendRtAdvAndWait (in template RouterAdvertisement p_rtAdv) runs on LibIpv6Node return FncRetCode { var Ipv6Packet v_ipPkt; v_ipPkt.routerAdvert := valueof(p_rtAdv); //set extensionHeaders if (ispresent(v_ipPkt.routerAdvert.extHdrList)) { if(f_setExtensionHeaders( v_ipPkt.routerAdvert.extHdrList, v_ipPkt.routerAdvert.ipv6Hdr.sourceAddress, v_ipPkt.routerAdvert.ipv6Hdr.destinationAddress, v_ipPkt) != e_success) { log(" **** f_sendRtAdv: Error when calculating length of extension headers ****"); if (f_sendRtAdv(p_rtAdv) != e_success) { return e_error; } } //calc payloadLen v_ipPkt.routerAdvert.ipv6Hdr.payloadLength := fx_payloadLength (v_ipPkt); //set checksum to zero v_ipPkt.routerAdvert.checksum := c_2ZeroBytes; //calc checksum v_ipPkt.routerAdvert.checksum := fx_icmpv6Checksum(v_ipPkt); //send ipPort.send(v_ipPkt.routerAdvert); f_sleep ( PX_T_BUILD_GLA ); return e_success; } // end f_sendRtAdv /* Loading @@ -308,25 +288,25 @@ module LibIpv6_Rfc2461NeighborDiscovery_Functions { runs on LibIpv6Node return FncRetCode { var Ipv6Packet v_ipPkt; v_ipPkt.nbrSolicitation := valueof(p_nbrSol); v_ipPkt := valueof(p_nbrSol); //set extensionHeaders if (ispresent(v_ipPkt.nbrSolicitation.extHdrList)) { if(f_setExtensionHeaders( v_ipPkt.nbrSolicitation.extHdrList, v_ipPkt.nbrSolicitation.ipv6Hdr.sourceAddress, v_ipPkt.nbrSolicitation.ipv6Hdr.destinationAddress, 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_sendNbrSol: Error when calculating length of extension headers ****"); return e_error; } } //calc payloadLen v_ipPkt.nbrSolicitation.ipv6Hdr.payloadLength := fx_payloadLength (v_ipPkt); v_ipPkt.ipv6Hdr.payloadLength := fx_payloadLength (v_ipPkt); //set checksum to zero v_ipPkt.nbrSolicitation.checksum := c_2ZeroBytes; v_ipPkt.ipv6Payload.nbrSolicitationMsg.checksum := c_2ZeroBytes; //calc checksum v_ipPkt.nbrSolicitation.checksum := fx_icmpv6Checksum(v_ipPkt); v_ipPkt.ipv6Payload.nbrSolicitationMsg.checksum := fx_icmpv6Checksum(v_ipPkt); //send ipPort.send(v_ipPkt.nbrSolicitation); ipPort.send(v_ipPkt); return e_success; Loading @@ -344,25 +324,25 @@ module LibIpv6_Rfc2461NeighborDiscovery_Functions { runs on LibIpv6Node return FncRetCode { var Ipv6Packet v_ipPkt; v_ipPkt.routerSolicitation := valueof(p_rtrSol); v_ipPkt := valueof(p_rtrSol); //set extensionHeaders if (ispresent(v_ipPkt.routerSolicitation.extHdrList)) { if(f_setExtensionHeaders( v_ipPkt.routerSolicitation.extHdrList, v_ipPkt.routerSolicitation.ipv6Hdr.sourceAddress, v_ipPkt.routerSolicitation.ipv6Hdr.destinationAddress, 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_sendRtSol: Error when calculating length of extension headers ****"); return e_error; } } //calc payloadLen v_ipPkt.routerSolicitation.ipv6Hdr.payloadLength := fx_payloadLength (v_ipPkt); v_ipPkt.ipv6Hdr.payloadLength := fx_payloadLength (v_ipPkt); //set checksum to zero v_ipPkt.routerSolicitation.checksum := c_2ZeroBytes; v_ipPkt.ipv6Payload.routerSolicitationMsg.checksum := c_2ZeroBytes; //calc checksum v_ipPkt.routerSolicitation.checksum := fx_icmpv6Checksum(v_ipPkt); v_ipPkt.ipv6Payload.routerSolicitationMsg.checksum := fx_icmpv6Checksum(v_ipPkt); //send ipPort.send(v_ipPkt.routerSolicitation); ipPort.send(v_ipPkt); return e_success; Loading Loading
NewTypeStructure/EtsiLibrary/LibIpv6/LibCommonRfcs/LibIpv6_Interface.ttcn +75 −32 Original line number Diff line number Diff line Loading @@ -44,7 +44,6 @@ module LibIpv6_Interface { type port Ipv6Port message { inout //Imported from Rfc 2463 DestinationUnreachable, PacketTooBig, Loading @@ -66,59 +65,103 @@ module LibIpv6_Interface { MobilePrefixSolicitation, MobilePrefixAdvertisement, MipRouterAdvertisement, OtherIcmpv6Hdr, OtherIcmpv6, //hand encoded IPv6 packets RawIpv6Packet, //UDP UdpPacket, //MetaPdu Ipv6Packet, Ipv6Packet //General IPv6 packet GeneralIpv6 //GeneralIpv6 }//end type port Ipv6Port /* * @desc PDU type derived from RFC2463 clause 4.1 */ type record Ipv6Packet { Ipv6Header ipv6Hdr, ExtensionHeaderList extHdrList optional, Ipv6Payload ipv6Payload optional } with { encode "TODO"; } //Alias //Imported from Rfc 2463 type Ipv6Packet DestinationUnreachable; type Ipv6Packet PacketTooBig; type Ipv6Packet TimeExceeded; type Ipv6Packet ParameterProblem; type Ipv6Packet EchoRequest; type Ipv6Packet EchoReply; //Imported from Rfc 2461 type Ipv6Packet RouterAdvertisement; type Ipv6Packet RouterSolicitation; type Ipv6Packet NeighborSolicitation; type Ipv6Packet NeighborAdvertisement; type Ipv6Packet Redirect; //Imported from Rfc 2894 type Ipv6Packet RouterRenumbering; //Imported from Rfc XXXX Mipv6 type Ipv6Packet HomeAgentAddressDiscoveryRequest; type Ipv6Packet HomeAgentAddressDiscoveryReply; type Ipv6Packet MobilePrefixSolicitation; type Ipv6Packet MobilePrefixAdvertisement; type Ipv6Packet MipRouterAdvertisement; //Default value type Ipv6Packet OtherIcmpv6; //Udp type Ipv6Packet UdpPacket; //General IPv6 packet // type octetstring Ipv6Packet;//TODO check this /* * @desc This meta packet type contains any Ipv6 packets. * This type is used mainly for checksum calculation */ type union Ipv6Packet { type union Ipv6Payload { //type union Ipv6Packet { //Imported from Rfc 2463 DestinationUnreachable destinationUnreachable, PacketTooBig packetTooBig, TimeExceeded timeExceeded, ParameterProblem parameterProblem, EchoRequest echoRequest, EchoReply echoReply, DestinationUnreachableMsg destinationUnreachableMsg, PacketTooBigMsg packetTooBigMsg, TimeExceededMsg timeExceededMsg, ParameterProblemMsg parameterProblemMsg, EchoRequestMsg echoRequestMsg, EchoReplyMsg echoReplyMsg, //Imported from Rfc 2461 RouterAdvertisement routerAdvert, RouterSolicitation routerSolicitation, NeighborSolicitation nbrSolicitation, NeighborAdvertisement nbrAdvert, Redirect redirect, RouterAdvertisementMsg routerAdvertMsg, RouterSolicitationMsg routerSolicitationMsg, NeighborSolicitationMsg nbrSolicitationMsg, NeighborAdvertisementMsg nbrAdvertMsg, RedirectMsg redirectMsg, //Imported from Rfc 2894 RouterRenumbering routerRenumbering, RouterRenumberingMsg routerRenumberingMsg, //Imported from Rfc XXXX Mipv6 HomeAgentAddressDiscoveryRequest homeAgentAddressDiscoveryRequest, HomeAgentAddressDiscoveryReply homeAgentAddressDiscoveryReply, MobilePrefixSolicitation mobilePrefixSolicitation, MobilePrefixAdvertisement mobilePrefixAdvertisement, MipRouterAdvertisement mipRouterAdvertisement, HomeAgentAddressDiscoveryRequestMsg homeAgentAddressDiscoveryRequestMsg, HomeAgentAddressDiscoveryReplyMsg homeAgentAddressDiscoveryReplyMsg, MobilePrefixSolicitationMsg mobilePrefixSolicitationMsg, MobilePrefixAdvertisementMsg mobilePrefixAdvertisementMsg, MobileRouterAdvertisementMsg mobileRouterAdvertisementMsg, //Default value OtherIcmpv6Hdr otherHeader, OtherIcmpv6Msg otherIcmpv6Msg, //Udp UdpPacket udpPacket, UdpMsg udpMsg, //General IPv6 packet GeneralIpv6 generalIpv6 //GeneralIpv6 generalIpv6 octetstring generalIpv6Msg } with { //DTE TODO encode "isPDU=LibIpv6_Interface;" } template Ipv6Packet mw_ipPkt := ? ; template Ipv6Packet m_ipPkt_echoRequest (in template EchoRequest p_echoRequest) := { echoRequest := p_echoRequest } //smu template Ipv6Packet m_ipPkt_echoRequest (in template EchoRequest p_echoRequest) := { //smu echoRequest := p_echoRequest //smu } /* * @desc This type is intended to be used to send "hand encoded" Loading
NewTypeStructure/EtsiLibrary/LibIpv6/LibCore/LibIpv6_Rfc2460Root_Functions.ttcn +8 −8 Original line number Diff line number Diff line Loading @@ -30,26 +30,26 @@ * @param p_msg MIPHeader to be sent * @return execution status */ function f_sendGeneralIpv6(template GeneralIpv6 p_msg) function f_sendGeneralIpv6(template Ipv6Packet p_msg) runs on LibIpv6Node return FncRetCode { //Variables var Ipv6Packet v_ipPkt; v_ipPkt.generalIpv6 := valueof(p_msg); v_ipPkt := valueof(p_msg); //set extensionHeaders if (ispresent(v_ipPkt.generalIpv6.extHdrList)) { if(f_setExtensionHeaders( v_ipPkt.generalIpv6.extHdrList, v_ipPkt.generalIpv6.ipv6Hdr.sourceAddress, v_ipPkt.generalIpv6.ipv6Hdr.destinationAddress, 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.generalIpv6.ipv6Hdr.payloadLength := fx_payloadLength (v_ipPkt); v_ipPkt.ipv6Hdr.payloadLength := fx_payloadLength (v_ipPkt); //send ipPort.send(v_ipPkt.generalIpv6); ipPort.send(v_ipPkt); return e_success; }//end f_sendGeneralIpv6 Loading
NewTypeStructure/EtsiLibrary/LibIpv6/LibCore/LibIpv6_Rfc2460Root_Templates.ttcn +40 −40 Original line number Diff line number Diff line Loading @@ -15,7 +15,9 @@ import from LibIpv6_CommonRfcs_Templates all; import from LibIpv6_CommonRfcs_TypesAndValues all; import from LibIpv6_Rfc2460Root_TypesAndValues all ; import from LibIpv6_Rfc2462StatelessAddressAutoconf_TypesAndValues all; //import from LibIpv6_Rfc2462StatelessAddressAutoconf_TypesAndValues all; import from LibIpv6_Interface all; group ipv6HeaderTemplates{ Loading Loading @@ -460,7 +462,7 @@ * @param p_dst Binary IPv6 address associated with NUT. * @param p_data Data sent in the Echo Request packet. */ template GeneralIpv6 m_generalIpv6_extHdr_srcDst_data ( template Ipv6Packet m_generalIpv6_extHdr_srcDst_data ( UInt8 p_nextHeader, template ExtensionHeaderList p_extHdrList, template Ipv6Address p_src, Loading @@ -469,7 +471,9 @@ ) := { ipv6Hdr := m_ipHdr_nextHdr_srcDst(p_nextHeader, p_src, p_dst), extHdrList := p_extHdrList, data:= p_data ipv6Payload := { generalIpv6Msg := p_data } } /* Loading @@ -480,16 +484,16 @@ * @param p_dst Binary IPv6 address associated with NUT. * */ // template GeneralIpv6 mw_extHdr_srcDst( // UInt8 p_nextHeader, // template ExtensionHeaderList p_extHdrList, // template Ipv6Address p_src, // template Ipv6Address p_dst // ) := { // ipv6Hdr := mw_ipHdr_nextHdr_srcDst(p_nextHeader, p_src, p_dst), // extHdrList := p_extHdrList, // data:= omit // } template Ipv6Packet mw_extHdr_srcDst( UInt8 p_nextHeader, template ExtensionHeaderList p_extHdrList, template Ipv6Address p_src, template Ipv6Address p_dst ) := { ipv6Hdr := mw_ipHdr_nextHdr_srcDst(p_nextHeader, p_src, p_dst), extHdrList := p_extHdrList, ipv6Payload := omit } /* * @param p_nextHeader Next header identifier value to be used. Loading @@ -498,15 +502,14 @@ * test component. * @param p_dst Binary IPv6 address associated with NUT. */ template GeneralIpv6 mw_generalIpv6_extHdr_srcDst ( template Ipv6Packet mw_generalIpv6_extHdr_srcDst ( UInt8 p_nextHeader, template ExtensionHeaderList p_extHdrList, template Ipv6Address p_src, template Ipv6Address p_dst ) := { template Ipv6Address p_dst ) := { ipv6Hdr := mw_ipHdr_nextHdr_srcDst(p_nextHeader, p_src, p_dst), extHdrList := p_extHdrList, data:= * ipv6Payload := * } } //end group generalIpv6MessageTemplates Loading @@ -521,15 +524,14 @@ * @param p_dst Binary IPv6 address associated with NUT. * */ template GeneralIpv6 m_generalIpv6_srcDst( template Ipv6Packet m_generalIpv6_srcDst( UInt8 p_nextHeader, template Ipv6Address p_src, template Ipv6Address p_dst, template ExtensionHeaderList p_extHdrList ) := { template ExtensionHeaderList p_extHdrList ) := { ipv6Hdr := m_ipHdr_nextHdr_srcDst(p_nextHeader, p_src, p_dst), extHdrList := p_extHdrList, data := omit ipv6Payload := omit } /* Loading @@ -540,15 +542,14 @@ * @param p_dst Binary IPv6 address associated with NUT. * */ template GeneralIpv6 mw_generalIpv6_srcDst( template Ipv6Packet mw_generalIpv6_srcDst( UInt8 p_nextHeader, template Ipv6Address p_src, template Ipv6Address p_dst, template ExtensionHeaderList p_extHdrList ) := { template ExtensionHeaderList p_extHdrList ) := { ipv6Hdr := mw_ipHdr_nextHdr_srcDst(p_nextHeader, p_src, p_dst), extHdrList := p_extHdrList, data := * ipv6Payload := * } /* Loading @@ -559,14 +560,13 @@ * @param p_dst Binary IPv6 address associated with NUT. * */ template GeneralIpv6 mw_generalIpv6_dst( template Ipv6Packet mw_generalIpv6_dst( UInt8 p_nextHeader, template Ipv6Address p_dst, template ExtensionHeaderList p_extHdrList ) := { template ExtensionHeaderList p_extHdrList ) := { ipv6Hdr := mw_ipHdr_nextHdr_dst(p_nextHeader, p_dst), extHdrList := p_extHdrList, data := * ipv6Payload := * } }//end group ipPacketsWithOnlyExtensionHdrsTemplates Loading
NewTypeStructure/EtsiLibrary/LibIpv6/LibCore/LibIpv6_Rfc2460Root_TypesAndValues.ttcn +9 −10 Original line number Diff line number Diff line Loading @@ -269,17 +269,16 @@ /* * @desc PDU type derived from RFC2460 */ type record GeneralIpv6 { Ipv6Header ipv6Hdr, ExtensionHeaderList extHdrList optional, octetstring data optional } with { encode "isPDU=LibIpv6_Rfc2460Root_TypesAndValues;"; encode (data) "length=getIntTag('IPv6Header_payloadLength');"; } //smu type record GeneralIpv6 { //smu Ipv6Header ipv6Hdr, //smu ExtensionHeaderList extHdrList optional, //smu octetstring data optional //smu } //smu with { //smu encode "isPDU=LibIpv6_Rfc2460Root_TypesAndValues;"; //smu encode (data) "length=getIntTag('IPv6Header_payloadLength');"; //smu } //TODO solve payload location problem /* * @desc PDU type to be used when building ESP payload for encryption Loading
NewTypeStructure/EtsiLibrary/LibIpv6/LibCore/LibIpv6_Rfc2461NeighborDiscovery_Functions.ttcn +47 −67 Original line number Diff line number Diff line Loading @@ -42,25 +42,25 @@ module LibIpv6_Rfc2461NeighborDiscovery_Functions { runs on LibIpv6Node return FncRetCode { var Ipv6Packet v_ipPkt; v_ipPkt.redirect := valueof(p_redirect); v_ipPkt := valueof(p_redirect); //set extensionHeaders if (ispresent(v_ipPkt.generalIpv6.extHdrList)) { if(f_setExtensionHeaders( v_ipPkt.redirect.extHdrList, v_ipPkt.redirect.ipv6Hdr.sourceAddress, v_ipPkt.redirect.ipv6Hdr.destinationAddress, 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_sendRedirect: Error when calculating length of extension headers ****"); return e_error; } } //calc payloadLen v_ipPkt.redirect.ipv6Hdr.payloadLength := fx_payloadLength (v_ipPkt); v_ipPkt.ipv6Hdr.payloadLength := fx_payloadLength (v_ipPkt); //set checksum to zero v_ipPkt.redirect.checksum := c_2ZeroBytes; v_ipPkt.ipv6Payload.redirectMsg.checksum := c_2ZeroBytes; //calc checksum v_ipPkt.redirect.checksum := fx_icmpv6Checksum(v_ipPkt); v_ipPkt.ipv6Payload.redirectMsg.checksum := fx_icmpv6Checksum(v_ipPkt); //send ipPort.send(v_ipPkt.redirect); ipPort.send(v_ipPkt); return e_success; Loading @@ -82,25 +82,25 @@ module LibIpv6_Rfc2461NeighborDiscovery_Functions { runs on LibIpv6Node return FncRetCode { var Ipv6Packet v_ipPkt; v_ipPkt.routerAdvert := valueof(p_rtAdv); v_ipPkt := valueof(p_rtAdv); //set extensionHeaders if (ispresent(v_ipPkt.generalIpv6.extHdrList)) { if(f_setExtensionHeaders( v_ipPkt.routerAdvert.extHdrList, v_ipPkt.routerAdvert.ipv6Hdr.sourceAddress, v_ipPkt.routerAdvert.ipv6Hdr.destinationAddress, 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_sendRtAdv: Error when calculating length of extension headers ****"); return e_error; } } //calc payloadLen v_ipPkt.routerAdvert.ipv6Hdr.payloadLength := fx_payloadLength (v_ipPkt); v_ipPkt.ipv6Hdr.payloadLength := fx_payloadLength (v_ipPkt); //set checksum to zero v_ipPkt.routerAdvert.checksum := c_2ZeroBytes; v_ipPkt.ipv6Payload.routerAdvertMsg.checksum := c_2ZeroBytes; //calc checksum v_ipPkt.routerAdvert.checksum := fx_icmpv6Checksum(v_ipPkt); v_ipPkt.ipv6Payload.routerAdvertMsg.checksum := fx_icmpv6Checksum(v_ipPkt); //send ipPort.send(v_ipPkt.routerAdvert); ipPort.send(v_ipPkt); return e_success; Loading Loading @@ -233,25 +233,25 @@ module LibIpv6_Rfc2461NeighborDiscovery_Functions { runs on LibIpv6Node return FncRetCode { var Ipv6Packet v_ipPkt; v_ipPkt.nbrAdvert := valueof(p_nbrAdv); v_ipPkt := valueof(p_nbrAdv); //set extensionHeaders if (ispresent(v_ipPkt.nbrAdvert.extHdrList)) { if(f_setExtensionHeaders( v_ipPkt.nbrAdvert.extHdrList, v_ipPkt.nbrAdvert.ipv6Hdr.sourceAddress, v_ipPkt.nbrAdvert.ipv6Hdr.destinationAddress, 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_sendNbrAdv: Error when calculating length of extension headers ****"); return e_error; } } //calc payloadLen v_ipPkt.nbrAdvert.ipv6Hdr.payloadLength := fx_payloadLength (v_ipPkt); v_ipPkt.ipv6Hdr.payloadLength := fx_payloadLength (v_ipPkt); //set checksum to zero v_ipPkt.nbrAdvert.checksum := c_2ZeroBytes; v_ipPkt.ipv6Payload.nbrAdvertMsg.checksum := c_2ZeroBytes; //calc checksum v_ipPkt.nbrAdvert.checksum := fx_icmpv6Checksum(v_ipPkt); v_ipPkt.ipv6Payload.nbrAdvertMsg.checksum := fx_icmpv6Checksum(v_ipPkt); //send ipPort.send(v_ipPkt.nbrAdvert); ipPort.send(v_ipPkt); return e_success; Loading @@ -269,31 +269,11 @@ module LibIpv6_Rfc2461NeighborDiscovery_Functions { function f_sendRtAdvAndWait (in template RouterAdvertisement p_rtAdv) runs on LibIpv6Node return FncRetCode { var Ipv6Packet v_ipPkt; v_ipPkt.routerAdvert := valueof(p_rtAdv); //set extensionHeaders if (ispresent(v_ipPkt.routerAdvert.extHdrList)) { if(f_setExtensionHeaders( v_ipPkt.routerAdvert.extHdrList, v_ipPkt.routerAdvert.ipv6Hdr.sourceAddress, v_ipPkt.routerAdvert.ipv6Hdr.destinationAddress, v_ipPkt) != e_success) { log(" **** f_sendRtAdv: Error when calculating length of extension headers ****"); if (f_sendRtAdv(p_rtAdv) != e_success) { return e_error; } } //calc payloadLen v_ipPkt.routerAdvert.ipv6Hdr.payloadLength := fx_payloadLength (v_ipPkt); //set checksum to zero v_ipPkt.routerAdvert.checksum := c_2ZeroBytes; //calc checksum v_ipPkt.routerAdvert.checksum := fx_icmpv6Checksum(v_ipPkt); //send ipPort.send(v_ipPkt.routerAdvert); f_sleep ( PX_T_BUILD_GLA ); return e_success; } // end f_sendRtAdv /* Loading @@ -308,25 +288,25 @@ module LibIpv6_Rfc2461NeighborDiscovery_Functions { runs on LibIpv6Node return FncRetCode { var Ipv6Packet v_ipPkt; v_ipPkt.nbrSolicitation := valueof(p_nbrSol); v_ipPkt := valueof(p_nbrSol); //set extensionHeaders if (ispresent(v_ipPkt.nbrSolicitation.extHdrList)) { if(f_setExtensionHeaders( v_ipPkt.nbrSolicitation.extHdrList, v_ipPkt.nbrSolicitation.ipv6Hdr.sourceAddress, v_ipPkt.nbrSolicitation.ipv6Hdr.destinationAddress, 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_sendNbrSol: Error when calculating length of extension headers ****"); return e_error; } } //calc payloadLen v_ipPkt.nbrSolicitation.ipv6Hdr.payloadLength := fx_payloadLength (v_ipPkt); v_ipPkt.ipv6Hdr.payloadLength := fx_payloadLength (v_ipPkt); //set checksum to zero v_ipPkt.nbrSolicitation.checksum := c_2ZeroBytes; v_ipPkt.ipv6Payload.nbrSolicitationMsg.checksum := c_2ZeroBytes; //calc checksum v_ipPkt.nbrSolicitation.checksum := fx_icmpv6Checksum(v_ipPkt); v_ipPkt.ipv6Payload.nbrSolicitationMsg.checksum := fx_icmpv6Checksum(v_ipPkt); //send ipPort.send(v_ipPkt.nbrSolicitation); ipPort.send(v_ipPkt); return e_success; Loading @@ -344,25 +324,25 @@ module LibIpv6_Rfc2461NeighborDiscovery_Functions { runs on LibIpv6Node return FncRetCode { var Ipv6Packet v_ipPkt; v_ipPkt.routerSolicitation := valueof(p_rtrSol); v_ipPkt := valueof(p_rtrSol); //set extensionHeaders if (ispresent(v_ipPkt.routerSolicitation.extHdrList)) { if(f_setExtensionHeaders( v_ipPkt.routerSolicitation.extHdrList, v_ipPkt.routerSolicitation.ipv6Hdr.sourceAddress, v_ipPkt.routerSolicitation.ipv6Hdr.destinationAddress, 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_sendRtSol: Error when calculating length of extension headers ****"); return e_error; } } //calc payloadLen v_ipPkt.routerSolicitation.ipv6Hdr.payloadLength := fx_payloadLength (v_ipPkt); v_ipPkt.ipv6Hdr.payloadLength := fx_payloadLength (v_ipPkt); //set checksum to zero v_ipPkt.routerSolicitation.checksum := c_2ZeroBytes; v_ipPkt.ipv6Payload.routerSolicitationMsg.checksum := c_2ZeroBytes; //calc checksum v_ipPkt.routerSolicitation.checksum := fx_icmpv6Checksum(v_ipPkt); v_ipPkt.ipv6Payload.routerSolicitationMsg.checksum := fx_icmpv6Checksum(v_ipPkt); //send ipPort.send(v_ipPkt.routerSolicitation); ipPort.send(v_ipPkt); return e_success; Loading