Commit 6da7e822 authored by berge's avatar berge
Browse files

Updated f_calcIpv6PayloadChecksum.

Cleaned f_setMobileHeader.
Modified f_send* functions.
parent 80c4e492
Loading
Loading
Loading
Loading
+215 −114
Original line number Diff line number Diff line
@@ -38,17 +38,18 @@ group rfc2460Root_Functions {
		//Variables
		var Ipv6Packet v_ipPkt;
		v_ipPkt := valueof(p_msg);

		//calc payloadLen
		v_ipPkt.ipv6Hdr.payloadLength := fx_payloadLength (v_ipPkt);
		
		//set extensionHeaders
		if (ispresent(v_ipPkt.extHdrList)) {
		if(f_setExtensionHeaders(	v_ipPkt,
									v_ipPkt.ipv6Hdr.sourceAddress,
									v_ipPkt.ipv6Hdr.destinationAddress) != e_success) {
			log(" **** f_sendGeneralIpv6: Error when calculating length of extension headers ****");
			return e_error;
		}
		}
		//calc payloadLen
		v_ipPkt.ipv6Hdr.payloadLength := fx_payloadLength (v_ipPkt);

		//send
		ipPort.send(v_ipPkt);

@@ -84,6 +85,9 @@ group rfc2460Root_Functions {
		v_pseudoDstAddr := v_activeIpv6Packet.ipv6Hdr.destinationAddress;
		v_pseudoSrcAddr := v_activeIpv6Packet.ipv6Hdr.sourceAddress;
		
		//calc payloadLen
		p_ipv6Packet.ipv6Hdr.payloadLength := fx_payloadLength (p_ipv6Packet);

		if (ispresent(v_activeIpv6Packet.extHdrList)) {
			for (i:=0; i<sizeof(v_activeIpv6Packet.extHdrList) and v_loop ;i:=i+1) {
				
@@ -198,6 +202,96 @@ group rfc2460Root_Functions {
				p_ipv6Packet.ipv6Payload.echoRequestMsg.checksum := fx_icmpv6Checksum(p_ipv6Packet);
			}
		}
		else if(ischosen(p_ipv6Packet.ipv6Payload.nbrAdvMsg)) {
			if(p_ipv6Packet.ipv6Payload.nbrAdvMsg.checksum == c_2ZeroBytes) {
				//calc checksum
				p_ipv6Packet.ipv6Payload.nbrAdvMsg.checksum := fx_icmpv6Checksum(p_ipv6Packet);
			}
		}
		else if(ischosen(p_ipv6Packet.ipv6Payload.nbrSolMsg)) {
			if(p_ipv6Packet.ipv6Payload.nbrSolMsg.checksum == c_2ZeroBytes) {
				//calc checksum
				p_ipv6Packet.ipv6Payload.nbrSolMsg.checksum := fx_icmpv6Checksum(p_ipv6Packet);
			}
		}
		else if(ischosen(p_ipv6Packet.ipv6Payload.routerAdvMsg)) {
			if(p_ipv6Packet.ipv6Payload.routerAdvMsg.checksum == c_2ZeroBytes) {
				//calc checksum
				p_ipv6Packet.ipv6Payload.routerAdvMsg.checksum := fx_icmpv6Checksum(p_ipv6Packet);
			}
		}
		else if(ischosen(p_ipv6Packet.ipv6Payload.routerSolMsg)) {
			if(p_ipv6Packet.ipv6Payload.routerSolMsg.checksum == c_2ZeroBytes) {
				//calc checksum
				p_ipv6Packet.ipv6Payload.routerSolMsg.checksum := fx_icmpv6Checksum(p_ipv6Packet);
			}
		}
		else if(ischosen(p_ipv6Packet.ipv6Payload.redirectMsg)) {
			if(p_ipv6Packet.ipv6Payload.redirectMsg.checksum == c_2ZeroBytes) {
				//calc checksum
				p_ipv6Packet.ipv6Payload.redirectMsg.checksum := fx_icmpv6Checksum(p_ipv6Packet);
			}
		}
		else if(ischosen(p_ipv6Packet.ipv6Payload.parameterProblemMsg)) {
			if(p_ipv6Packet.ipv6Payload.parameterProblemMsg.checksum == c_2ZeroBytes) {
				//calc checksum
				p_ipv6Packet.ipv6Payload.parameterProblemMsg.checksum := fx_icmpv6Checksum(p_ipv6Packet);
			}
		}
		else if(ischosen(p_ipv6Packet.ipv6Payload.timeExceededMsg)) {
			if(p_ipv6Packet.ipv6Payload.timeExceededMsg.checksum == c_2ZeroBytes) {
				//calc checksum
				p_ipv6Packet.ipv6Payload.timeExceededMsg.checksum := fx_icmpv6Checksum(p_ipv6Packet);
			}
		}
		else if(ischosen(p_ipv6Packet.ipv6Payload.packetTooBigMsg)) {
			if(p_ipv6Packet.ipv6Payload.packetTooBigMsg.checksum == c_2ZeroBytes) {
				//calc checksum
				p_ipv6Packet.ipv6Payload.packetTooBigMsg.checksum := fx_icmpv6Checksum(p_ipv6Packet);
			}
		}
		else if(ischosen(p_ipv6Packet.ipv6Payload.destinationUnreachableMsg)) {
			if(p_ipv6Packet.ipv6Payload.destinationUnreachableMsg.checksum == c_2ZeroBytes) {
				//calc checksum
				p_ipv6Packet.ipv6Payload.destinationUnreachableMsg.checksum := fx_icmpv6Checksum(p_ipv6Packet);
			}
		}
		else if(ischosen(p_ipv6Packet.ipv6Payload.mobileRouterAdvMsg)) {
			if(p_ipv6Packet.ipv6Payload.mobileRouterAdvMsg.checksum == c_2ZeroBytes) {
				//calc checksum
				p_ipv6Packet.ipv6Payload.mobileRouterAdvMsg.checksum := fx_icmpv6Checksum(p_ipv6Packet);
			}
		}
		else if(ischosen(p_ipv6Packet.ipv6Payload.homeAgentAddrDiscRequestMsg)) {
			if(p_ipv6Packet.ipv6Payload.homeAgentAddrDiscRequestMsg.checksum == c_2ZeroBytes) {
				//calc checksum
				p_ipv6Packet.ipv6Payload.homeAgentAddrDiscRequestMsg.checksum := fx_icmpv6Checksum(p_ipv6Packet);
			}
		}
		else if(ischosen(p_ipv6Packet.ipv6Payload.homeAgentAddrDiscReplyMsg)) {
			if(p_ipv6Packet.ipv6Payload.homeAgentAddrDiscReplyMsg.checksum == c_2ZeroBytes) {
				//calc checksum
				p_ipv6Packet.ipv6Payload.homeAgentAddrDiscReplyMsg.checksum := fx_icmpv6Checksum(p_ipv6Packet);
			}
		}
		else if(ischosen(p_ipv6Packet.ipv6Payload.mobilePrefixSolMsg)) {
			if(p_ipv6Packet.ipv6Payload.mobilePrefixSolMsg.checksum == c_2ZeroBytes) {
				//calc checksum
				p_ipv6Packet.ipv6Payload.mobilePrefixSolMsg.checksum := fx_icmpv6Checksum(p_ipv6Packet);
			}
		}
		else if(ischosen(p_ipv6Packet.ipv6Payload.mobilePrefixAdvMsg)) {
			if(p_ipv6Packet.ipv6Payload.mobilePrefixAdvMsg.checksum == c_2ZeroBytes) {
				//calc checksum
				p_ipv6Packet.ipv6Payload.mobilePrefixAdvMsg.checksum := fx_icmpv6Checksum(p_ipv6Packet);
			}
		}
		else if(ischosen(p_ipv6Packet.ipv6Payload.otherIcmpv6Msg)) {
			if(p_ipv6Packet.ipv6Payload.otherIcmpv6Msg.checksum == c_2ZeroBytes) {
				//calc checksum
				p_ipv6Packet.ipv6Payload.otherIcmpv6Msg.checksum := fx_icmpv6Checksum(p_ipv6Packet);
			}
		}
		
		return e_success;

@@ -248,28 +342,37 @@ group rfc3775Mipv6_ExtHdrFunctions {
			//     because it's assumed that the correct value was set on template level
			// 3) same applies to nonceIndex etc

			// TODO Check this 
			// Process Nonce Indices
			if (f_isPresentNonceIndices(p_mobileHeader.mobileMessage.bindingUpdateMsg, v_position) == e_success) {
				if (p_mobileHeader.mobileMessage.bindingUpdateMsg.mobileOptions[v_position].mobileOptNonceIndices.homeNonceIndex == c_uInt16Zero
					and p_mobileHeader.mobileMessage.bindingUpdateMsg.mobileOptions[v_position].mobileOptNonceIndices.careOfNonceIndex == c_uInt16Zero) {
					if(vc_mobileSec.mnSimuParams.receivedHomeNonceIndex != c_uInt16Zero
						and vc_mobileSec.mnSimuParams.receivedCareOfNonceIndex != c_uInt16Zero) {

				// Fill Home Nonce Index only when set to c_uInt16Zero
				if (p_mobileHeader.mobileMessage.bindingUpdateMsg.mobileOptions[v_position].mobileOptNonceIndices.homeNonceIndex == c_uInt16Zero ) {
					if(vc_mobileSec.mnSimuParams.receivedHomeNonceIndex != c_uInt16Zero) {
							p_mobileHeader.mobileMessage.bindingUpdateMsg.mobileOptions[v_position].mobileOptNonceIndices.homeNonceIndex
							:= vc_mobileSec.mnSimuParams.receivedHomeNonceIndex;
					}
					else {
						log("f_setMobileHeader: Info: NonceIndices included in Binding Update, but mnSimuParams.receivedHomeNonceIndex not initialized");
					}
				}
				
				// Fill Care-Of Nonce Index only when set to c_uInt16Zero
				if (p_mobileHeader.mobileMessage.bindingUpdateMsg.mobileOptions[v_position].mobileOptNonceIndices.careOfNonceIndex == c_uInt16Zero) {
					if(vc_mobileSec.mnSimuParams.receivedCareOfNonceIndex != c_uInt16Zero) {
							p_mobileHeader.mobileMessage.bindingUpdateMsg.mobileOptions[v_position].mobileOptNonceIndices.careOfNonceIndex
							:= vc_mobileSec.mnSimuParams.receivedCareOfNonceIndex;
					}
					else {
						log("f_setMobileHeader: Error: NonceIndices included in Binding Update, but mnSimuParams.receivedCareOfNonceIndex/receivedHomeNonceIndex not initialized");
						return e_error;	
					}
						log("f_setMobileHeader: Info: NonceIndices included in Binding Update, but mnSimuParams.receivedCareOfNonceIndex not initialized");
					}
				}
			} // end Process Nonce Indices
				
			if (f_isPresentBindingAuthorizationDataOption(p_mobileHeader.mobileMessage.bindingUpdateMsg, v_position) == e_success) {
				if(vc_mobileSec.mnSimuParams.receivedHomeKeygenToken != c_64ZeroBits
					and vc_mobileSec.mnSimuParams.receivedCareOfKeygenToken != c_64ZeroBits) {

				
						// kbm is different if BU is sent for de-registration				
						if (p_mobileHeader.mobileMessage.bindingUpdateMsg.lifeTime != 0) {
							vc_mobileSec.mnSimuParams.kbm := fx_mac(		e_sha1, c_1ZeroByte,
																			bit2oct(vc_mobileSec.mnSimuParams.receivedHomeKeygenToken)
@@ -296,6 +399,7 @@ group rfc3775Mipv6_ExtHdrFunctions {
						//set Authenticator to omit in order to calc the authenticator
						p_mobileHeader.mobileMessage.bindingUpdateMsg.mobileOptions[v_position].mobileBindingAuthorizationData.authenticator := omit;
				
						// compute authenticator
						p_mobileHeader.mobileMessage.bindingUpdateMsg.mobileOptions[v_position].mobileBindingAuthorizationData.authenticator 
								 := fx_mac(	e_hmac_sha1_96, vc_mobileSec.mnSimuParams.kbm,
																		p_srcAddr //careOfaddr 
@@ -312,18 +416,12 @@ group rfc3775Mipv6_ExtHdrFunctions {
		//SMU TODO
		//}
		
		// modified by AMB to easily send packets with wrong mobileHdrLen
		//calc mobileHeaderLen
		// calc mobileHeaderLen only when set to c_uInt8Zero
		if (p_mobileHeader.headerLen == c_uInt8Zero ) {
			p_mobileHeader.headerLen := fx_mipHeaderLength(p_mobileHeader);
		}

		// modified by PK to easily send packets with wrong checksum
		//set mipChecksum to zero
		//p_mobileHeader.checksum := c_2ZeroBytes;  
		
		//calc mipChecksum only when its set to c_2ZeroBytes
		// do no calc mipChecksum , but use the checksum from the template
		// calc mipChecksum only when set to c_2ZeroBytes
		if (p_mobileHeader.checksum == c_2ZeroBytes) {
			p_mobileHeader.checksum := fx_mipHeaderChecksum ( 	p_pseudoSrcAddr, 
																p_pseudoDstAddr, 
@@ -449,17 +547,18 @@ group rfc3775Mipv6_ExtHdrFunctions {
		//Variables
		var BindingUpdate v_ipPkt;
		v_ipPkt := valueof(p_msg);

		//calc payloadLen
		v_ipPkt.ipv6Hdr.payloadLength := fx_payloadLength (v_ipPkt);
		
		//set extensionHeaders
		if (ispresent(v_ipPkt.extHdrList)) {
		if(f_setExtensionHeaders(	v_ipPkt,
									v_ipPkt.ipv6Hdr.sourceAddress,
									v_ipPkt.ipv6Hdr.destinationAddress) != e_success) {
			log(" **** f_sendBU: Error when calculating length of extension headers ****");
			return e_error;
		}
		}
		//calc payloadLen
		v_ipPkt.ipv6Hdr.payloadLength := fx_payloadLength (v_ipPkt);

		//send
		ipPort.send(v_ipPkt);

@@ -480,17 +579,18 @@ group rfc3775Mipv6_ExtHdrFunctions {
		//Variables
		var BindingAcknowledgement v_ipPkt;
		v_ipPkt := valueof(p_msg);

		//calc payloadLen
		v_ipPkt.ipv6Hdr.payloadLength := fx_payloadLength (v_ipPkt);
		
		//set extensionHeaders
		if (ispresent(v_ipPkt.extHdrList)) {
		if(f_setExtensionHeaders(	v_ipPkt,
									v_ipPkt.ipv6Hdr.sourceAddress,
									v_ipPkt.ipv6Hdr.destinationAddress) != e_success) {
			log(" **** f_sendBA: Error when calculating length of extension headers ****");
			return e_error;
		}
		}
		//calc payloadLen
		v_ipPkt.ipv6Hdr.payloadLength := fx_payloadLength (v_ipPkt);
		
		//send
		ipPort.send(v_ipPkt);

@@ -511,17 +611,18 @@ group rfc3775Mipv6_ExtHdrFunctions {
		//Variables
		var BindingError v_ipPkt;
		v_ipPkt := valueof(p_msg);

		//calc payloadLen
		v_ipPkt.ipv6Hdr.payloadLength := fx_payloadLength (v_ipPkt);

		//set extensionHeaders
		if (ispresent(v_ipPkt.extHdrList)) {
		if(f_setExtensionHeaders(	v_ipPkt,
									v_ipPkt.ipv6Hdr.sourceAddress,
									v_ipPkt.ipv6Hdr.destinationAddress) != e_success) {
			log(" **** f_sendBE: Error when calculating length of extension headers ****");
			return e_error;
		}
		}
		//calc payloadLen
		v_ipPkt.ipv6Hdr.payloadLength := fx_payloadLength (v_ipPkt);

		//send
		ipPort.send(v_ipPkt);

@@ -542,17 +643,17 @@ group rfc3775Mipv6_ExtHdrFunctions {
		//Variables
		var BindingRefreshRequest v_ipPkt;
		v_ipPkt := valueof(p_msg);
		//set extensionHeaders
		if (ispresent(v_ipPkt.extHdrList)) {

		//calc payloadLen
		v_ipPkt.ipv6Hdr.payloadLength := fx_payloadLength (v_ipPkt);

		if(f_setExtensionHeaders(	v_ipPkt,
									v_ipPkt.ipv6Hdr.sourceAddress,
									v_ipPkt.ipv6Hdr.destinationAddress) != e_success) {
			log(" **** f_sendBR: Error when calculating length of extension headers ****");
			return e_error;
		}
		}
		//calc payloadLen
		v_ipPkt.ipv6Hdr.payloadLength := fx_payloadLength (v_ipPkt);

		//send
		ipPort.send(v_ipPkt);

@@ -573,17 +674,18 @@ group rfc3775Mipv6_ExtHdrFunctions {
		//Variables
		var HomeTest v_ipPkt;
		v_ipPkt := valueof(p_msg);

		//calc payloadLen
		v_ipPkt.ipv6Hdr.payloadLength := fx_payloadLength (v_ipPkt);

		//set extensionHeaders
		if (ispresent(v_ipPkt.extHdrList)) {
		if(f_setExtensionHeaders(	v_ipPkt,
									v_ipPkt.ipv6Hdr.sourceAddress,
									v_ipPkt.ipv6Hdr.destinationAddress) != e_success) {
			log(" **** f_sendHot: Error when calculating length of extension headers ****");
			return e_error;
		}
		}
		//calc payloadLen
		v_ipPkt.ipv6Hdr.payloadLength := fx_payloadLength (v_ipPkt);

		//send
		ipPort.send(v_ipPkt);

@@ -604,17 +706,18 @@ group rfc3775Mipv6_ExtHdrFunctions {
		//Variables
		var HomeTestInit v_ipPkt;
		v_ipPkt := valueof(p_msg);

		//calc payloadLen
		v_ipPkt.ipv6Hdr.payloadLength := fx_payloadLength (v_ipPkt);

		//set extensionHeaders
		if (ispresent(v_ipPkt.extHdrList)) {
		if(f_setExtensionHeaders(	v_ipPkt,
									v_ipPkt.ipv6Hdr.sourceAddress,
									v_ipPkt.ipv6Hdr.destinationAddress) != e_success) {
			log(" **** f_sendHoti: Error when calculating length of extension headers ****");
			return e_error;
		}
		}
		//calc payloadLen
		v_ipPkt.ipv6Hdr.payloadLength := fx_payloadLength (v_ipPkt);

		//send
		ipPort.send(v_ipPkt);

@@ -635,17 +738,18 @@ group rfc3775Mipv6_ExtHdrFunctions {
		//Variables
		var CareOfTestInit v_ipPkt;
		v_ipPkt := valueof(p_msg);

		//calc payloadLen
		v_ipPkt.ipv6Hdr.payloadLength := fx_payloadLength (v_ipPkt);

		//set extensionHeaders
		if (ispresent(v_ipPkt.extHdrList)) {
		if(f_setExtensionHeaders(	v_ipPkt,
									v_ipPkt.ipv6Hdr.sourceAddress,
									v_ipPkt.ipv6Hdr.destinationAddress) != e_success) {
			log(" **** f_sendCoti: Error when calculating length of extension headers ****");
			return e_error;
		}
		}
		//calc payloadLen
		v_ipPkt.ipv6Hdr.payloadLength := fx_payloadLength (v_ipPkt);

		//send
		ipPort.send(v_ipPkt);

@@ -666,17 +770,18 @@ group rfc3775Mipv6_ExtHdrFunctions {
		//Variables
		var CareOfTest v_ipPkt;
		v_ipPkt := valueof(p_msg);

		//calc payloadLen
		v_ipPkt.ipv6Hdr.payloadLength := fx_payloadLength (v_ipPkt);

		//set extensionHeaders
		if (ispresent(v_ipPkt.extHdrList)) {
		if(f_setExtensionHeaders(	v_ipPkt,
									v_ipPkt.ipv6Hdr.sourceAddress,
									v_ipPkt.ipv6Hdr.destinationAddress) != e_success) {
			log(" **** f_sendCoti: Error when calculating length of extension headers ****");
			return e_error;
		}
		}
		//calc payloadLen
		v_ipPkt.ipv6Hdr.payloadLength := fx_payloadLength (v_ipPkt);

		//send
		ipPort.send(v_ipPkt);

@@ -697,28 +802,24 @@ group rfc3775Mipv6_ExtHdrFunctions {
		//Variables
		var FastNeighborAdvertisement v_ipPkt;
		v_ipPkt := valueof(p_msg);

		//calc payloadLen
		v_ipPkt.ipv6Hdr.payloadLength := fx_payloadLength (v_ipPkt);

		//set extensionHeaders
		if (ispresent(v_ipPkt.extHdrList)) {
		if(f_setExtensionHeaders(	v_ipPkt,
									v_ipPkt.ipv6Hdr.sourceAddress,
									v_ipPkt.ipv6Hdr.destinationAddress) != e_success) {
			log(" **** f_sendFastNbrAdv: Error when calculating length of extension headers ****");
			return e_error;
		}
		}
		//calc payloadLen
		v_ipPkt.ipv6Hdr.payloadLength := fx_payloadLength (v_ipPkt);

		//send
		ipPort.send(v_ipPkt);

		return e_success;
	}//end f_sendFastNbrAdv

	



	
}//end group rfc3775Mipv6_ExtHdrFunctions


+50 −65
Original line number Diff line number Diff line
@@ -43,21 +43,18 @@ module LibIpv6_Rfc2461NeighborDiscovery_Functions {
		return FncRetCode {
			var Redirect v_ipPkt;
			v_ipPkt := valueof(p_redirect);

			//calc payloadLen
			v_ipPkt.ipv6Hdr.payloadLength := fx_payloadLength (v_ipPkt);

			//set extensionHeaders
			if (ispresent(v_ipPkt.extHdrList)) {
			if(f_setExtensionHeaders(	v_ipPkt,
										v_ipPkt.ipv6Hdr.sourceAddress,
										v_ipPkt.ipv6Hdr.destinationAddress) != e_success) {
				log(" **** f_sendRedirect: 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.redirectMsg.checksum := c_2ZeroBytes;
			//calc checksum
			v_ipPkt.ipv6Payload.redirectMsg.checksum := fx_icmpv6Checksum(v_ipPkt);

			//send
			ipPort.send(v_ipPkt);

@@ -82,21 +79,18 @@ module LibIpv6_Rfc2461NeighborDiscovery_Functions {
		return FncRetCode {
			var RouterAdvertisement v_ipPkt;
			v_ipPkt := valueof(p_rtAdv);

			//calc payloadLen
			v_ipPkt.ipv6Hdr.payloadLength := fx_payloadLength (v_ipPkt);

			//set extensionHeaders
			if (ispresent(v_ipPkt.extHdrList)) {
			if(f_setExtensionHeaders(	v_ipPkt,
										v_ipPkt.ipv6Hdr.sourceAddress,
										v_ipPkt.ipv6Hdr.destinationAddress) != e_success) {
				log(" **** f_sendRtAdv: 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);

@@ -235,21 +229,18 @@ module LibIpv6_Rfc2461NeighborDiscovery_Functions {
		return FncRetCode {
			var NeighborAdvertisement v_ipPkt;
			v_ipPkt := valueof(p_nbrAdv);

			//calc payloadLen
			v_ipPkt.ipv6Hdr.payloadLength := fx_payloadLength (v_ipPkt);

			//set extensionHeaders
			if (ispresent(v_ipPkt.extHdrList)) {	
			if(f_setExtensionHeaders(	v_ipPkt,
										v_ipPkt.ipv6Hdr.sourceAddress,
										v_ipPkt.ipv6Hdr.destinationAddress) != e_success) {
				log(" **** f_sendNbrAdv: 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.nbrAdvMsg.checksum := c_2ZeroBytes;
			//calc checksum
			v_ipPkt.ipv6Payload.nbrAdvMsg.checksum := fx_icmpv6Checksum(v_ipPkt);

			//send
			ipPort.send(v_ipPkt);

@@ -289,21 +280,18 @@ module LibIpv6_Rfc2461NeighborDiscovery_Functions {
		return FncRetCode {
			var NeighborSolicitation v_ipPkt;
			v_ipPkt := valueof(p_nbrSol);

			//calc payloadLen
			v_ipPkt.ipv6Hdr.payloadLength := fx_payloadLength (v_ipPkt);

			//set extensionHeaders
			if (ispresent(v_ipPkt.extHdrList)) {
			if(f_setExtensionHeaders(	v_ipPkt,
										v_ipPkt.ipv6Hdr.sourceAddress,
										v_ipPkt.ipv6Hdr.destinationAddress) != e_success) {
				log(" **** f_sendNbrSol: 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.nbrSolMsg.checksum := c_2ZeroBytes;
			//calc checksum
			v_ipPkt.ipv6Payload.nbrSolMsg.checksum := fx_icmpv6Checksum(v_ipPkt);

			//send
			ipPort.send(v_ipPkt);
			
@@ -324,21 +312,18 @@ module LibIpv6_Rfc2461NeighborDiscovery_Functions {
		return FncRetCode {
			var RouterSolicitation v_ipPkt;
			v_ipPkt := valueof(p_rtrSol);

			//calc payloadLen
			v_ipPkt.ipv6Hdr.payloadLength := fx_payloadLength (v_ipPkt);

			//set extensionHeaders
			if (ispresent(v_ipPkt.extHdrList)) {
			if(f_setExtensionHeaders(	v_ipPkt,
										v_ipPkt.ipv6Hdr.sourceAddress,
										v_ipPkt.ipv6Hdr.destinationAddress) != e_success) {
				log(" **** f_sendRtSol: 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.routerSolMsg.checksum := c_2ZeroBytes;
			//calc checksum
			v_ipPkt.ipv6Payload.routerSolMsg.checksum := fx_icmpv6Checksum(v_ipPkt);

			//send
			ipPort.send(v_ipPkt);
			
+68 −89
Original line number Diff line number Diff line
@@ -106,20 +106,17 @@
	return FncRetCode {
		var EchoReply v_ipPkt;
		v_ipPkt := valueof(p_echoReply);
		if (ispresent(v_ipPkt.extHdrList)) {

		//calc payloadLen
		v_ipPkt.ipv6Hdr.payloadLength := fx_payloadLength (v_ipPkt);

		if(f_setExtensionHeaders(	v_ipPkt,
									v_ipPkt.ipv6Hdr.sourceAddress,
									v_ipPkt.ipv6Hdr.destinationAddress) != e_success) {
			log(" **** f_sendEchoReply: 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.echoReplyMsg.checksum := c_2ZeroBytes;
		//calc checksum
		v_ipPkt.ipv6Payload.echoReplyMsg.checksum := fx_icmpv6Checksum(v_ipPkt);

		//send
		ipPort.send(v_ipPkt);
	
@@ -469,20 +466,17 @@
	return FncRetCode {
		var EchoRequest v_ipPkt;
		v_ipPkt := valueof(p_echoRequest);
		if (ispresent(v_ipPkt.extHdrList)) {

		//set payload length
		v_ipPkt.ipv6Hdr.payloadLength := p_payloadLength;

		if(f_setExtensionHeaders(	v_ipPkt,
									v_ipPkt.ipv6Hdr.sourceAddress,
									v_ipPkt.ipv6Hdr.destinationAddress) != e_success) {
			log(" **** f_sendEchoRequest_noCalcPayloadLength: Error when calculating length of extension headers ****");
			return e_error;
		}
		}
		//set payload length
		v_ipPkt.ipv6Hdr.payloadLength := p_payloadLength;
		//set checksum to zero
		v_ipPkt.ipv6Payload.echoRequestMsg.checksum := c_2ZeroBytes;
		//calc checksum
		v_ipPkt.ipv6Payload.echoRequestMsg.checksum := fx_icmpv6Checksum(v_ipPkt);

		//send
		ipPort.send(v_ipPkt);

@@ -603,21 +597,18 @@
	return FncRetCode {
		var OtherIcmpv6 v_ipPkt;
		v_ipPkt := valueof(p_otherIcmpv6);

		//calc payloadLen
		v_ipPkt.ipv6Hdr.payloadLength := fx_payloadLength (v_ipPkt);

		//set Extension Header
		if (ispresent(v_ipPkt.extHdrList)) {
		if(f_setExtensionHeaders(	v_ipPkt,
									v_ipPkt.ipv6Hdr.sourceAddress,
									v_ipPkt.ipv6Hdr.destinationAddress) != e_success) {
			log(" **** f_sendOtherIcmpv6: 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.otherIcmpv6Msg.checksum := c_2ZeroBytes;
		//calc checksum
		v_ipPkt.ipv6Payload.otherIcmpv6Msg.checksum := fx_icmpv6Checksum(v_ipPkt);

		//send
		ipPort.send(v_ipPkt);
		
@@ -640,21 +631,18 @@
	return FncRetCode {
		var DestinationUnreachable v_ipPkt;
		v_ipPkt := valueof(p_destUnreachable);

		//calc payloadLen
		v_ipPkt.ipv6Hdr.payloadLength := fx_payloadLength (v_ipPkt);

		//set Extension Header
		if (ispresent(v_ipPkt.extHdrList)) {
		if(f_setExtensionHeaders(	v_ipPkt,
									v_ipPkt.ipv6Hdr.sourceAddress,
									v_ipPkt.ipv6Hdr.destinationAddress) != e_success) {
			log(" **** f_sendDestUnreachable: 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.destinationUnreachableMsg.checksum := c_2ZeroBytes;
		//calc checksum
		v_ipPkt.ipv6Payload.destinationUnreachableMsg.checksum := fx_icmpv6Checksum(v_ipPkt);

		//send
		ipPort.send(v_ipPkt);
		
@@ -677,21 +665,18 @@
	return FncRetCode {
		var PacketTooBig v_ipPkt;
		v_ipPkt := valueof(p_packetTooBig);

		//calc payloadLen
		v_ipPkt.ipv6Hdr.payloadLength := fx_payloadLength (v_ipPkt);

		//set Extension Header
		if (ispresent(v_ipPkt.extHdrList)) {
		if(f_setExtensionHeaders(	v_ipPkt,
									v_ipPkt.ipv6Hdr.sourceAddress,
									v_ipPkt.ipv6Hdr.destinationAddress) != e_success) {
			log(" **** f_sendPacketTooBig: 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.packetTooBigMsg.checksum := c_2ZeroBytes;
		//calc checksum
		v_ipPkt.ipv6Payload.packetTooBigMsg.checksum := fx_icmpv6Checksum(v_ipPkt);

		//send
		ipPort.send(v_ipPkt);
		
@@ -714,21 +699,18 @@
	return FncRetCode {
		var TimeExceeded v_ipPkt;
		v_ipPkt := valueof(p_timeExceeded);

		//calc payloadLen
		v_ipPkt.ipv6Hdr.payloadLength := fx_payloadLength (v_ipPkt);

		//set Extension Header
		if (ispresent(v_ipPkt.extHdrList)) {
		if(f_setExtensionHeaders(	v_ipPkt,
									v_ipPkt.ipv6Hdr.sourceAddress,
									v_ipPkt.ipv6Hdr.destinationAddress) != e_success) {
			log(" **** f_sendTimeExceeded: 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.timeExceededMsg.checksum := c_2ZeroBytes;
		//calc checksum
		v_ipPkt.ipv6Payload.timeExceededMsg.checksum := fx_icmpv6Checksum(v_ipPkt);

		//send
		ipPort.send(v_ipPkt);
		
@@ -751,21 +733,18 @@
	return FncRetCode {
		var ParameterProblem v_ipPkt;
		v_ipPkt := valueof(p_parameterProblem);

		//calc payloadLen
		v_ipPkt.ipv6Hdr.payloadLength := fx_payloadLength (v_ipPkt);

		//set Extension Header
		if (ispresent(v_ipPkt.extHdrList)) {
		if(f_setExtensionHeaders(	v_ipPkt,
									v_ipPkt.ipv6Hdr.sourceAddress,
									v_ipPkt.ipv6Hdr.destinationAddress) != e_success) {
			log(" **** f_sendParameterProblem: 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.parameterProblemMsg.checksum := c_2ZeroBytes;
		//calc checksum
		v_ipPkt.ipv6Payload.parameterProblemMsg.checksum := fx_icmpv6Checksum(v_ipPkt);

		//send
		ipPort.send(v_ipPkt);
		
+40 −52

File changed.

Preview size limit exceeded, changes collapsed.

+36 −36

File changed.

Preview size limit exceeded, changes collapsed.