Commit b961e28b authored by seb's avatar seb
Browse files

No commit message

No commit message
parent 99db1bbe
Loading
Loading
Loading
Loading
+57 −0
Original line number Diff line number Diff line
@@ -16,6 +16,7 @@
	import from LibIpv6_Rfc2460Root_TypesAndValues all;
	import from LibIpv6_Interface all;
	import from LibIpv6_ExternalFunctions all;
	import from LibIpv6_MultiRfcs_Functions all;

	group ipv6Packets {	

@@ -42,4 +43,60 @@

    } //end group ipv6Packets

	group extHdrFns {
		
		/*
	 * @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_sendIpv6ExtHdrs(template Ipv6ExtHdrs p_msg)
		runs on LibIpv6Node
		return FncRetCode {

			var Ipv6Packet v_ipPkt;
			v_ipPkt.ipv6ExtHdrs := valueof(p_msg);
			//calc payloadLen
			v_ipPkt.ipv6ExtHdrs.ipv6Hdr.payloadLength := fx_payloadLength (v_ipPkt);
			//set extensionHeaders
			if(f_setExtensionHeaders(v_ipPkt.ipv6ExtHdrs.extHdrList) != e_success) {
				log(" **** f_sendIpv6ExtHdrs: Error whem calculating length of extension headers ****");
				return e_error;
			}
			//send
			ipPort.send(v_ipPkt.ipv6ExtHdrs);

			return e_success;
		}
		
	/*
	 * @desc 	This goes through the extension header list and calculates length, checksum
	 *			and other specific functions of the different extension headers
	 * @param 	p_msg ExtensionHeaderList to be treated	
	 * @return 	execution status 
	*/
	function f_setExtensionHeaders(inout ExtensionHeaderList p_extHdrList)
	runs on LibIpv6Node
	return FncRetCode {
		var UInt8 i;
	
		//select ext hdrs that need special calculation
		for (i:=0; i<=sizeof(p_extHdrList);i:=i+1) {
			if (ischosen(p_extHdrList[i].mipHeader)) {
				f_setMipHeader(p_extHdrList[i].mipHeader);
			}
		/*	else if (ischosen(p_extHdrList[i].)) {
				f_setSecurityHdr();
			}  */
		}	

		return e_success;
	}		

	}//end group extHdrFns
	
} // end module LibIpv6_Rfc2460Root_Functions
+217 −22
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.
	    */
@@ -146,9 +160,11 @@
			destinationAddress := p_dst
		}

	} // end ipv6Header
	} // end group ipv6HeaderTemplates

	group extensionHeader {
	group extensionHeaderTemplates {

		group extensionHeaderListTemplates {

		/*
		 *	@param  p_extHdr First element in extension header
@@ -182,6 +198,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 +219,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 +247,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 +268,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,7 +296,30 @@
			}
		}

		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
@@ -275,11 +330,92 @@
			}
		}

		} // end group Routing_Header
		}//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_tunnelHeader(	UInt8 p_nextHdr,
										template Ipv6Address p_src,
										template Ipv6Address p_dst) := {
			tunnelIpv6 := {
				version 		:= c_ipv6Version ,
				trafficClass 	:= c_trafficClassZero ,
				flowLabel 		:= c_flowLabelZero ,
				payloadLength 	:= c_zeroPayloadLength, 
				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_tunnelHeader(	UInt8 p_nextHdr,
										template Ipv6Address p_src,
										template Ipv6Address p_dst) := {
			tunnelIpv6 := {
				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 +437,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 +474,52 @@
			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 Ipv6ExtHdrs m_ipv6ExtHdrs_srcDst(
			UInt8 p_nextHeader,
			template ExtensionHeaderList p_extHdrList,
			template Ipv6Address p_src,
			template Ipv6Address p_dst
		) := {
			ipv6Hdr := m_ipHdr_nextHdr_srcDst(p_nextHeader, p_src, p_dst),
			extHdrList := p_extHdrList
		}

		/*
		 *	@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 Ipv6ExtHdrs mw_ipv6ExtHdrs_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
		}
		
	}//end group ipPacketsWithOnlyExtensionHdrsTemplates

    group ipv6Address {
    group ipv6AddressTemplates {

        template Ipv6Address mw_anyIpv6Address := ?

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

} // end module LibIpv6_Rfc2460Root_Templates
+17 −7
Original line number Diff line number Diff line
@@ -43,6 +43,7 @@
		const UInt8		c_routeHdrSegmentsLeft1 := 1;
		const UInt8		c_routeHdrSegmentsLeft2 := 2;
		const UInt8		c_routeHdrType0 := 0;
		const UInt8		c_routeHdrType2 := 2;
	}//end group extHdrValues


@@ -87,10 +88,10 @@
			RoutingHeader		routingHeader,
			FragmentHeader		fragmentHeader,
			DestOptionHeader 	destinationOptionHeader,
			Ipv6Header			tunnelIPv6/*,
			MobilityHeader		mobilityHeader,
			AuthHeader			authHeader,
			EspHeader			espHeader,
			Ipv6Header			tunnelIpv6,
			MipHeader			mipHeader/*,//defined in LibIpv6_MultiRfcs_TypesAndValues
			AuthHeader			authHeader, //defined in LibIpv6_MultiRfcs_TypesAndValues
			EspHeader			espHeader, //defined in LibIpv6_MultiRfcs_TypesAndValues
			OtherIpv6ExtHdr		otherHeader
*/
		} 
@@ -178,6 +179,15 @@
	
	group generalIpv6MessageType {


		/*
		 * @desc PDU type derived from RFC2460
		*/
		type record Ipv6ExtHdrs {
			Ipv6Header			ipv6Hdr,
			ExtensionHeaderList extHdrList
        }

		/*
		 * @desc PDU type derived from RFC2460
		*/
+2 −2
Original line number Diff line number Diff line
@@ -23,9 +23,9 @@ module LibIpv6_Rfc2461NeighborDiscovery_Functions {
	import from LibIpv6_ModuleParameters all ;
	import from LibIpv6_Rfc2461NeighborDiscovery_Templates all;
	import from LibIpv6_Rfc2461NeighborDiscovery_TypesAndValues all;
	import from LibIpv6_Rfc2463Icmpv6_Functions all;
	import from LibIpv6_MultiRfcs_TypesAndValues all;
	import from LibIpv6_MultiRfcs_Templates all;
	import from LibIpv6_MultiRfcs_Functions all;

	group redirect {

+23 −12
Original line number Diff line number Diff line
@@ -559,6 +559,7 @@
			curHopLimit:= c_hopLimit255,
			managedConfigFlag:=p_mFlag,
			otherConfigFlag:=p_oFlag,
			homeAgentFlag := c_haFlag0,
			reserved:=0,
			routerLifetime:=p_lifetime,
			reachableTime:=p_reachTime,
@@ -595,7 +596,8 @@
			curHopLimit:= c_hopLimit255,
			managedConfigFlag:=p_mFlag,
			otherConfigFlag:=p_oFlag,
			reserved:= c_uInt6Max,
			homeAgentFlag := c_haFlag0,
			reserved:= 0,
			routerLifetime:=p_lifetime,
			reachableTime:=p_reachTime,
			retransTimer:=p_retransTimer,
@@ -631,7 +633,8 @@
			curHopLimit:= c_hopLimit255,
			managedConfigFlag:=p_mFlag,
			otherConfigFlag:=p_oFlag,
			reserved:= c_uInt6Max,
			homeAgentFlag := c_haFlag0,
			reserved:= 0,
			routerLifetime:=p_lifetime,
			reachableTime:=p_reachTime,
			retransTimer:=p_retransTimer,
@@ -665,7 +668,8 @@
			curHopLimit:= c_hopLimit255,
			managedConfigFlag:=p_mFlag,
			otherConfigFlag:=p_oFlag,
			reserved:= c_uInt6Max,
			homeAgentFlag := c_haFlag0,
			reserved:= c_uInt5Max,
			routerLifetime:=p_lifetime,
			reachableTime:=p_reachTime,
			retransTimer:=p_retransTimer,
@@ -686,6 +690,7 @@
			curHopLimit:= c_hopLimit0,
			managedConfigFlag:= c_mFlag0,
			otherConfigFlag:= c_oFlag0,
			homeAgentFlag := c_haFlag0,
			reserved:= 0,
			routerLifetime:=c_infiniteLifetime,
			reachableTime:=c_unspecifiedReachTime,
@@ -704,6 +709,7 @@
			curHopLimit:= ?,
			managedConfigFlag:=?,
			otherConfigFlag:=?,
			homeAgentFlag := ?,
			reserved:= 0,
			routerLifetime:=?,
			reachableTime:=?,
@@ -726,6 +732,7 @@
			curHopLimit:= ?,
			managedConfigFlag:=?,
			otherConfigFlag:=?,
			homeAgentFlag := ?,
			reserved:= 0,
			routerLifetime:=?,
			reachableTime:=?,
@@ -748,6 +755,7 @@
			curHopLimit:= ?,
			managedConfigFlag:=?,
			otherConfigFlag:=?,
			homeAgentFlag := ?,
			reserved:= 0,
			routerLifetime:=?,
			reachableTime:=?,
@@ -971,6 +979,7 @@
			prefixLength:= p_prefixLength,
			linkFlag:=p_lFlag,
			autoConfigFlag:=p_aFlag,
			rtAddrFlag := c_rtAddrFlag0,
			reserved1:=0,
			validLifetime:=p_validLifetime,
			preferredLifetime:=p_preferredLifetime,
@@ -997,7 +1006,8 @@
			prefixLength:= p_prefixLength,
			linkFlag:=p_lFlag,
			autoConfigFlag:=p_aFlag,
			reserved1:=c_uInt6Max,
			rtAddrFlag := c_rtAddrFlag0,
			reserved1:=0,
			validLifetime:=p_validLifetime,
			preferredLifetime:=p_preferredLifetime,
			reserved2:=c_uInt31Max,
@@ -1013,7 +1023,7 @@
		 *	@param  p_preferredLifetime Value for preffered life time duration.
		 *	@param  p_prefix Address prefix to be used
	    */
		template PrefixInfo p_prefixInfo_optLen (	template UInt8 p_prefixLength,
		template PrefixInfo m_prefixInfo_optLen (	template UInt8 p_prefixLength,
											UInt8 p_optionLength,
											UInt1 p_lFlag,
											UInt1 p_aFlag,
@@ -1025,6 +1035,7 @@
			prefixLength:= p_prefixLength,
			linkFlag:=p_lFlag,
			autoConfigFlag:=p_aFlag,
			rtAddrFlag := c_rtAddrFlag0,
			reserved1:=0,
			validLifetime:=p_validLifetime,
			preferredLifetime:=p_preferredLifetime,
@@ -1277,7 +1288,7 @@
															template Ipv6Address p_prefix):={
			srcLinkLayerAddr := m_macSlla(p_macSlla),
			mtuOption:= omit,
			prefixInfoList := {  p_prefixInfo_optLen(	p_prefixLength,
			prefixInfoList := {  m_prefixInfo_optLen(	p_prefixLength,
												p_optionLength,
												p_lFlag,
												p_aFlag,
Loading