LibIpv6_Rfc2463Icmpv6_Templates.ttcn 20.9 KB
Newer Older
alex's avatar
alex committed
/*
 *	@author 	STF 276
 *  @version 	$Id$
 *	@desc		This module specifies common template definitions
 *              to specify ICMPv6 packets
 *
 */
 module LibIpv6_Rfc2463Icmpv6_Templates {

	//LibCommon
	import from LibCommon_BasicTypesAndValues all;
	import from LibCommon_DataStrings all;
	//LibIpv6
	import from LibIpv6_ExternalFunctions all;
	import from LibIpv6_ModuleParameters all ;
	import from LibIpv6_MultiRfcs_TypesAndValues all;
	import from LibIpv6_Rfc2460Root_TypesAndValues all;
	import from LibIpv6_Rfc2460Root_Templates all;
peter's avatar
peter committed
	import from LibIpv6_Rfc2463Icmpv6_TypesAndValues all;
peter's avatar
peter committed
	import from LibIpv6_Rfc2461NeighborDiscovery_TypesAndValues all;
alex's avatar
alex committed

peter's avatar
peter committed
	group Destination_Unreachable {

		/*
		 *	@param  p_src Binary IPv6 address associated with the
		 *          test component.
		 *	@param  p_dst Binary IPv6 address associated with NUT.
		 *	@param  p_hopLimit Number of hops to be used in IPv6 header.
		 *	@param  p_icmpCode ICMPv6 type to be used
		 *	@param  p_data data in ICMPv6 Destination Unreachable message.
		*/
		template DestinationUnreachable m_destUnreachable_noExtHdr_hop (
			template Ipv6Address p_src,
			template Ipv6Address p_dst,
			UInt8 p_hopLimit,
			UInt8 p_icmpCode,
			template octetstring p_data
		) := {
			ipv6Hdr := m_ipHdr_nextHdr_hop_srcDst(c_icmpHdr, p_hopLimit, p_src, p_dst),
			extHdrList := omit,
			icmpType:= c_destinationUnreachable,
			icmpCode:= p_icmpCode,
			checksum:= c_2ZeroBytes,
			unused := '00000000'O,
			data := p_data
		}
alex's avatar
alex committed

		/*
		 *	@param  p_src Binary IPv6 address associated with the
		 *          test component.
		 *	@param  p_dst Binary IPv6 address associated with NUT.
peter's avatar
peter committed
		 *	@param  p_icmpCode ICMPv6 type to be used
alex's avatar
alex committed
		*/
peter's avatar
peter committed
		template DestinationUnreachable mw_destUnreachable_code (
			template Ipv6Address p_src,
			template Ipv6Address p_dst,
			template UInt8 p_icmpCode
		) := {
			ipv6Hdr := mw_ipHdr_nextHdr_srcDst(c_icmpHdr, p_src, p_dst),
alex's avatar
alex committed
			extHdrList := *,
peter's avatar
peter committed
			icmpType:= c_destinationUnreachable,
			icmpCode:= p_icmpCode,
			checksum:= ?,
			unused := '00000000'O,
			data := *
		}

	} // end group Destination_Unreachable

	group ICMPv6_Echo_Reply {

		/*
		 *	@param  p_src Binary IPv6 address associated with the
		 *          test component.
		 *	@param  p_dst Binary IPv6 address associated with NUT.
		 *	@param  p_id ICMPv6 echo identifier.
		 *	@param  p_seqNr ICMPv6 echo sequence number.
		 *	@param  p_data data in ICMPv6 echo reply.
		*/
		template EchoReply m_echoReply_noExtHdr_data (	template Ipv6Address p_src,
															template Ipv6Address p_dst,
															UInt16 	p_id,
															UInt16	p_seqNr,
															template octetstring p_data ) := {
			ipv6Hdr := m_ipHdr_nextHdr_srcDst(c_icmpHdr, p_src, p_dst),
			extHdrList := omit,
			icmpType:= c_echoReply,
alex's avatar
alex committed
			icmpCode:= c_icmpCode0,
peter's avatar
peter committed
			checksum:= c_2ZeroBytes,
			identifier:= p_id,
			sequenceNumber:= p_seqNr,
			data:= p_data
alex's avatar
alex committed
		}

		/*
		 *	@param  p_src Binary IPv6 address associated with the
		 *          test component.
		 *	@param  p_dst Binary IPv6 address associated with NUT.
		 *	@param  p_id ICMPv6 echo identifier.
		 *	@param  p_seqNr ICMPv6 echo sequence number.
		*/
peter's avatar
peter committed
		template EchoReply m_echoReply_noExtHdr_noData (	template Ipv6Address p_src,
															template Ipv6Address p_dst,
															UInt16 	p_id,
															UInt16	p_seqNr) := {
			ipv6Hdr := m_ipHdr_nextHdr_srcDst(c_icmpHdr, p_src, p_dst),
alex's avatar
alex committed
			extHdrList := omit,
peter's avatar
peter committed
			icmpType:= c_echoReply,
alex's avatar
alex committed
			icmpCode:= c_icmpCode0,
			checksum:= c_2ZeroBytes,
			identifier:= p_id,
			sequenceNumber:= p_seqNr,
			data:= omit
		}

peter's avatar
peter committed
		/*
		 *	@param  p_src Binary IPv6 address associated with the
		 *          test component.
		 *	@param  p_dst Binary IPv6 address associated with NUT.
peter's avatar
peter committed
		*/
		template EchoReply mw_echoReply (	template Ipv6Address p_src,
											template Ipv6Address p_dst ) := {
			ipv6Hdr := mw_ipHdr_nextHdr_srcDst(c_icmpHdr, p_src, p_dst),
			extHdrList := *,
			icmpType:= c_echoReply,
			icmpCode:= c_icmpCode0,
			checksum:= ?,
			identifier:= ?,
			sequenceNumber:= ?,
			data:= *
		}

		/*
		 *	@param  p_src Binary IPv6 address associated with the
		 *          test component.
		 *	@param  p_dst Binary IPv6 address associated with NUT.
		 *	@param  p_nextHeader Next header identifier value to be used.
		 *	@param  p_extHdrList List of extension header in the packet.
peter's avatar
peter committed
		 *	@param  p_id ICMPv6 echo identifier.
		 *	@param  p_seqNr ICMPv6 echo sequence number.
peter's avatar
peter committed
		 *	@param  p_data data in ICMPv6 echo reply.
peter's avatar
peter committed
		*/
peter's avatar
peter committed
		template EchoReply mw_echoReply_extHdr_data (
peter's avatar
peter committed
			template Ipv6Address p_src,
			template Ipv6Address p_dst,
peter's avatar
peter committed
			UInt8 p_nextHeader,
			template ExtensionHeaderList p_extHdrList,
peter's avatar
peter committed
			UInt16 	p_id,
peter's avatar
peter committed
			UInt16	p_seqNr,
			template octetstring p_data
peter's avatar
peter committed
		) := {
peter's avatar
peter committed
			ipv6Hdr := mw_ipHdr_nextHdr_srcDst(p_nextHeader, p_src, p_dst),
peter's avatar
peter committed
			extHdrList := p_extHdrList,
peter's avatar
peter committed
			icmpType:= c_echoReply,
peter's avatar
peter committed
			icmpCode:= c_icmpCode0,
			checksum:= ?,
			identifier:= p_id,
			sequenceNumber:= p_seqNr,
peter's avatar
peter committed
			data:= p_data
		}

		/*
		 *	@param  p_src Binary IPv6 address associated with the
		 *          test component.
		 *	@param  p_dst Binary IPv6 address associated with NUT.
		 *	@param  p_id ICMPv6 echo identifier.
		 *	@param  p_seqNr ICMPv6 echo sequence number.
		 *	@param  p_data data in ICMPv6 echo reply.
		*/
		template EchoReply mw_echoReply_noExtHdr_data (	template Ipv6Address p_src,
															template Ipv6Address p_dst,
															UInt16 	p_id,
															UInt16	p_seqNr,
															template octetstring p_data ) := {
			ipv6Hdr := mw_ipHdr_nextHdr_srcDst(c_icmpHdr, p_src, p_dst),
			extHdrList := omit,
			icmpType:= c_echoReply,
			icmpCode:= c_icmpCode0,
			checksum:= ?,
			identifier:= p_id,
			sequenceNumber:= p_seqNr,
			data:= p_data
		}

		/*
		 *	@param  p_src Binary IPv6 address associated with the
		 *          test component.
		 *	@param  p_dst Binary IPv6 address associated with NUT.
		 *	@param  p_hopLimit Number of hops to be used in IPv6 header.
		 *	@param  p_data data in ICMPv6 echo reply.
		*/
		template EchoReply mw_echoReply_noExtHdr_data_hop (
			template Ipv6Address p_src,
			template Ipv6Address p_dst,
			UInt8 p_hopLimit,
			octetstring p_data
		) := {
			ipv6Hdr := mw_ipHdr_nextHdr_hop_srcDst ( c_icmpHdr, p_hopLimit, p_src, p_dst ),
			extHdrList := *,
			icmpType:= c_echoReply,
			icmpCode:= c_icmpCode0,
			checksum:= ?,
			identifier:= ?,
			sequenceNumber:= ?,
			data:= p_data
peter's avatar
peter committed
		}

alex's avatar
alex committed
		/*
		 *	@param  p_src Binary IPv6 address associated with the
		 *          test component.
		 *	@param  p_dst Binary IPv6 address associated with NUT.
		 *	@param  p_id ICMPv6 echo identifier.
		 *	@param  p_seqNr ICMPv6 echo sequence number.
		*/
peter's avatar
peter committed
		template EchoReply mw_echoReply_noExtHdr_noData (	template Ipv6Address p_src,
															template Ipv6Address p_dst,
															UInt16 	p_id,
															UInt16	p_seqNr) := {
			ipv6Hdr := mw_ipHdr_nextHdr_srcDst(c_icmpHdr, p_src, p_dst),
alex's avatar
alex committed
			extHdrList := omit,
peter's avatar
peter committed
			icmpType:= c_echoReply,
alex's avatar
alex committed
			icmpCode:= c_icmpCode0,
peter's avatar
peter committed
			checksum:= ?,
alex's avatar
alex committed
			identifier:= p_id,
			sequenceNumber:= p_seqNr,
			data:= omit
		}

peter's avatar
peter committed
	} // end group ICMPv6_Echo_Reply

	group ICMPv6_Echo_Request {

alex's avatar
alex committed
		/*
		 *	@param  p_nextHeader Next header identifier value to be used.
		 *	@param  p_extHdrList List of extension header in the packet.
		 *	@param  p_src Binary IPv6 address associated with the
		 *          test component.
		 *	@param  p_dst Binary IPv6 address associated with NUT.
		 *	@param  p_id ICMPv6 echo identifier.
		 *	@param  p_seqNr ICMPv6 echo sequence number.
peter's avatar
peter committed
		 *	@param  p_data Data sent in the Echo Request packet.
alex's avatar
alex committed
		*/
peter's avatar
peter committed
		template EchoRequest m_echoRequest_extHdr_data (
alex's avatar
alex committed
			UInt8 p_nextHeader,
			template ExtensionHeaderList p_extHdrList,
			template Ipv6Address p_src,
			template Ipv6Address p_dst,
			UInt16 	p_id,
peter's avatar
peter committed
			UInt16 	p_seqNr,
			octetstring p_data
alex's avatar
alex committed
		) := {
peter's avatar
peter committed
			ipv6Hdr := m_ipHdr_nextHdr_srcDst(p_nextHeader, p_src, p_dst),
alex's avatar
alex committed
			extHdrList := p_extHdrList,
			icmpType:= c_echoRequest,
			icmpCode:= c_icmpCode0,
			checksum:= c_2ZeroBytes,
			identifier:= p_id,
			sequenceNumber:= p_seqNr,
peter's avatar
peter committed
			data:= p_data
alex's avatar
alex committed
		}

		/*
		 *	@param  p_nextHeader Next header identifier value to be used.
		 *	@param  p_extHdrList List of extension header in the packet.
		 *	@param  p_src Binary IPv6 address associated with the
		 *          test component.
		 *	@param  p_dst Binary IPv6 address associated with NUT.
		 *	@param  p_id ICMPv6 echo identifier.
		 *	@param  p_seqNr ICMPv6 echo sequence number.
		*/
peter's avatar
peter committed
		template EchoRequest m_echoRequest_extHdr_noData (
alex's avatar
alex committed
			UInt8 p_nextHeader,
			template ExtensionHeaderList p_extHdrList,
			template Ipv6Address p_src,
			template Ipv6Address p_dst,
			UInt16 	p_id,
			UInt16 	p_seqNr
		) := {
peter's avatar
peter committed
			ipv6Hdr := m_ipHdr_nextHdr_srcDst(p_nextHeader, p_src, p_dst),
alex's avatar
alex committed
			extHdrList := p_extHdrList,
			icmpType:= c_echoRequest,
			icmpCode:= c_icmpCode0,
			checksum:= c_2ZeroBytes,
			identifier:= p_id,
			sequenceNumber:= p_seqNr,
			data:= omit
		}

		/*
peter's avatar
peter committed
		 *	@param  p_src Binary IPv6 address associated with the
		 *          test component.
		 *	@param  p_dst Binary IPv6 address associated with NUT.
		 *	@param  p_hops Hop Limit value to be used.
alex's avatar
alex committed
		 *	@param  p_nextHeader Next header identifier value to be used.
		 *	@param  p_extHdrList List of extension header in the packet.
peter's avatar
peter committed
		 *	@param  p_id ICMPv6 echo identifier.
		 *	@param  p_seqNr ICMPv6 echo sequence number.
		*/
		template EchoRequest m_echoRequest_extHdr_noData_hop (
			template Ipv6Address p_src,
			template Ipv6Address p_dst,
			UInt8 p_hops,
			UInt8 p_nextHeader,
			template ExtensionHeaderList p_extHdrList,
			UInt16 	p_id,
			UInt16 	p_seqNr
		) := {
			ipv6Hdr := m_ipHdr_nextHdr_hop_srcDst(p_nextHeader, p_hops, p_src, p_dst),
			extHdrList := p_extHdrList,
			icmpType:= c_echoRequest,
			icmpCode:= c_icmpCode0,
			checksum:= c_2ZeroBytes,
			identifier:= p_id,
			sequenceNumber:= p_seqNr,
			data:= omit
		}

		/*
alex's avatar
alex committed
		 *	@param  p_src Binary IPv6 address associated with the
		 *          test component.
		 *	@param  p_dst Binary IPv6 address associated with NUT.
		 *	@param  p_id ICMPv6 echo identifier.
		 *	@param  p_seqNr ICMPv6 echo sequence number.
		 *	@param  p_data Data sent in the Echo Request packet.
		*/
peter's avatar
peter committed
		template EchoRequest m_echoRequest_noExtHdr_data (
alex's avatar
alex committed
			template Ipv6Address p_src,
			template Ipv6Address p_dst,
			UInt16 	p_id,
			UInt16 	p_seqNr,
			octetstring p_data
		) := {
peter's avatar
peter committed
			ipv6Hdr := m_ipHdr_nextHdr_srcDst(c_icmpHdr, p_src, p_dst),
			extHdrList := omit,
alex's avatar
alex committed
			icmpType:= c_echoRequest,
			icmpCode:= c_icmpCode0,
			checksum:= c_2ZeroBytes,
			identifier:= p_id,
			sequenceNumber:= p_seqNr,
			data:= p_data
		}

		/*
		 *	@param  p_src Binary IPv6 address associated with the
		 *          test component.
		 *	@param  p_dst Binary IPv6 address associated with NUT.
peter's avatar
peter committed
		 *	@param  p_hops Hop Limit value to be used.
alex's avatar
alex committed
		 *	@param  p_id ICMPv6 echo identifier.
		 *	@param  p_seqNr ICMPv6 echo sequence number.
		 *	@param  p_data Data sent in the Echo Request packet.
		*/
peter's avatar
peter committed
		template EchoRequest m_echoRequest_noExtHdr_data_hop (
alex's avatar
alex committed
			template Ipv6Address p_src,
			template Ipv6Address p_dst,
peter's avatar
peter committed
			UInt8 p_hops,
alex's avatar
alex committed
			UInt16 	p_id,
			UInt16 	p_seqNr,
peter's avatar
peter committed
			octetstring p_data
alex's avatar
alex committed
		) := {
peter's avatar
peter committed
			ipv6Hdr := m_ipHdr_nextHdr_hop_srcDst(c_icmpHdr, p_hops, p_src, p_dst),
alex's avatar
alex committed
			extHdrList := omit,
			icmpType:= c_echoRequest,
			icmpCode:= c_icmpCode0,
			checksum:= c_2ZeroBytes,
			identifier:= p_id,
			sequenceNumber:= p_seqNr,
			data:= p_data
		}

		/*
		 *	@param  p_src Binary IPv6 address associated with the
		 *          test component.
		 *	@param  p_dst Binary IPv6 address associated with NUT.
		 *	@param  p_id ICMPv6 echo identifier.
		 *	@param  p_seqNr ICMPv6 echo sequence number.
		*/
peter's avatar
peter committed
		template EchoRequest m_echoRequest_noExtHdr_noData (	template Ipv6Address p_src,
alex's avatar
alex committed
																template Ipv6Address p_dst,
																UInt16 	p_id,
																UInt16 	p_seqNr) := {
peter's avatar
peter committed
			ipv6Hdr := m_ipHdr_nextHdr_srcDst(c_icmpHdr, p_src, p_dst),
alex's avatar
alex committed
			extHdrList := omit,
			icmpType:= c_echoRequest,
			icmpCode:= c_icmpCode0,
peter's avatar
peter committed
			checksum:= c_2ZeroBytes,
alex's avatar
alex committed
			identifier:= p_id,
			sequenceNumber:= p_seqNr,
			data:= omit
		}
peter's avatar
peter committed

alex's avatar
alex committed
		/*
		 *	@param  p_src Binary IPv6 address associated with the
		 *          test component.
		 *	@param  p_dst Binary IPv6 address associated with NUT.
peter's avatar
peter committed
		 *	@param  p_hops Number of hops to be used in IPv6 header.
alex's avatar
alex committed
		 *	@param  p_id ICMPv6 echo identifier.
		 *	@param  p_seqNr ICMPv6 echo sequence number.
		*/
peter's avatar
peter committed
		template EchoRequest m_echoRequest_noExtHdr_noData_hop ( 
			template Ipv6Address p_src,
			template Ipv6Address p_dst,
			in UInt8 p_hops,
			UInt16 	p_id,
			UInt16	p_seqNr
		) := {
			ipv6Hdr := m_ipHdr_nextHdr_hop_srcDst(c_icmpHdr, p_hops, p_src, p_dst),
alex's avatar
alex committed
			extHdrList := omit,
			icmpType:= c_echoRequest,
			icmpCode:= c_icmpCode0,
			checksum:= c_2ZeroBytes,
			identifier:= p_id,
			sequenceNumber:= p_seqNr,
peter's avatar
peter committed
			data:= omit
alex's avatar
alex committed
		}

		/*
		 *	@param  p_src Binary IPv6 address associated with the
		 *          test component.
		 *	@param  p_dst Binary IPv6 address associated with NUT.
		*/
peter's avatar
peter committed
		template EchoRequest mw_echoRequest (	template Ipv6Address p_src,
												template Ipv6Address p_dst ) := {
			ipv6Hdr := mw_ipHdr_nextHdr_srcDst(c_icmpHdr, p_src, p_dst),
alex's avatar
alex committed
			extHdrList := *,
peter's avatar
peter committed
			icmpType:= c_echoRequest,
alex's avatar
alex committed
			icmpCode:= c_icmpCode0,
			checksum:= ?,
			identifier:= ?,
			sequenceNumber:= ?,
			data:= *
		}

		/*
peter's avatar
peter committed
		 *	@param  p_nextHeader Next header identifier value to be used.
		 *	@param  p_extHdrList List of extension header in the packet.
alex's avatar
alex committed
		 *	@param  p_src Binary IPv6 address associated with the
		 *          test component.
		 *	@param  p_dst Binary IPv6 address associated with NUT.
		 *	@param  p_id ICMPv6 echo identifier.
		 *	@param  p_seqNr ICMPv6 echo sequence number.
		*/
peter's avatar
peter committed
		template EchoRequest mw_echoRequest_extHdr_noData (
			UInt8 p_nextHeader,
			template ExtensionHeaderList p_extHdrList,
			template Ipv6Address p_src,
			template Ipv6Address p_dst,
			UInt16 	p_id,
			UInt16 	p_seqNr
		) := {
			ipv6Hdr := mw_ipHdr_nextHdr_srcDst(p_nextHeader, p_src, p_dst),
			extHdrList := p_extHdrList,
			icmpType:= c_echoRequest,
			icmpCode:= c_icmpCode0,
			checksum:= ?,
			identifier:= p_id,
			sequenceNumber:= p_seqNr,
			data:= omit
		}


		/*
		 *	@param  p_src Binary IPv6 address associated with the
alex's avatar
alex committed
		 *          test component.
		 *	@param  p_dst Binary IPv6 address associated with NUT.
		 *	@param  p_id ICMPv6 echo identifier.
		 *	@param  p_seqNr ICMPv6 echo sequence number.
		*/
peter's avatar
peter committed
		template EchoRequest mw_echoRequest_noExtHdr_noData (	template Ipv6Address p_src,
																template Ipv6Address p_dst,
																UInt16 	p_id,
																UInt16 	p_seqNr) := {
			ipv6Hdr := mw_ipHdr_nextHdr_srcDst(c_icmpHdr, p_src, p_dst),
alex's avatar
alex committed
			extHdrList := omit,
peter's avatar
peter committed
			icmpType:= c_echoRequest,
alex's avatar
alex committed
			icmpCode:= c_icmpCode0,
peter's avatar
peter committed
			checksum:= ?,
alex's avatar
alex committed
			identifier:= p_id,
			sequenceNumber:= p_seqNr,
			data:= omit
		}
peter's avatar
peter committed

	} // end group ICMPv6_Echo_Request

	group ICMPv6_Other {
alex's avatar
alex committed

		/*
		 *	@param  p_src Binary IPv6 address associated with the
		 *          test component.
		 *	@param  p_dst Binary IPv6 address associated with NUT.
peter's avatar
peter committed
		 *	@param  p_icmpType ICMPv6 type to be used
		 *	@param  p_icmpCode ICMPv6 code to be used
alex's avatar
alex committed
		*/
peter's avatar
peter committed
		template OtherIcmpv6Hdr m_otherIcmpv6Hdr_noExtHdr_noData (template Ipv6Address p_src,
														template Ipv6Address p_dst,
														UInt8 p_icmpType,
														UInt8 p_icmpCode ) := {
			ipv6Hdr := m_ipHdr_nextHdr_srcDst(c_icmpHdr, p_src, p_dst),
alex's avatar
alex committed
			extHdrList := omit,
peter's avatar
peter committed
			icmpType:= p_icmpType,
			icmpCode:= p_icmpCode,
alex's avatar
alex committed
			checksum:= c_2ZeroBytes,
peter's avatar
peter committed
			data := omit
alex's avatar
alex committed
		}

peter's avatar
peter committed
	} // end group ICMPv6_Other

	group Packet_Too_Big {

alex's avatar
alex committed
		/*
		 *	@param  p_src Binary IPv6 address associated with the
		 *          test component.
		 *	@param  p_dst Binary IPv6 address associated with NUT.
peter's avatar
peter committed
		 *	@param  p_hopLimit Number of hops to be used in IPv6 header.
alex's avatar
alex committed
		*/
peter's avatar
peter committed
		template PacketTooBig m_packetTooBig_noExtHdr_hop (
			template Ipv6Address p_src,
			template Ipv6Address p_dst,
validator's avatar
""  
validator committed
			UInt8 p_hopLimit,
			octetstring p_data
peter's avatar
peter committed
		) := {
			ipv6Hdr := m_ipHdr_nextHdr_hop_srcDst(c_icmpHdr, p_hopLimit, p_src, p_dst),
alex's avatar
alex committed
			extHdrList := omit,
peter's avatar
peter committed
			icmpType:= c_packetTooBig,
peter's avatar
peter committed
			icmpCode:= c_icmpCode0,
peter's avatar
peter committed
			checksum:= c_2ZeroBytes,
			mtu := c_mtu1280,
validator's avatar
""  
validator committed
			data := p_data
peter's avatar
peter committed
		}
peter's avatar
peter committed

peter's avatar
peter committed
		/*
		 *	@param  p_src Binary IPv6 address associated with the
		 *          test component.
		 *	@param  p_dst Binary IPv6 address associated with NUT.
peter's avatar
peter committed
		 *	@param  p_mtu MTU value to be sent.
peter's avatar
peter committed
		*/
peter's avatar
peter committed
		template PacketTooBig m_packetTooBig_noExtHdr_mtu (
peter's avatar
peter committed
			template Ipv6Address p_src,
			template Ipv6Address p_dst,
peter's avatar
peter committed
			UInt32 p_mtu
peter's avatar
peter committed
		) := {
peter's avatar
peter committed
			ipv6Hdr := m_ipHdr_nextHdr_srcDst(c_icmpHdr, p_src, p_dst),
			extHdrList := omit,
			icmpType:= c_packetTooBig,
alex's avatar
alex committed
			icmpCode:= c_icmpCode0,
peter's avatar
peter committed
			checksum:= c_2ZeroBytes,
			mtu := p_mtu,
			data := omit
alex's avatar
alex committed
		}
peter's avatar
peter committed

validator's avatar
""  
validator committed
		/*
		 *	@param  p_src Binary IPv6 address associated with the
		 *          test component.
		 *	@param  p_dst Binary IPv6 address associated with NUT.
		 *	@param  p_mtu MTU value to be sent.
		*/
		template PacketTooBig m_packetTooBig_noExtHdr_mtu_data (
			template Ipv6Address p_src,
			template Ipv6Address p_dst,
			UInt32 p_mtu,
			octetstring p_data
		) := {
			ipv6Hdr := m_ipHdr_nextHdr_srcDst(c_icmpHdr, p_src, p_dst),
			extHdrList := omit,
			icmpType:= c_packetTooBig,
			icmpCode:= c_icmpCode0,
			checksum:= c_2ZeroBytes,
			mtu := p_mtu,
			data := p_data
		}


alex's avatar
alex committed
		/*
		 *	@param  p_src Binary IPv6 address associated with the
		 *          test component.
		 *	@param  p_dst Binary IPv6 address associated with NUT.
peter's avatar
peter committed
		 *	@param  p_icmpCode ICMPv6 Code value in the received message.
alex's avatar
alex committed
		*/
peter's avatar
peter committed
		template PacketTooBig mw_packetTooBig_noExtHdr_code (
			template Ipv6Address p_src,
			template Ipv6Address p_dst,
			UInt8 p_icmpCode
		) := {
			ipv6Hdr := mw_ipHdr_nextHdr_srcDst(c_icmpHdr, p_src, p_dst),
			extHdrList := omit,
			icmpType:= c_packetTooBig,
			icmpCode:= p_icmpCode,
			checksum:= ?,
			mtu := ?,
			data := *
alex's avatar
alex committed
		}

peter's avatar
peter committed
	} // end group Packet_Too_Big
alex's avatar
alex committed

	group ICMPv6_Parameter_Problem {

peter's avatar
peter committed
		/*
		 *	@param  p_src Binary IPv6 address associated with the
		 *          test component.
		 *	@param  p_dst Binary IPv6 address associated with NUT.
		 *	@param  p_hopLimit Number of hops to be used in IPv6 header.
		 *	@param  p_icmpCode ICMPv6 type to be used
		 *	@param  p_pointer ICMPv6 pointer to be used
		*/
peter's avatar
peter committed
		template ParameterProblem m_parameterProblem_noExtHdr_hop (
peter's avatar
peter committed
			template Ipv6Address p_src,
			template Ipv6Address p_dst,
			UInt8 p_hopLimit,
			UInt8 p_icmpCode,
validator's avatar
""  
validator committed
			UInt32 p_pointer,
			octetstring p_data
peter's avatar
peter committed
		) := {
peter's avatar
peter committed
			ipv6Hdr := m_ipHdr_nextHdr_hop_srcDst(c_icmpHdr, p_hopLimit, p_src, p_dst),
peter's avatar
peter committed
			extHdrList := omit,
			icmpType:= c_parameterProblem,
			icmpCode:= p_icmpCode,
			checksum:= c_2ZeroBytes,
			pointer := p_pointer,
validator's avatar
""  
validator committed
			data := p_data
peter's avatar
peter committed
		}

alex's avatar
alex committed
		/*
		 *	@param  p_src Binary IPv6 address associated with the
		 *          test component.
		 *	@param  p_dst Binary IPv6 address associated with NUT.
		*/
peter's avatar
peter committed
		template ParameterProblem mw_parameterProblem (
alex's avatar
alex committed
			template Ipv6Address p_src,
peter's avatar
peter committed
			template Ipv6Address p_dst
alex's avatar
alex committed
		) := {
peter's avatar
peter committed
			ipv6Hdr := mw_ipHdr_nextHdr_srcDst(?, p_src, p_dst),
alex's avatar
alex committed
			extHdrList := *,
			icmpType:= c_parameterProblem,
peter's avatar
peter committed
			icmpCode:= ?,
alex's avatar
alex committed
			checksum:= ?,
peter's avatar
peter committed
			pointer := ?,
alex's avatar
alex committed
			data := *
		}

		/*
		 *	@param  p_src Binary IPv6 address associated with the
		 *          test component.
		 *	@param  p_dst Binary IPv6 address associated with NUT.
peter's avatar
peter committed
		 *	@param  p_icmpCode ICMPv6 code to be used
		 *	@param  p_pointer ICMPv6 pointer to be used
alex's avatar
alex committed
		*/
peter's avatar
peter committed
		template ParameterProblem mw_parameterProblem_code_pointer (
alex's avatar
alex committed
			template Ipv6Address p_src,
peter's avatar
peter committed
			template Ipv6Address p_dst,
			UInt8 p_icmpCode,
			UInt32 p_pointer
alex's avatar
alex committed
		) := {
peter's avatar
peter committed
			ipv6Hdr := mw_ipHdr_nextHdr_srcDst(?, p_src, p_dst),
alex's avatar
alex committed
			extHdrList := *,
			icmpType:= c_parameterProblem,
peter's avatar
peter committed
			icmpCode:= p_icmpCode,
alex's avatar
alex committed
			checksum:= ?,
peter's avatar
peter committed
			pointer := p_pointer,
alex's avatar
alex committed
			data := *
		}

	} // end group ICMPv6_Parameter_Problem

	group ICMPv6_Time_Exceeded {

peter's avatar
peter committed
		/*
		 *	@param  p_src Binary IPv6 address associated with the
		 *          test component.
		 *	@param  p_dst Binary IPv6 address associated with NUT.
		 *	@param  p_hopLimit Number of hops to be used in IPv6 header.
		 *	@param  p_icmpCode ICMPv6 type to be used
		*/
peter's avatar
peter committed
		template TimeExceeded m_timeExceeded_noExtHdr_hop (
peter's avatar
peter committed
			template Ipv6Address p_src,
			template Ipv6Address p_dst,
			UInt8 p_hopLimit,
validator's avatar
""  
validator committed
			UInt8 p_icmpCode,
			octetstring p_data
peter's avatar
peter committed
		) := {
peter's avatar
peter committed
			ipv6Hdr := m_ipHdr_nextHdr_hop_srcDst(c_icmpHdr, p_hopLimit, p_src, p_dst),
peter's avatar
peter committed
			extHdrList := omit,
			icmpType:= c_timeExceeded,
			icmpCode:= p_icmpCode,
			checksum:= c_2ZeroBytes,
			unused := 0,
validator's avatar
""  
validator committed
			data := p_data
peter's avatar
peter committed
		}

alex's avatar
alex committed
		/*
		 *	@param  p_src Binary IPv6 address associated with the
		 *          test component.
		 *	@param  p_dst Binary IPv6 address associated with NUT.
		 *	@param  p_icmpCode ICMPv6 code to be used
		*/
		template TimeExceeded mw_timeExceeded_noExtHdr (template Ipv6Address p_src,
														template Ipv6Address p_dst,
peter's avatar
peter committed
														template UInt8 p_icmpCode ) := {
peter's avatar
peter committed
			ipv6Hdr := mw_ipHdr_nextHdr_srcDst(c_icmpHdr, p_src, p_dst),
alex's avatar
alex committed
			extHdrList := omit,
			icmpType:= c_timeExceeded,
			icmpCode:= p_icmpCode,
			checksum:= ?,
			unused := ?,
			data := *
		}

	} // end group ICMPv6_Time_Exceeded

} // end module LibIpv6_Rfc2463Icmpv6_Templates