Commit dec9674f authored by peter's avatar peter
Browse files

No commit message

No commit message
parent 7c139f00
Loading
Loading
Loading
Loading
+823 −787
Original line number Diff line number Diff line
@@ -21,6 +21,7 @@ module LibIpv6_Interface_TypesAndValues {
	import from LibIpv6_Rfc2461NeighborDiscovery_TypesAndValues {type all};
	import from LibIpv6_Rfc2894RouterRenumbering_TypesAndValues {type all};
	import from LibIpv6_Rfc3775Mipv6_TypesAndValues {type all};
	import from LibIpv6_Rfc4068FastHandovers_TypesAndValues all;
	import from LibIpv6_Rfc0768Udp_TypesAndValues all ;
	import from LibIpv6_CommonRfcs_TypesAndValues all;

@@ -108,12 +109,23 @@ group ipv6Packet {
		type Ipv6Packet Redirect;
		//Imported from Rfc 2894
		type Ipv6Packet RouterRenumbering;
	//Imported from Rfc XXXX Mipv6
		//Imported from Rfc 3775 Mipv6
		type Ipv6Packet HomeAgentAddressDiscoveryRequest;
		type Ipv6Packet HomeAgentAddressDiscoveryReply;
		type Ipv6Packet MobilePrefixSolicitation;
		type Ipv6Packet MobilePrefixAdvertisement;
		type Ipv6Packet MipRouterAdvertisement;
	//	type Ipv6Packet BindingUpdate;
	//	type Ipv6Packet BindingAcknowledgment;
	//	type Ipv6Packet BindingError;
		//Imported from Rfc 4068
		type Ipv6Packet RouterSolicitationForProxyRtAdv;
		type Ipv6Packet ProxyRouterAdvertisement;
		type Ipv6Packet HandoverInitiate;
		type Ipv6Packet HandoverAcknowledge;
		type Ipv6Packet FastBindingUpdate;
		type Ipv6Packet FastBindingAcknowledgment;
		type Ipv6Packet FastNeighborAdvertisement;
		//Default value
		type Ipv6Packet OtherIcmpv6;
		//Udp
@@ -142,12 +154,23 @@ group ipv6Packet {
			RedirectMsg								redirectMsg,
			//Imported from Rfc 2894
			RouterRenumberingMsg					routerRenumberingMsg,
		//Imported from Rfc XXXX Mipv6
			//Imported from Rfc 3775 Mipv6
			HomeAgentAddressDiscoveryRequestMsg		homeAgentAddrDiscRequestMsg,
			HomeAgentAddressDiscoveryReplyMsg		homeAgentAddrDiscReplyMsg,
			MobilePrefixSolicitationMsg				mobilePrefixSolMsg,
			MobilePrefixAdvertisementMsg			mobilePrefixAdvMsg,
			MobileRouterAdvertisementMsg			mobileRouterAdvMsg,//TODO check this
	//		BindingUpdateMsg						bindingUpdMsg,
	//		BindingAcknowledgmentMsg				bindingAckMsg,
	//		BindingErrorMsg							bindingErrMsg,
			//Imported from Rfc 4068
			RouterSolicitationForProxyRtAdvMsg		routerSolPrRtAdvMsg,
			ProxyRouterAdvertisementMsg				proxyRtAdvMsg,
			HandoverInitiateMsg						handoverInitMsg,
			HandoverAcknowledgeMsg					handoverAckMsg,
	//		FastBindingUpdateMsg					fastBUpdMsg,
	//		FastBindingAcknowledgmentMsg			fastBAckMsg,
	//		FastNeighborAdvertisementMsg			fastNbrAdvMsg,
			//Default value
			OtherIcmpv6Msg							otherIcmpv6Msg,
			//Udp
@@ -297,8 +320,6 @@ group rfc2460Root_TypesAndValues {

				group hbhOptions {



					const UInt8	c_maxNrHopByHopOption := 10;

					type union HopByHopOption {
@@ -728,13 +749,28 @@ group rfc3775Mipv6_ExtHdrTypesAndValues {
		
			}//end 	group mipConstants

		}//end group mipHeader	

	}//end group rfc3775Mipv6_ExtHdrTypesAndValues

	group rfc4068FastHandovers {

		group rfc4068HastHandovers_options {

			/*
			 * @desc   Derived from RFC4068, clause 6.4.4
			*/
			type record MobilityHeaderLinkLayerAddress {
				UInt8 		icmpType(c_fhMobilityHeaderLinkLayerAddress),
				UInt8 		optionLength,
				UInt8		optionCode,
				UInt8		pad0,
				Oct6to15	linkLayerAddr
			}

	}//end group mipHeader	
		} // end rfc4068HastHandovers_options

}//end group rfc3775Mipv6_ExtHdrTypesAndValues
	} // end group rfc4068FastHandovers

	group rfc4302Ah_ExtHdrTypesAndValues {
	
+81 −0
Original line number Diff line number Diff line
/*
 *	@author 	STF 276
 *  @version 	$Id$
 *	@desc		This module specifies common MIPv6 messages interchanges (= operations)
 *              for an Ipv6 test component.
 *              Functions do not set a test component verdict but instead
 *              use the function return value instead to notify the function
 *              caller about the success of the operation.
 *
 */
module LibIpv6_Rfc4068FastHandovers_Functions {

	//LibCommon
	import from LibCommon_BasicTypesAndValues all;
	import from LibCommon_DataStrings all;
	import from LibCommon_VerdictControl { type FncRetCode };
	import from LibCommon_Time all;
	//LibIpv6
	import from LibIpv6_Interface_TypesAndValues all ;
	import from LibIpv6_Interface_Templates all;
	import from LibIpv6_Interface_Functions all;
	import from LibIpv6_Interface_Functions all;
	import from LibIpv6_CommonRfcs_TypesAndValues all;
	import from LibIpv6_CommonRfcs_Templates all;
	import from LibIpv6_CommonRfcs_Functions all;
	import from LibIpv6_ExternalFunctions all;
	import from LibIpv6_ModuleParameters all ;
	import from LibIpv6_Rfc2461NeighborDiscovery_Templates all;
	import from LibIpv6_Rfc2461NeighborDiscovery_TypesAndValues all;
	import from LibIpv6_Rfc2461NeighborDiscovery_Functions all;
	import from LibIpv6_Rfc2463Icmpv6_Functions all;
	import from LibIpv6_Rfc2463Icmpv6_TypesAndValues all;
	import from LibIpv6_Rfc3775Mipv6_TypesAndValues all;
	import from LibIpv6_Rfc3775Mipv6_Templates all;
	import from LibIpv6_Rfc4068FastHandovers_TypesAndValues all;
	import from LibIpv6_Rfc4068FastHandovers_Templates all;
	import from LibIpv6_Interface_TypesAndValues all;
	import from LibIpv6_Interface_Templates all;
	import from LibIpv6_Interface_Functions all;
	//AtsIpv6
	import from AtsIpv6_TestSystem all;
	import from AtsIpv6_TestConfiguration_TypesAndValues all;
	import from AtsIpv6_ModuleParameters all ;

		/*
		 * @desc  	This sends an ICMPv6 Proxy Router Advertisement from a router node
		 *			to any NUT. Prior it modifies IPv6 packet payload length
		 *			and ICMPv6 checksum to their correct values
		 * @remark  The template passed in must NOT contain any matching expressions!
		 * @param 	p_prRtAdv Ipv6 packet template with Proxy Router Advertisement to be sent
		 * @return 	execution status
		*/
		function f_sendPrRtAdv (in template RouterAdvertisement p_prRtAdv)
		runs on LibIpv6Node
		return FncRetCode {
			var Ipv6Packet v_ipPkt;
			v_ipPkt := valueof(p_prRtAdv);
			//set extensionHeaders
			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_sendPrRtAdv: Error when calculating length of extension headers ****");
					return e_error;
				}
			}
			//calc payloadLen
			v_ipPkt.ipv6Hdr.payloadLength := fx_payloadLength (v_ipPkt);
			//set checksum to zero
			v_ipPkt.ipv6Payload.routerAdvMsg.checksum := c_2ZeroBytes;
			//calc checksum
			v_ipPkt.ipv6Payload.routerAdvMsg.checksum := fx_icmpv6Checksum(v_ipPkt);
			//send
			ipPort.send(v_ipPkt);

			return e_success;

		} // end f_sendPrRtAdv

} // end module LibIpv6_Rfc4068FastHandovers_Functions
+19 −0
Original line number Diff line number Diff line
/*
 *	@author 	STF 276
 *  @version 	$Id$
 *	@desc 		This module contains templates for IPv6 headers and options
 *              based on an RFC 4068 for Fast Handovers and using types from  
 *              the Common library. Also it provides some useful constant 
 *              definitions.
 *  
 */
 module LibIpv6_Rfc4068FastHandovers_Templates {
	
	//LibCommon
	import from LibCommon_BasicTypesAndValues all;
	import from LibCommon_DataStrings all;
	//LibIpv6
	import from LibIpv6_CommonRfcs_TypesAndValues all;
	import from LibIpv6_Rfc4068FastHandovers_TypesAndValues all;

} // end module LibIpv6_Rfc4068FastHandovers_Templates
+235 −0
Original line number Diff line number Diff line
/*
 *	@author 	STF 276
 *  @version 	$Id$
 *	@desc 		This module defines the structure of IPv6 headers and options
 *              based on an RFC 4068 for Fast Handovers and using types from  
 *              the Common library. Also it provides some useful constant 
 *              definitions.
 *  
 */
 module LibIpv6_Rfc4068FastHandovers_TypesAndValues {
	
	//LibCommon
	import from LibCommon_BasicTypesAndValues all;
	import from LibCommon_DataStrings all;
	//LibIpv6
	import from LibIpv6_CommonRfcs_TypesAndValues all ;

	group rfc4068HastHandovers_constants {

		const UInt8 c_fHTypeId := 150;

		const UInt8 c_fHSubtypeRtSolPr := 2;
		const UInt8 c_fHSubtypePrRtAdv := 3;
		const UInt8 c_fHSubtypeHoInit := 4
		const UInt8 c_fHSubtypeHoAck := 5;

		const UInt8	c_fHCode0 := 0;
		const UInt8	c_fHCode1 := 1;
		const UInt8	c_fHCode2 := 2;
		const UInt8	c_fHCode3 := 3;
		const UInt8	c_fHCode4 := 4;
		const UInt8	c_fHCode128 := 128;
		const UInt8	c_fHCode130 := 130;

		const UInt8 c_fhStatusBUAccepted := 0;
		const UInt8 c_fhStatusBuAcceptedInvalidNCoA := 1;
		const UInt8 c_fhStatusUnspecifiedReason := 128;
		const UInt8 c_fhStatusAdministrativelyProhibited := 129;
		const UInt8 c_fhStatusInsufficientResources := 130;
		const UInt8 c_fhStatusIncorrectInterfaceIdentifierLength := 131;

		const UInt8 c_fhIpAddress := 17;
		const UInt8 c_fhNewRouterPrefixInfo := 18;
		const UInt8 c_fhNewLinkLayerAddress := 19;
		const UInt8 c_fhMobilityHeaderLinkLayerAddress := 7;
		const UInt8 c_fhNeighborAdvertisementAcknowledgment := 20;

		const UInt8	c_oldCoA := 1;
		const UInt8	c_newCoA := 2;
		const UInt8	c_newRouter := 3;

		const UInt8	c_requestingResolution := 0;
		const UInt8	c_newAPLinkLayerAddress := 1;
		const UInt8	c_mNLinkLayerAddress := 2;
		const UInt8	c_newRouterLinkLayerAddress := 2;
		const UInt8	c_sourceRtSolPrOrPrRtAdv := 4;
		const UInt8	c_aPBelongsToCurrentInterface := 5;
		const UInt8	c_noPrefixInfo := 6;
		const UInt8	c_noFastHandoverSupport := 7;

		const UInt8 c_status1 := 1;
		const UInt8 c_status2 := 2;
		const UInt8	c_status128 := 128;
		
		const UInt8 c_mipCodeAcceptedButPrefixDiscoveryNecessary := 1;

	} // end  rfc4068HastHandovers_constants

	group rfc4068HastHandovers_messages {

		/*
		 * @desc Derived from RFC4068, clause 6.1.1
		*/
		type record RouterSolicitationForProxyRtAdvMsg {
			UInt8 			icmpType(c_fHTypeId),
			UInt8 			icmpCode,
			Oct2 			checksum,
			UInt8			subtype(c_fHSubtypeRtSolPr),
			UInt8			reserved,
			UInt16			identifier,
			FHRtSolPrOptions	fHRtSolPrOptions optional
		}
//TODO
//		with {
//			encode "";
//		}
		
		/*
		 * @desc	Possible options in RouterSolicitationForProxyRtAdvMsg
		*/
		type set FHRtSolPrOptions {
			//Imported
			SrcLinkLayerAddress 		fHSrcLinkLayerAddr optional,
			//Not imported
			NewLinkLayerAddress			fHNewAPLinkLayerAddress optional
		}

		/*
		 * @desc Derived from RFC4068, clause 6.1.2
		*/
		type record ProxyRouterAdvertisementMsg {
			UInt8 			icmpType(c_fHTypeId),
			UInt8 			icmpCode,
			Oct2 			checksum,
			UInt8			subtype(c_fHSubtypePrRtAdv),
			UInt8			reserved,
			UInt16			identifier,
			FHPrRtAdvOptions	fHPrRtAdvOptions optional
		}
//TODO
//		with {
//			encode "";
//		}
		
		/*
		 * @desc	Possible options in ProxyRouterAdvertisementMsg
		*/
		type set FHPrRtAdvOptions {
			//Imported
			SrcLinkLayerAddress 		fHSrcLinkLayerAddr optional,
			//Not imported
			NewLinkLayerAddress			fHNewAPLinkLayerAddress optional,
			NewLinkLayerAddress			fHNewRouterLinkLayerAddress optional,
			IpAddress					fHNewRouterIpAddress optional,
			NewRouterPrefixInfo			fHNewRouterPrefixInfo optional,
			IpAddress					fHNewCareOfAddress optional
		}

		/*
		 * @desc Derived from RFC4068, clause 6.2.1
		*/
		type record HandoverInitiateMsg {
			UInt8 			icmpType(c_fHTypeId),
			UInt8 			icmpCode,
			Oct2 			checksum,
			UInt8			subtype(c_fHSubtypeHoInit),
			UInt1			sFlag,
			UInt1			uFlag,
			UInt6			reserved,
			UInt16			identifier,
			FHHoInitOptions	fHHoInitOptions optional
		}
//TODO
//		with {
//			encode "";
//		}
		
		/*
		 * @desc	Possible options in HandoverInitiateMsg
		*/
		type set FHHoInitOptions {
			//Not imported
			NewLinkLayerAddress		fHMNLinkLayerAddress optional,
			IpAddress				fHPreviousCareOfAddress optional,
			IpAddress				fHNewCareOfAddress optional
		}

		/*
		 * @desc Derived from RFC4068, clause 6.1.2
		*/
		type record HandoverAcknowledgeMsg {
			UInt8 			icmpType(c_fHTypeId),
			UInt8 			icmpCode,
			Oct2 			checksum,
			UInt8			subtype(c_fHSubtypeHoAck),
			UInt8			reserved,
			UInt16			identifier,
			FHHoAckOptions	fHHoAckOptions optional
		}
//TODO
//		with {
//			encode "";
//		}
		
		/*
		 * @desc	Possible options in HandoverAcknowledgeMsg
		*/
		type set FHHoAckOptions {
			//Not imported
			IpAddress				fHNewCareOfAddress optional
		}

	} //end rfc4068HastHandovers_messages

	group rfc4068HastHandovers_options {

		/*
		 * @desc   Derived from RFC4068, clause 6.4.1
		*/
		type record IpAddress {
			UInt8 		icmpType(c_fhIpAddress),
			UInt8 		optionLength,
			UInt8		optionCode,
			UInt8		prefixLength,
			UInt32		reserved,
			Ipv6Address	ipv6Address
		}

		/*
		 * @desc   Derived from RFC4068, clause 6.4.2
		*/
		type record NewRouterPrefixInfo {
			UInt8 		icmpType(c_fhNewRouterPrefixInfo),
			UInt8 		optionLength,
			UInt8		optionCode,
			UInt8		prefixLength,
			UInt32		reserved,
			Ipv6Address	addrPrefix
		}

		/*
		 * @desc   Derived from RFC4068, clause 6.4.3
		*/
		type record NewLinkLayerAddress {
			UInt8 		icmpType(c_fhNewLinkLayerAddress),
			UInt8 		optionLength,
			UInt8		optionCode,
			Oct6to15	linkLayerAddr
		}

		/*
		 * @desc   Derived from RFC4068, clause 6.4.5
		*/
		type record NeighborAdvertisementAcknowledgment {
			UInt8 		icmpType(c_fhNeighborAdvertisementAcknowledgment),
			UInt8 		optionLength,
			UInt8		optionCode,
			UInt8		status,
			UInt32		reserved,
			Ipv6Address	newCoA optional
		}

	} // end rfc4068HastHandovers_options

} // end module LibIpv6_Rfc4068FastHandovers_TypesAndValues