Commit f3b9483a authored by peter's avatar peter
Browse files

No commit message

No commit message
parent 63df986f
Loading
Loading
Loading
Loading
+11 −1
Original line number Original line Diff line number Diff line
@@ -553,7 +553,8 @@ group generalIpv6MessageTemplates{
	 *
	 *
	*/
	*/
	template Ipv6Packet mw_generalIpv6 (
	template Ipv6Packet mw_generalIpv6 (
							UInt8 p_nextHeader,
							//UInt8 p_nextHeader, modified by PK
							template UInt8 p_nextHeader,
							template Ipv6Address p_src,
							template Ipv6Address p_src,
							template Ipv6Address p_dst) := {
							template Ipv6Address p_dst) := {
		ipv6Hdr := mw_ipHdr_nextHdr_srcDst(p_nextHeader, p_src, p_dst),
		ipv6Hdr := mw_ipHdr_nextHdr_srcDst(p_nextHeader, p_src, p_dst),
@@ -722,6 +723,15 @@ group rfc3775Mipv6_ExtHdrTemplates {
			}
			}
		}
		}


//Added by PK
		template MipMessage mw_coti := {	
			careOfTestInit := {
				reserved := c_uInt16Zero,
				careOfInitCookie := ?,
				mipOptions := *
			}
		}

		template MipMessage mw_cot := {	
		template MipMessage mw_cot := {	
			careOfTest := {
			careOfTest := {
				careOfNonceIndex := ?,
				careOfNonceIndex := ?,
+161 −2
Original line number Original line Diff line number Diff line
@@ -595,6 +595,164 @@ module LibIpv6_Rfc3775Mipv6_Functions {
		return v_ret;
		return v_ret;
	}//end function f_sendRtAdvAndReceiveBindUpOffHome
	}//end function f_sendRtAdvAndReceiveBindUpOffHome
	
	
// Added by PK, almost the same as f_sendRtAdvAndReceiveBindUpOffHome
	/*
	 * @desc  Sends RtAdvertisements and waits for Binding Update while the MN is away from home
	 * @param p_paramsRt All IPv6 parameters of Test Node
	 * @param p_paramsIut All IPv6 parameters of Node Under Test
 	 * @param p_nrOfRtAdv Nr of RTadv to be sent by the Test Node
	*/
	function f_sendRtAdvAndReplyToBindUpOffHome(	template Ipv6NodeParams p_paramsRt,
													template Ipv6NodeParams p_paramsIut,
													UInt8 p_nrOfRtAdv)
	runs on Ipv6Node
	return FncRetCode {
		//Variables
		var FncRetCode v_ret := e_error;
		var UInt8 v_count := 0;
		var Ipv6Packet v_ipv6Packet;
		var UInt16 v_seqNr := 0;
		var UInt16 v_lifetime := 0;					
		var Ipv6Address v_mnCareOfAddr := c_16ZeroBytes;
		var Ipv6Address v_mnHomeAddr := c_16ZeroBytes;

		// Send an RtAdv message to have the MN create an address
		f_sendRtAdvWithPrefix_lifeTime (
			p_paramsRt.lla,
			c_allNodesMca,
			p_paramsRt.prefixLength,
			p_paramsRt.gla,
			c_infinitePrefixLifetime,
			c_infinitePrefixLifetime );

		tc_loop.start;
		alt {
			//1st alternative: m_optPad2 + Coa
			[]	ipPort.receive (
					mw_generalIpv6_extHdr_dst (
						c_dstHdr,
						p_paramsRt.haGlas[0],
						m_extHdrList_2Elem (
							m_extHdr_dstOptHeader (
								c_mipHdr,
								c_optLen2,
								m_dstOptList_2Elem (
									m_dstOpt_padN(m_optPad4),
									mw_dstOpt_homeAddr)),
							mw_extHdr_mipHeader (
								c_noNextHdr,
								c_bindingUpdate,
								mw_bindingUpdate (
									c_aFlag1,
									c_hFlag1,
									c_lFlag0,
									c_kFlag0,
									m_mipOptList_2Elem (
										m_mipOpt_padN(m_optPad2),
										m_mipOpt_altCoa(mw_altCoA))))))) -> value v_ipv6Packet {
					//Get SeqNr
					v_seqNr := v_ipv6Packet.extHdrList[1].mipHeader.mipMessage.bindingUpdate.sequenceNumber;
					//Get Lifetime
					v_lifetime := v_ipv6Packet.extHdrList[1].mipHeader.mipMessage.bindingUpdate.lifeTime;
					//Get CareOfAddress
					v_mnCareOfAddr := v_ipv6Packet.extHdrList[1].mipHeader.mipMessage.bindingUpdate.mipOptions[1].mipOptAltCoA.alternateCoA;
					//GetHomeAddress
					v_mnHomeAddr := v_ipv6Packet.extHdrList[0].destinationOptionHeader.destOptionList[1].homeAddressOption.homeAddress;
					v_ret := e_success;

					v_ret := f_sendGeneralIpv6 (
						m_generalIpv6_extHdr (
							c_routeHdr,
							p_paramsRt.haGlas[0],
							v_mnCareOfAddr,
							m_extHdrList_2Elem (
								m_extHdr_routingHeader (
									c_mipHdr,
									c_routeHdrLen2,
									c_routeHdrType2,
									c_routeHdrSegmentsLeft1,
									m_routingHeaderData_homeAddress(v_mnHomeAddr)),
								m_extHdr_mipHeader (
									c_noNextHdr,
									c_bindingAck,
									m_bindingAck(
										v_seqNr,
										v_lifetime,
										m_mipOptList_1Elem (
											m_mipOpt_padN(m_optPad4)))))));
				}
			//2nd alternative: m_optPad4
			[]	ipPort.receive (
					mw_generalIpv6_extHdr_dst (
						c_dstHdr,
						p_paramsRt.haGlas[0],
						m_extHdrList_2Elem (
							m_extHdr_dstOptHeader (
								c_mipHdr,
								c_optLen2,
								m_dstOptList_2Elem(
									m_dstOpt_padN(m_optPad4),
									mw_dstOpt_homeAddr)),
								mw_extHdr_mipHeader (
									c_noNextHdr,
									c_bindingUpdate,
									mw_bindingUpdate(
										c_aFlag1,
										c_hFlag1,
										c_lFlag0,
										c_kFlag0,
										m_mipOptList_1Elem(
											m_mipOpt_padN(m_optPad4))))))) -> value v_ipv6Packet {
					//Get SeqNr
					v_seqNr := v_ipv6Packet.extHdrList[1].mipHeader.mipMessage.bindingUpdate.sequenceNumber;
					//Get Lifetime
					v_lifetime := v_ipv6Packet.extHdrList[1].mipHeader.mipMessage.bindingUpdate.lifeTime;
					//Get CareOfAddress
					v_mnCareOfAddr := v_ipv6Packet.ipv6Hdr.sourceAddress;
					//GetHomeAddress
					v_mnHomeAddr := v_ipv6Packet.extHdrList[0].destinationOptionHeader.destOptionList[1].homeAddressOption.homeAddress;
					v_ret := e_success;

					v_ret := f_sendGeneralIpv6 (
						m_generalIpv6_extHdr (
							c_routeHdr,
							p_paramsRt.haGlas[0],
							v_mnCareOfAddr,
							m_extHdrList_2Elem (
								m_extHdr_routingHeader (
									c_mipHdr,
									c_routeHdrLen2,
									c_routeHdrType2,
									c_routeHdrSegmentsLeft1,
									m_routingHeaderData_homeAddress(v_mnHomeAddr)),
								m_extHdr_mipHeader (
									c_noNextHdr,
									c_bindingAck,
									m_bindingAck(
										v_seqNr,
										v_lifetime,
										m_mipOptList_1Elem (
											m_mipOpt_padN(m_optPad4)))))));
				}
			[]	tc_loop.timeout {
					f_sendRtAdvWithPrefix_lifeTime (
						p_paramsRt.lla,
						c_allNodesMca,
						p_paramsRt.prefixLength,
						p_paramsRt.gla,
						c_infinitePrefixLifetime,
						c_infinitePrefixLifetime );

					v_count := v_count + 1;
					if (v_count <= p_nrOfRtAdv) {
						tc_loop.start;
						repeat;
					}
				}
		}
		return v_ret;
	} // end function f_sendRtAdvAndReplyToBindUpOffHome
	
	/*
	/*
	 * @desc  Test Node is Att Home and sends RtAdvertisements and waits for Binding Update
	 * @desc  Test Node is Att Home and sends RtAdvertisements and waits for Binding Update
	 * @param p_paramsRt All IPv6 parameters of Test Node
	 * @param p_paramsRt All IPv6 parameters of Test Node
@@ -768,7 +926,7 @@ module LibIpv6_Rfc3775Mipv6_Functions {


		v_ret := f_sendGeneralIpv6(m_generalIpv6_extHdr (
		v_ret := f_sendGeneralIpv6(m_generalIpv6_extHdr (
										c_tunneledIpHdr,
										c_tunneledIpHdr,
										p_mnCoa,
										p_mnCoa, //TODO, it should be the home address
										p_haGlaNut,
										p_haGlaNut,
										m_extHdrList_2Elem(
										m_extHdrList_2Elem(
											m_extHdr_tunneledHeader(c_mipHdr, p_mnHoa, p_cnGla),
											m_extHdr_tunneledHeader(c_mipHdr, p_mnHoa, p_cnGla),
@@ -1694,7 +1852,8 @@ module LibIpv6_Rfc3775Mipv6_Functions {
				//Get Lifetime
				//Get Lifetime
				v_lifetime := v_ipv6Packet.extHdrList[1].mipHeader.mipMessage.bindingUpdate.lifeTime;
				v_lifetime := v_ipv6Packet.extHdrList[1].mipHeader.mipMessage.bindingUpdate.lifeTime;
				//Get CareOfAddress
				//Get CareOfAddress
				v_mnCareOfAddr1 := v_ipv6Packet.ipv6Hdr.sourceAddress;
				//mnCareOfAddr1 := v_ipv6Packet.ipv6Hdr.sourceAddress;
				v_mnCareOfAddr1 := v_ipv6Packet.extHdrList[1].mipHeader.mipMessage.bindingUpdate.mipOptions[1].mipOptAltCoA.alternateCoA;
				//TODO SMU read v_mnCareOfAddr from MipOptions
				//TODO SMU read v_mnCareOfAddr from MipOptions
				//GetHomeAddress
				//GetHomeAddress
				v_mnHomeAddr := v_ipv6Packet.extHdrList[0].destinationOptionHeader.destOptionList[1].homeAddressOption.homeAddress;
				v_mnHomeAddr := v_ipv6Packet.extHdrList[0].destinationOptionHeader.destOptionList[1].homeAddressOption.homeAddress;