Commit f96a70c6 authored by seb's avatar seb
Browse files

1. commit without errors

parent f4f81ae0
Loading
Loading
Loading
Loading
+75 −32
Original line number Diff line number Diff line
@@ -44,7 +44,6 @@ module LibIpv6_Interface {

	type port Ipv6Port message {
		inout

		//Imported from Rfc 2463
		DestinationUnreachable,
		PacketTooBig,
@@ -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"
+8 −8
Original line number Diff line number Diff line
@@ -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
+40 −40
Original line number Diff line number Diff line
@@ -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{
@@ -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,
@@ -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
			}
		}

		/*
@@ -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.
@@ -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
@@ -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
		}

		/*
@@ -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 :=  *
		}

		/*
@@ -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
+9 −10
Original line number Diff line number Diff line
@@ -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
+47 −67
Original line number Diff line number Diff line
@@ -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;

@@ -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;

@@ -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;

@@ -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

		/*
@@ -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;
			
@@ -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