Commit 11996468 authored by berge's avatar berge
Browse files

Merged Phase2 into trunk (123->202)

parent 6bc7594a
Loading
Loading
Loading
Loading
+37 −20
Original line number Diff line number Diff line
@@ -16,30 +16,47 @@
	import from LibIpv6_Rfc2460Root_TypesAndValues all;
	import from LibIpv6_Interface all;
	import from LibIpv6_ExternalFunctions all;
	import from LibIpv6_MultiRfcs_Functions all;
	import from LibIpv6_MultiRfcs_TypesAndValues all;

	group ipv6Packets {	

	/*
		 * @desc  	This sends an IPv6 epacket from an IPv6 node to 
		 *          any NUT. Prior it modifies IPv6 packet payload length.
		 * @remark  The template passed in must NOT contain any matching expressions!
		 * @param 	p_genIpv6 Ipv6 packet value or template with Ipv6 packet to be sent
	 * @desc 	This sends a General IPv6 packet
	 *			from an IPv6 node to any NUT.
	 *			A General IPv6 packet is used in the case where only Extension headers
	 *			need to be sent.
	 * @remark  Time limit is defined by module parameter PX_TAC (see comp type)
	 * @param 	p_msg MIPHeader to be sent	
	 * @return 	execution status
	*/
		function f_sendIpv6Packet (in template GeneralIpv6 p_genIpv6) 
	function f_sendGeneralIpv6(template GeneralIpv6 p_msg)
	runs on LibIpv6Node
	return FncRetCode {
		//Variables
		var Ipv6Packet v_ipPkt;
			v_ipPkt.generalIpv6 := valueof(p_genIpv6);
		v_ipPkt.generalIpv6 := 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,
										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);
		//send
		ipPort.send(v_ipPkt.generalIpv6);

		return e_success;
	}//end f_sendGeneralIpv6


        }//end f_sendIpv6Packet

    } //end group ipv6Packets

	
} // end module LibIpv6_Rfc2460Root_Functions
+266 −25
Original line number Diff line number Diff line
@@ -17,7 +17,7 @@
	import from LibIpv6_Rfc2460Root_TypesAndValues all ;
	import from LibIpv6_Rfc2462StatelessAddressAutoconf_TypesAndValues all;

	group ipv6Header{
	group ipv6HeaderTemplates{

		/*
		 *	@param  p_nextHdr Next header identifier value to be used.
@@ -59,6 +59,20 @@
			destinationAddress := p_dst
		}

		/*
		 *	@param  p_nextHdr Next header identifier value to be used.
	    */
		template Ipv6Header mw_ipHdr := {
			version 		:= c_ipv6Version ,
			trafficClass 	:= ?, //c_trafficClassZero ,
			flowLabel 		:= c_flowLabelZero ,
			payloadLength 	:= ?,
			nextHeader 		:= ?,
			hopLimit 		:= ?,
			sourceAddress 	:= ?,
			destinationAddress := ?
		}

		/*
		 *	@param  p_nextHdr Next header identifier value to be used.
	    */
@@ -109,6 +123,24 @@
			destinationAddress := p_dst
		}

		/*
		 *	@param  p_nextHdr Next header identifier value to be used.
		 *	@param  p_src Binary IPv6 address associated with the
		 *          test component.
		 *	@param  p_dst Binary IPv6 address associated with NUT.
	    */
		template Ipv6Header mw_ipHdr_nextHdr_dst (	template UInt8 p_nextHdr,
													template Ipv6Address p_dst) := {
			version 		:= c_ipv6Version ,
			trafficClass 	:= ? ,
			flowLabel 		:= ? ,
			payloadLength 	:= ?,
			nextHeader 		:= p_nextHdr,
			hopLimit 		:= ?,
			sourceAddress 	:= ?,
			destinationAddress := p_dst
		}

		/*
		 *	@param  p_nextHdr Next header identifier value to be used.
		 *	@param  p_hopLimit Number of hops to be used.
@@ -146,14 +178,16 @@
			destinationAddress := p_dst
		}

	} // end ipv6Header
	} // end group ipv6HeaderTemplates

	group extensionHeaderTemplates {

	group extensionHeader {
		group extensionHeaderListTemplates {

		/*
		 *	@param  p_extHdr First element in extension header
	    */
		template ExtensionHeaderList m_extHdrList_elemNo1 ( template ExtensionHeader p_extHdr ) := {
		template ExtensionHeaderList m_extHdrList_1Elem ( template ExtensionHeader p_extHdr ) := {
			p_extHdr
		}

@@ -161,7 +195,7 @@
		 *	@param  p_extHdr1 First element in extension header
		 *	@param  p_extHdr2 Second element in extension header
	    */
		template ExtensionHeaderList m_extHdrList_elemNo2 ( template ExtensionHeader p_extHdr1,
		template ExtensionHeaderList m_extHdrList_2Elem ( template ExtensionHeader p_extHdr1,
			template ExtensionHeader p_extHdr2
		) := {
			p_extHdr1,
@@ -173,7 +207,7 @@
		 *	@param  p_extHdr2 Second element in extension header
		 *	@param  p_extHdr3 Second element in extension header		 
		*/
		template ExtensionHeaderList m_extHdrList_elemNo3 ( template ExtensionHeader p_extHdr1,
		template ExtensionHeaderList m_extHdrList_3Elem ( template ExtensionHeader p_extHdr1,
			template ExtensionHeader p_extHdr2,
			template ExtensionHeader p_extHdr3	
		) := {
@@ -182,6 +216,10 @@
			p_extHdr3
		}

		}//end group extensionHeaderListTemplates

		group dstOptHeaderTemplates {

		/*
		 *	@param  p_nextHeader Next header identifier value to be used
		 *	@param  p_hdrExtLen Length of this extension header
@@ -199,6 +237,10 @@
			}
		}

		}//end group dstOptHeaderTemplates

		group fragmentHeaderTemplates {

		/*
		 *	@param  p_nextHeader Next header identifier value to be used
		 *	@param  p_fragmentOffset The offset, in 8-octet units, of the
@@ -223,6 +265,10 @@
			}
		}

		}//end group fragmentHeaderTemplates

		group hbhOptHeaderTemplates {

		/*
		 *	@param  p_nextHeader Next header identifier value to be used
		 *	@param  p_hdrExtLen Length of this extension header
@@ -240,6 +286,10 @@
			}
		}

		}//end hbhOptHeaderTemplates

		group routingHeaderTemplates {

		/*
		 *	@param  p_nextHeader Next header identifier value to be used
		 *	@param  p_hdrExtLen Length of this extension header in 8-octet units
@@ -264,22 +314,134 @@
			}
		}

		group Routing_Header {
		/*
		 *	@param  p_nextHeader Next header identifier value to be used
		 *	@param  p_hdrExtLen Length of this extension header in 8-octet units
		 *	@param  p_routingType Type of the routing header
		 *	@param  p_segmentsLeft Number of route segments remaining
		 *	@param  p_routingHeaderData A list of IPv6 addresses
	    */
		template ExtensionHeader mw_extHdr_routingHeader (
			UInt8 p_nextHeader,
			UInt8 p_hdrExtLen,
			UInt8 p_routingType,
			UInt8 p_segmentsLeft,
			template RoutingHeaderData p_routingHeaderData
		) := {
			routingHeader := {
				nextHeader := p_nextHeader,
				hdrExtLen := p_hdrExtLen,
				routingType := p_routingType,
				segmentsLeft := p_segmentsLeft,
				reserved := ?,
				routingHeaderData := p_routingHeaderData
			}
		}


		/*
		 *	@param  p_ipv6Address First IPv6 address in the routing header
		*/
			template RoutingHeaderData m_routingHeaderData_ipv6AddressList_elemNo1 ( template Ipv6Address p_ipv6Address ) := {
				ipv6AddressList := {
		template RoutingHeaderData m_routingHeaderData_ipv6AddressList_1Elem ( template Ipv6Address p_ipv6Address ) := {
			rtHdrDataIpv6AddressList := {
				p_ipv6Address
			}
		}

		} // end group Routing_Header
		/*
		 *	@param  p_ipv6Address First IPv6 address in the routing header
		*/
		template RoutingHeaderData m_routingHeaderData_homeAddress ( template Ipv6Address p_ipv6Address ) := {
			rtHdrDataHomeAddress := p_ipv6Address
		}


		}//end group routingHeaderTemplates
		
		group mipHeaderTemplates {

	
			template ExtensionHeader m_extHdr_mipHeader ( 	UInt8 p_payloadProtocol,
															UInt8 p_mobilityHeaderType,
															template MipMessage p_mipMessage) := {
				mipHeader := {
					payloadProtocol := p_payloadProtocol,
					headerLen := c_uInt8Zero,
					mobilityHeaderType := p_mobilityHeaderType,  
					reserved := c_uInt8Zero,           
					checksum := c_2ZeroBytes,     
					mipMessage := p_mipMessage
				}
			}

			template ExtensionHeader mw_extHdr_mipHeader ( 	UInt8 p_payloadProtocol,
															UInt8 p_mobilityHeaderType,
															template MipMessage p_mipMessage) := {
				mipHeader := {
					payloadProtocol := p_payloadProtocol,
					headerLen := ?,
					mobilityHeaderType := p_mobilityHeaderType,  
					reserved := ?,           
					checksum := ?,     
					mipMessage := p_mipMessage
				}
			}



		}//end group mipHeaderTemplates

		group tunnelHdrTemplates {
			
		/*	@desc	Tunnel Hdr can use copy of IPv6Header for all fields except nextHdr
		 *			However, here no copies are used, but Zero Values.
		 *	@param  p_nextHdr Next header identifier value to be used.
		 *	@param  p_src Binary IPv6 address associated with the
		 *          test component.
		 *	@param  p_dst Binary IPv6 address associated with NUT.
	    */
		template ExtensionHeader m_extHdr_tunneledHeader(	UInt8 p_nextHdr,
										template Ipv6Address p_src,
										template Ipv6Address p_dst) := {
			tunneledIpv6 := {
				version 		:= c_ipv6Version ,
				trafficClass 	:= c_trafficClassZero ,
				flowLabel 		:= c_flowLabelZero ,
				payloadLength 	:= c_zeroPayloadLength, //16
				nextHeader 		:= p_nextHdr,
				hopLimit 		:= c_hopLimit255,
				sourceAddress 	:= p_src,
				destinationAddress := p_dst
			}
		}

		/*	@desc	Tunnel Hdr can use copy of IPv6Header for all fields except nextHdr
		 *			However, here no copies are used, but Zero Values.
		 *	@param  p_nextHdr Next header identifier value to be used.
		 *	@param  p_src Binary IPv6 address associated with the
		 *          test component.
		 *	@param  p_dst Binary IPv6 address associated with NUT.
	    */
		template ExtensionHeader mw_extHdr_tunneledHeader(	UInt8 p_nextHdr,
										template Ipv6Address p_src,
										template Ipv6Address p_dst) := {
			tunneledIpv6 := {
				version 		:= c_ipv6Version ,
				trafficClass 	:= ? ,
				flowLabel 		:= ? ,
				payloadLength 	:= ?, 
				nextHeader 		:= p_nextHdr,
				hopLimit 		:= ?,
				sourceAddress 	:= p_src,
				destinationAddress := p_dst
			}
		}
			
		}//end group tunnelHdrTemplates

	} // end extensionHeader

	group generalIpv6MessageType {
	group generalIpv6MessageTemplates{

		/*
		 *	@param  p_nextHeader Next header identifier value to be used.
@@ -301,6 +463,25 @@
			data:= p_data
		}

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

		/*
		 *	@param  p_nextHeader Next header identifier value to be used.
		 *	@param  p_extHdrList List of extension header in the packet.
@@ -319,12 +500,72 @@
			data:= *
		}

    } //end group generalIpv6MessageType
    } //end group generalIpv6MessageTemplates

	group ipPacketsWithOnlyExtensionHdrsTemplates {
		
		/*
		 *	@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.
		 *
		*/
		template GeneralIpv6 m_generalIpv6_srcDst(
			UInt8 p_nextHeader,
			template Ipv6Address p_src,
			template Ipv6Address p_dst,
			template ExtensionHeaderList p_extHdrList
		) := {
			ipv6Hdr := m_ipHdr_nextHdr_srcDst(p_nextHeader, p_src, p_dst),
			extHdrList := p_extHdrList,
			data := omit
		}

		/*
		 *	@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.
		 *
		*/
		template GeneralIpv6 mw_generalIpv6_srcDst(
			UInt8 p_nextHeader,
			template Ipv6Address p_src,
			template Ipv6Address p_dst,
			template ExtensionHeaderList p_extHdrList
		) := {
			ipv6Hdr := mw_ipHdr_nextHdr_srcDst(p_nextHeader, p_src, p_dst),
			extHdrList := p_extHdrList,
			data := *
		}

		/*
		 *	@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.
		 *
		*/
		template GeneralIpv6 mw_generalIpv6_dst(
			UInt8 p_nextHeader,
			template Ipv6Address p_dst,
			template ExtensionHeaderList p_extHdrList
		) := {
			ipv6Hdr := mw_ipHdr_nextHdr_dst(p_nextHeader, p_dst),
			extHdrList := p_extHdrList,
			data := *
		}
		
	}//end group ipPacketsWithOnlyExtensionHdrsTemplates

    group ipv6Address {
    group ipv6AddressTemplates {

        template Ipv6Address mw_anyIpv6Address := ?

    } //end group ipv6Address
    } //end group ipv6AddressTemplates

} // end module LibIpv6_Rfc2460Root_Templates
+65 −42
Original line number Diff line number Diff line
@@ -14,6 +14,7 @@
	//LibIpv6
	import from LibIpv6_MultiRfcs_TypesAndValues all ;


	group commonIpv6Values {
		const UInt4			c_ipv6Version := 6;
		//Unspecified address
@@ -43,6 +44,7 @@
		const UInt8		c_routeHdrSegmentsLeft1 := 1;
		const UInt8		c_routeHdrSegmentsLeft2 := 2;
		const UInt8		c_routeHdrType0 := 0;
		const UInt8		c_routeHdrType2 := 2;
	}//end group extHdrValues


@@ -62,19 +64,29 @@
			Ipv6Address	sourceAddress,
			Ipv6Address destinationAddress
		}
//		with {
//			encode (payloadLength) "intTag=\"IPv6Header_payloadLength\";";
//			encode (nextHeader) "tag=\"nextHeader\";";
//		}
		with {
			encode (payloadLength) "intTag='IPv6Header_payloadLength';";
			encode (nextHeader) "tag='nextHeader';";
		}
		
		/*
		 * @desc Derived from RFC 2460 Section 3
		 * @url http://www.ietf.org/rfc/rfc2460.txt
		*/
		type Ipv6Header TunneledIpv6Header
		with {
			encode "present=isEOF()== false && (valueOf(dec.getTag('nextHeader'))==41);";
		}
	
		
	} // end ipv6HeaderRelatedTypes

	group extensionHeaders {

		type set length(1 .. c_maxIpv6ExtHdrs) of ExtensionHeader ExtensionHeaderList;
//		with {
//			encode "present=isEOF()== false && ((valueOf(dec.getTag(\"nextHeader\"))==0) || (valueOf(dec.getTag(\"nextHeader\"))==43) || (valueOf(dec.getTag(\"nextHeader\"))==44) || (valueOf(dec.getTag(\"nextHeader\"))==60) || (valueOf(dec.getTag(\"nextHeader\"))==51) || (valueOf(dec.getTag(\"nextHeader\"))==50) || (valueOf(dec.getTag(\"nextHeader\"))==41))";
//		}
		type set length(1 .. c_maxIpv6ExtHdrs) of ExtensionHeader ExtensionHeaderList
		with {
			encode "present=isEOF()== false && ((valueOf(dec.getTag('nextHeader'))==0) || (valueOf(dec.getTag('nextHeader'))==43) || (valueOf(dec.getTag('nextHeader'))==44) || (valueOf(dec.getTag('nextHeader'))==60) || (valueOf(dec.getTag('nextHeader'))==51) || (valueOf(dec.getTag('nextHeader'))==50) || (valueOf(dec.getTag('nextHeader'))==41) || (valueOf(dec.getTag('nextHeader'))==135))";
		}
		
		/*
		 * @desc Mainly derived from many RFC 2460
@@ -87,16 +99,15 @@
			RoutingHeader		routingHeader,
			FragmentHeader		fragmentHeader,
			DestOptionHeader 	destinationOptionHeader,
			Ipv6Header			tunnelIPv6/*,
			MobilityHeader		mobilityHeader,
			AuthHeader			authHeader,
			EspHeader			espHeader,
			OtherIpv6ExtHdr		otherHeader
*/
			TunneledIpv6Header	tunneledIpv6,
			MipHeader			mipHeader,//defined in LibIpv6_MultiRfcs_TypesAndValues
			AuthHeader			authHeader, //defined in LibIpv6_MultiRfcs_TypesAndValues
			EspHeader			espHeader //defined in LibIpv6_MultiRfcs_TypesAndValues
		//	OtherIpv6ExtHdr		otherHeader
		} 
		with {
			encode "present=isEOF()== false && ((valueOf(dec.getTag('nextHeader'))==0) || (valueOf(dec.getTag('nextHeader'))==43) || (valueOf(dec.getTag('nextHeader'))==44) || (valueOf(dec.getTag('nextHeader'))==60) || (valueOf(dec.getTag('nextHeader'))==51) || (valueOf(dec.getTag('nextHeader'))==50) || (valueOf(dec.getTag('nextHeader'))==41) || (valueOf(dec.getTag('nextHeader'))==135))";
		}
//		with {
//			encode "present=isEOF()== false && ((valueOf(dec.getTag(\"nextHeader\"))==0) || (valueOf(dec.getTag(\"nextHeader\"))==43) || (valueOf(dec.getTag(\"nextHeader\"))==44) || (valueOf(dec.getTag(\"nextHeader\"))==60) || (valueOf(dec.getTag(\"nextHeader\"))==51) || (valueOf(dec.getTag(\"nextHeader\"))==50) || (valueOf(dec.getTag(\"nextHeader\"))==41))";
//		}

		/*
		 * @desc Derived from  RFC 2460 Section 4.3
@@ -106,11 +117,11 @@
			UInt8			hdrExtLen,
			HopByHopOptionList 	hopByHopOptionList
		} 
//		with {
//			encode "present=(valueOf(getTag(\"nextHeader\")) == 0);";
//			encode (nextHeader) "tag=\"nextHeader\";";
//			encode (hdrExtLen) "tag=\"hdrExtLen\";intTag=\"hdrExtIntLen\"*8+8-2;intTag=\"IPv6Header_payloadLength\",getIntTag(\"IPv6Header_payloadLength\")-";
//		}
		with {
			encode "present=(valueOf(getTag('nextHeader')) == 0);";
			encode (nextHeader) "tag='nextHeader';";
			encode (hdrExtLen) "tag='hdrExtLen';intTag='hdrExtIntLen',value*8+8-2;intTag='IPv6Header_payloadLength',getIntTag('IPv6Header_payloadLength')-value*8-8";
		}
		

		/*
@@ -124,12 +135,12 @@
			UInt32              reserved,
			RoutingHeaderData	routingHeaderData optional
		}
//		with {
//			encode "present=(valueOf(getTag(\"nextHeader\")) == 43);";
//			encode (nextHeader) "tag=\"nextHeader\";";
//			encode (hdrExtLen) "tag=\"hdrExtLen\";intTag=\"IPv6Header_payloadLength\",getIntTag(\"IPv6Header_payloadLength\")-";
//			encode (routingType) "tag=\"routingType\";";
//		}
		with {
			encode "present=(valueOf(getTag('nextHeader')) == 43);";
			encode (nextHeader) "tag='nextHeader';";
			encode (hdrExtLen) "tag='hdrExtLen';intTag='hdrExtIntLen',value*8+8-8;intTag='IPv6Header_payloadLength',getIntTag('IPv6Header_payloadLength')-value*8-8";
			encode (routingType) "tag='routingType';";
		}
		
		/*
		 * @remark A RoutingHeaderData value should be only 
@@ -137,7 +148,8 @@
		 *		   and to mipDate when 2 (Length req. to be checked!!)
		*/
		type union RoutingHeaderData{
			Ipv6AddressList	ipv6AddressList,
			RtHdrDataIpv6AddressList	rtHdrDataIpv6AddressList,
			RtHdrDataHomeAddress		rtHdrDataHomeAddress,
			MipData						mipData
		}
		
@@ -154,10 +166,10 @@
			UInt1	moreFlag,
			UInt32	identification 
		}
//		with {
//			encode "present=(valueOf(getTag(\"nextHeader\")) == 44);";
//			encode (nextHeader) "tag=\"nextHeader\";intTag=\"IPv6Header_payjoadLength\",getIntTag(\"IPv6Header_payloadLength\")-8";
//		} 
		with {
			encode "present=(valueOf(getTag('nextHeader')) == 44);";
			encode (nextHeader) "tag='nextHeader';intTag='IPv6Header_payloadLength',getIntTag('IPv6Header_payloadLength')-8";
		} 
		
	
		/*
@@ -168,11 +180,11 @@
			UInt8			hdrExtLen,
			DestOptionList 	destOptionList 
		}
//		with {
//			encode "present=(valueOf(getTag(\"nextHeader\")) == 60);";
//			encode (nextHeader) "tag=\"nextHeader\";";
//			encode (hdrExtLen) "tag=\"hdrExtLen\";intTag=\"hdrExtIntLen\"*8+8-2;intTag=\"IPv6Header_payloadLength\",getIntTag(\"IPv6Header_payloadLength\")-";
//		} 
		with {
			encode "present=(valueOf(getTag('nextHeader')) == 60);";
			encode (nextHeader) "tag='nextHeader';";
			encode (hdrExtLen) "tag='hdrExtLen';intTag='hdrExtIntLen',value*8+8-2;intTag='IPv6Header_payloadLength',getIntTag('IPv6Header_payloadLength')-value*8-8";
		} 
		
	} // end extensionHeaders 
	
@@ -188,7 +200,18 @@
        }
        with {
	        encode "isPDU=LibIpv6_Rfc2460Root_TypesAndValues;";
//        	encode (data) "length=getIntTag(\"IPv6Header_payloadLength\");";
        	encode (data) "length=getIntTag('IPv6Header_payloadLength');";
        }

		/*
		 * @desc PDU type derived from RFC2460
		*/
		type record GeneralIpv6Payload {
			ExtensionHeaderList extHdrList optional,
			octetstring	data optional
        }
        with {
	        encode "TODO";
        }
        
    } //end group generalIpv6MessageType
+143 −7

File changed.

Preview size limit exceeded, changes collapsed.

+162 −29

File changed.

Preview size limit exceeded, changes collapsed.

Loading