Commit 13a45b2c authored by seb's avatar seb
Browse files

Commit with deletion of MipExtHdr modules

parent cd133b15
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -12,8 +12,8 @@
	import from LibCommon_DataStrings all;
	import from LibCommon_VerdictControl { type FncRetCode };
	//LibIpv6
	import from LibIpv6_ExternalFunctions all;
	import from LibIpv6_Interface_TypesAndValues all ;
	import from LibIpv6_ExternalFunctions all;
	import from LibIpv6_ModuleParameters all ;
	import from LibIpv6_CommonRfcs_TypesAndValues all;
	import from LibIpv6_CommonRfcs_Templates all;
+0 −1
Original line number Diff line number Diff line
@@ -15,7 +15,6 @@ module LibIpv6_CommonRfcs_TypesAndValues {
	import from LibCommon_TextStrings all;
	import from LibCommon_Time all ;


	group DefaultConstants {
		const UInt16 c_defId 	:= 10; // for ICMP echo proc
		const UInt16 c_defSeqNo	:= 20; // for ICMP echo proc
+1 −5
Original line number Diff line number Diff line
@@ -16,11 +16,7 @@
	//LibIpv6
	import from LibIpv6_CommonRfcs_TypesAndValues { type all };
	import from LibIpv6_Interface_TypesAndValues all;
	

	import from LibIpv6_Rfc3775Mipv6_ExtHdrTypesAndValues all;
	

	import from LibIpv6_Interface_TypesAndValues all;

	/* @desc    This external function calculates the payload length
	 *			of a IPv6 packet
+248 −8
Original line number Diff line number Diff line
@@ -12,17 +12,12 @@
	import from LibCommon_DataStrings all;
	import from LibCommon_VerdictControl { type FncRetCode };
	//LibIpv6
	
	
	import from LibIpv6_Interface_TypesAndValues all;
	import from LibIpv6_Interface_Templates all;
	import from LibIpv6_ModuleParameters all;
	import from LibIpv6_ExternalFunctions all;
	import from LibIpv6_CommonRfcs_Functions all;
	import from LibIpv6_CommonRfcs_TypesAndValues all;
	import from LibIpv6_Rfc3775Mipv6_ExtHdrFunctions all;

	import from LibIpv6_ModuleParameters all;
	import from LibIpv6_ExternalFunctions all;
	import from LibIpv6_Interface_Templates all;
	
group rfc2460Root_Functions {
	
@@ -121,6 +116,251 @@ group rfc2460Root_Functions {
	
}//end group rfc2460Root_Functions

group rfc3775Mipv6_ExtHdrFunctions {
	
		//TODO check if better in CommonRfcFunctions
	function f_initMipSecParams()
	runs on LibIpv6Node {
		
	
		vc_mipSec.cnSimuParams := {
			homeNonceIndex := f_createHomeNonceIndex(),
			homeNonce := f_createHomeNonce(),
			kcn := f_createKcn(),
			homeKeygenToken := c_64ZeroBits,
			careOfKeygenToken := c_64ZeroBits,
			receivedHomeInitCookie := c_64ZeroBits,
			kbm := c_20ZeroBytes
		}

		vc_mipSec.mnSimuParams := {
			receivedHomeNonceIndex := c_uInt16Zero,
			//homeNonce := f_createHomeNonce(),
			//kcn := f_createKcn(),
			receivedHomeKeygenToken := c_64ZeroBits,
			receivedCareOfKeygenToken := c_64ZeroBits,
			homeInitCookie := f_createInitCookie(),
			kbm := c_20ZeroBytes
		}

		vc_mipSec.haSimuParams := vc_mipSec.cnSimuParams;

	}//end function f_initMipSecParams


	/*
	 * @desc 	This goes through the Mip header and calculates length, checksum
	 *			and other specific functions of the different messages.
	 *			This function is used when sending messages.
	 * @param 	p_msg ExtensionHeaderList to be treated	
	 * @return 	execution status 
	*/
	function f_setMipHeader(in Ipv6Address p_srcAddr,
							in Ipv6Address p_dstAddr,
							inout MipHeader p_mipHeader,
							in Ipv6Packet p_ipv6Packet)
	runs on LibIpv6Node
	return FncRetCode {
		var MipHeader v_mipHeader := valueof(p_mipHeader);
		var Ipv6Address v_homeAddress := c_16ZeroBytes ;

		//if (ischosen(p_mipHeader.mipMessage.homeTestInit)) {
			//calc homeInitCookie
			//p_mipHeader.mipMessage.homeTestInit.homeInitCookie := f_createInitCookie();
		//}
		//else if (ischosen(p_mipHeader.mipMessage.homeTest)) {//CNSimu sends this message
		//}
		//else if (ischosen(p_mipHeader.mipMessage.careOfTestInit) and (PX_TEST_IPSEC == true)) {
		//TODO
		//}
		//else if (ischosen(p_mipHeader.mipMessage.careOfTest) and (PX_TEST_IPSEC == true)) {
		//TODO
		//}
		if (ischosen(p_mipHeader.mipMessage.bindingUpdate)) {
			var UInt8 v_position := 0;
			if (f_isPresentBindingAuthorizationDataOption(p_mipHeader.mipMessage.bindingUpdate, v_position) == e_success) {
				var Oct20 v_bindingAuthenticator := fx_bindingAuthenticator(	  p_srcAddr,//careOfaddr 
																				  p_dstAddr,//cnAddr
																				  p_ipv6Packet,
																				  vc_mipSec.mnSimuParams.kbm) ;
				p_mipHeader.mipMessage.bindingUpdate.mipOptions[v_position].mipBindingAuthorizationData := {
						mipOptType := 5,
						mipOptLen := lengthof(v_bindingAuthenticator),
						authenticator := v_bindingAuthenticator
				}
			}
		}
	//	else if (ischosen(p_mipHeader.mipMessage.bindingAck) and (PX_TEST_IPSEC == true)) {
		//TODO
		//}
		//calc mipHeaderLen
		p_mipHeader.headerLen := fx_mipHeaderLength(p_mipHeader);
		//set mipChecksum to zero
		p_mipHeader.checksum := c_2ZeroBytes;  
		//calc mipChecksum
		p_mipHeader.checksum := fx_mipHeaderChecksum(	p_srcAddr,
														p_dstAddr,
														p_mipHeader);
		return e_success;
	}






 	//TODO find appropriate location

	/*
	 * @desc 	This generates a random Init Cookie
	 * @return 	Init Cookie
	*/
	function f_createInitCookie()
	runs on LibIpv6Node
	return Bit64 {
		var Bit64 v_cookie := int2bit(float2int(int2float(20000-5000)*rnd())+5000, 64);

		return v_cookie;
	}//end f_createInitCookie

	/*
	 * @desc 	This generates a random Home Nonce
	 * @return 	Init Cookie
	*/
	function f_createHomeNonce()
	runs on LibIpv6Node
	return octetstring {
		var octetstring v_homeNonce := int2oct(float2int(int2float(20000-5000)*rnd())+5000, 10);

		return v_homeNonce;
	}//end f_createHomeNonce

	/*
	 * @desc 	This generates a random Home Nonce Index
	 * @return 	Init Cookie
	*/
	function f_createHomeNonceIndex()
	runs on LibIpv6Node
	return UInt16 {
		var Oct2 v_homeNonceIndex := int2oct(float2int(int2float(20000-5000)*rnd())+5000, 2);

		return oct2int(v_homeNonceIndex);
	}//end f_createHomeNonceIndex


	/*
	 * @desc 	This generates CN's secret key
	 * @return 	Init Cookie
	*/
	function f_createKcn()
	runs on LibIpv6Node
	return Oct20 {
		var Oct20 v_kcn := int2oct(float2int(int2float(20000-5000)*rnd())+5000, 20);

		return v_kcn;
	}//end f_createHomeNonce

	/*
	 * @desc 	This generates a Home Keygen Token
	 * @param 	p_kcn Correspondant node's secret key
	 * @param 	p_homeAddr Home address
	 * @param 	p_nonce Home nonce
	 * @return 	Home Keygen Token
	*/
	function f_createHomeKeygenToken(in Oct20 p_kcn, in Ipv6Address p_homeAddr, in octetstring p_nonce)
	runs on LibIpv6Node
	return Bit64 {
		var octetstring v_mac := c_8ZeroBytes;
		var Oct8 v_token := c_8ZeroBytes;
		var UInt8 i;

		v_mac := fx_integrity(e_hmac_sha1_64, p_kcn, p_homeAddr & p_nonce & int2oct(0,1));

		for ( i := 0; i < 8; i := i + 1 ) {
			v_token[i] := v_mac[i];
		}

		return oct2bit(v_token);
	}//end f_createHomeKeygenToken

	/*
	 * @desc 	This generates a Care-of Keygen Token
	 * @param 	p_kcn Correspondant node's secret key
	 * @param 	p_careOfAddr Care-of address
	 * @param 	p_nonce Home nonce
	 * @return 	Care-of Keygen Token
	*/
	function f_createCareOfKeygenToken(in Oct20 p_kcn, in Ipv6Address p_careOfAddr, in octetstring p_nonce)
	runs on LibIpv6Node
	return Oct8 {
		var octetstring v_mac := c_8ZeroBytes;
		var Oct8 v_token := c_8ZeroBytes;
		var UInt8 i;

		v_mac := fx_integrity(e_sha1_96, p_kcn, p_careOfAddr & p_nonce & int2oct(1,1));

		for ( i := 0; i < 8; i := i + 1 ) {
			v_token[i] := v_mac[i];
		}

		return v_token;
	}//end f_createCareOfKeygenToken


	/*
	 * @desc 	This generates a Binding Management Key
	 * @param 	p_homeKeygenToken Home Keygen Token
	 * @param 	p_careOfKeygenToken Care-of Keygen Token 
	 * @return 	Binding Management Key
	*/
	function f_createBindingManagementKey(in Oct8 p_homeKeygenToken, in Oct8 p_careOfKeygenToken)
	runs on LibIpv6Node
	return Oct8 {
		var octetstring v_key := c_8ZeroBytes;

		v_key := fx_integrity(e_sha1_96, p_homeKeygenToken & p_careOfKeygenToken, c_cryptoDummyByte);

		return v_key;
	}//end f_createBindingManagementKey

	/*
	 * @desc 	This generates a random Security Parameters Index
	 * @return 	Security Parameters Index
	*/
	function f_createSecurityParametersIndex()
	runs on LibIpv6Node
	return Oct4 {
		var Oct4 v_spi := int2oct(float2int(int2float(20000-5000)*rnd())+5000, 4);

		return v_spi;
	}//end f_createSecurityParametersIndex

	/*
	 * @desc 	This goes through the BindingUpdate and
	 *			checks if a AuthorizationDataOption is present.
	 * @param 	p_bindingUpdate Binding Update to be treated
	 * @param 	v_position Position of the AuthorizationDataOption in the MipOptionList
	 * @return 	execution status 
	*/
	function f_isPresentBindingAuthorizationDataOption(	in BindingUpdate p_bindingUpdate,
														inout UInt8 v_position)
	runs on LibIpv6Node
	return FncRetCode {
		var FncRetCode v_ret := e_error;
		var UInt8 i;

		//select ext hdrs that need special calculation
		for (i:=0; i<sizeof(p_bindingUpdate.mipOptions) and (v_ret != e_success); i:=i+1) {
			if (ischosen(p_bindingUpdate.mipOptions[i].mipBindingAuthorizationData)) {
					v_position := i;
					v_ret := e_success;
				}
		}
		return v_ret;
	}//end function f_isPresentBindingAuthorizationDataOption
	
}//end group rfc3775Mipv6_ExtHdrFunctions


group rfc4303Esp_ExtHdrFunctions {
	
+206 −7
Original line number Diff line number Diff line
@@ -10,16 +10,11 @@
	import from LibCommon_BasicTypesAndValues all;
	import from LibCommon_DataStrings all;
	//LibIpv6
	import from LibIpv6_Interface_TypesAndValues all;
	import from LibIpv6_ExternalFunctions all;
	import from LibIpv6_ModuleParameters all ;
	import from LibIpv6_CommonRfcs_Templates all;
	import from LibIpv6_CommonRfcs_TypesAndValues all;
	
	//import from LibIpv6_Rfc2462StatelessAddressAutoconf_TypesAndValues all;

	import from LibIpv6_Interface_TypesAndValues all;

	import from LibIpv6_Rfc3775Mipv6_ExtHdrTypesAndValues all;
	import from LibIpv6_Rfc3775Mipv6_TypesAndValues all;

group rfc2460Root_Templates {
@@ -576,6 +571,210 @@ group generalIpv6MessageTemplates{

}//end group rfc2460Root_Templates

group rfc3775Mipv6_ExtHdrTemplates {
	
		group mobilityHdrMessageTemplates {
		
		
		template MipMessage m_bindingUpdate(	UInt16 p_seqNr,
												UInt1 p_aFlag,
												UInt1 p_hFlag,
												UInt1 p_lFlag,
												UInt1 p_kFlag,
												UInt16 p_lifeTime,
												template MipOptionList p_mipOptions) := {	
			bindingUpdate := {
				sequenceNumber := p_seqNr,
				aFlag := p_aFlag,
				hFlag := p_hFlag,
				lFlag := p_lFlag,
				kFlag := p_kFlag,
				reserved := c_uInt12Zero,
				lifeTime := p_lifeTime,		
				mipOptions := p_mipOptions
			}
		}

		template MipMessage mw_bindingUpdate(	UInt1 p_aFlag,
												UInt1 p_hFlag,
												UInt1 p_lFlag,
												UInt1 p_kFlag,
												template MipOptionList p_mipOptions) := {	
			bindingUpdate := {
				sequenceNumber := ?,
				aFlag := p_aFlag,
				hFlag := p_hFlag,
				lFlag := p_lFlag,
				kFlag := p_kFlag,
				reserved := c_uInt12Zero,
				lifeTime := ?,		
				mipOptions := p_mipOptions
			}
		}
		
		template MipMessage mw_bindingUpdate_lifeTime(	UInt1 p_aFlag,
												UInt1 p_hFlag,
												UInt1 p_lFlag,
												UInt1 p_kFlag,
												UInt16 p_lifetime,
												template MipOptionList p_mipOptions) := {	
			bindingUpdate := {
				sequenceNumber := ?,
				aFlag := p_aFlag,
				hFlag := p_hFlag,
				lFlag := p_lFlag,
				kFlag := p_kFlag,
				reserved := c_uInt12Zero,
				lifeTime := p_lifetime,		
				mipOptions := p_mipOptions
			}
				}

		template MipMessage m_bindingAck(UInt16 p_seqNr, UInt16 p_lifetime, template MipOptionList p_mipOptions) := {	
			bindingAck := {
				status := c_mipCodeBindingUpdateAccepted,
				kFlag := c_kFlag0,
				reserved := c_uInt7Zero,
				sequenceNumber := p_seqNr,
				lifeTime := p_lifetime,		
				mipOptions := p_mipOptions
			}
		}

		template MipMessage mw_bindingAck(UInt16 p_seqNr) := {	
			bindingAck := {
				status := c_mipCodeBindingUpdateAccepted,
				kFlag := ?,
				reserved := ?,
				sequenceNumber := p_seqNr,
				lifeTime := ?,		
				mipOptions := ?
			}
		}
		
		template MipMessage mw_bindingError := {	
			bindingError := {
				status := ?,
				reserved := ?,
				homeAddress := ?,		
				mipOptions := *
			}	
		}
		
		template MipMessage m_hot(	UInt16 p_homeNonceIndex,
									Bit64 p_homeInitCookie,
									Bit64 p_homeKeygenToken) := {	
			homeTest := {
				homeNonceIndex := p_homeNonceIndex,//c_uInt16Zero,
				homeInitCookie := p_homeInitCookie,//c_64ZeroBits,
				homeKeygenToken := p_homeKeygenToken,
				mipOptions := omit
			}
		}

		template MipMessage mw_hot := {	
			homeTest := {
				homeNonceIndex := ?,
				homeInitCookie := ?,
				homeKeygenToken := ?,
				mipOptions := *
			}
		}

		template MipMessage m_hoti(Bit64 p_homeInitCookie) := {	
			homeTestInit := {
				reserved := c_uInt16Zero,
				homeInitCookie := p_homeInitCookie,
				mipOptions := omit
			}
		}


		template MipMessage mw_hoti := {	
			homeTestInit := {
				reserved := ?,
				homeInitCookie := ?,
				mipOptions := *
			}
		}


	}//end group mobilityHdrMessageTemplates


	group mobilityOptTemplates {

		/*
		 *	@param  p_dstOpt First element in the Destination option list
		*/
		template MipOptionList m_mipOptList_1Elem ( template MipOption p_mipOpt ) := {
			p_mipOpt
		}

		/*
		 *	@param  p_dstOpt First element in the Destination option list
		*/
		template MipOptionList m_mipOptList_2Elem ( template MipOption p_mipOpt1, template MipOption p_mipOpt2 ) := {
			p_mipOpt1, p_mipOpt2
		}

		template MipOption m_mipOpt_altCoa(template MipOptAltCoA p_mipOptAltCoA) := {
			mipOptAltCoA := p_mipOptAltCoA
		}

		template MipOption m_mipOpt_padN(template OptPadN p_optPadN) := {
			optPadN := p_optPadN
		}

		template MipOptAltCoA m_mipOptAltCoA(in template Ipv6Address p_addr) := {
			mipOptType :=3,
			mipOptLen := 16,
			alternateCoA := p_addr
		}

		template MipOptAltCoA mw_mipOptAltCoA := {
			mipOptType :=3,
			mipOptLen := 16,
			alternateCoA := ?
		}
		
	}//end group mobilityOptTemplates

	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

}//end group rfc3775Mipv6_ExtHdrTemplates

group rfc4302Ah_ExtHdrTemplates {
	
	
Loading