Commit 4c1b6ff3 authored by mullers's avatar mullers
Browse files

merge with localCopy from DT

parent 629f6d78
Loading
Loading
Loading
Loading
+30 −29
Original line number Diff line number Diff line
@@ -76,6 +76,7 @@
			
			//GLA
			p_gla := v_prefixReady & v_interfaceIdReady;
			//LLA
			
			//SOL_NODE_MCA
			p_solNodeMca := 'FF0200000000000000000001FF'O & v_rightPartMac;
@@ -207,9 +208,9 @@
		//select ext hdrs that need special calculation
		for ( i := 0; i < sizeof ( p_extHdrList ) and ( v_ret != e_success ); i := i + 1 ) {
			if ( ischosen ( p_extHdrList[i].mipHeader )  ) {
				if ( ischosen ( p_extHdrList[i].mipHeader.mipMessage.bindingAck ) ) {
					for ( j := 0; j < sizeof ( p_extHdrList[i].mipHeader.mipMessage.bindingAck.mipOptions ); j := j + 1 ) {
						if ( ischosen ( p_extHdrList[i].mipHeader.mipMessage.bindingAck.mipOptions[j].mipBindingAuthorizationData ) == true ) {
				if ( ischosen ( p_extHdrList[i].mipHeader.mipMessage.bindingAckMsg ) ) {
					for ( j := 0; j < sizeof ( p_extHdrList[i].mipHeader.mipMessage.bindingAckMsg.mipOptions ); j := j + 1 ) {
						if ( ischosen ( p_extHdrList[i].mipHeader.mipMessage.bindingAckMsg.mipOptions[j].mipBindingAuthorizationData ) == true ) {
							v_ret := e_success;
						}
					}
@@ -241,9 +242,9 @@
		//select ext hdrs that need special calculation
		for ( i := 0; i < sizeof ( p_extHdrList ) and ( v_ret != e_success ); i := i + 1 ) {
			if ( ischosen ( p_extHdrList[i].mipHeader )  ) {
				if ( ischosen ( p_extHdrList[i].mipHeader.mipMessage.bindingAck ) ) {
					for ( j := 0; j < sizeof ( p_extHdrList[i].mipHeader.mipMessage.bindingAck.mipOptions ); j := j + 1 ) {
						if ( ischosen ( p_extHdrList[i].mipHeader.mipMessage.bindingAck.mipOptions[j].mipOptBindingRefreshAdvice ) == true ) {
				if ( ischosen ( p_extHdrList[i].mipHeader.mipMessage.bindingAckMsg ) ) {
					for ( j := 0; j < sizeof ( p_extHdrList[i].mipHeader.mipMessage.bindingAckMsg.mipOptions ); j := j + 1 ) {
						if ( ischosen ( p_extHdrList[i].mipHeader.mipMessage.bindingAckMsg.mipOptions[j].mipOptBindingRefreshAdvice ) == true ) {
							v_ret := e_success;
						}
					}
+15 −18
Original line number Diff line number Diff line
@@ -28,10 +28,7 @@ module LibIpv6_CommonRfcs_TypesAndValues {
        const Ipv6Address c_unspecifiedAdd := c_16ZeroBytes;
		const UInt8	c_maxNrIpv6Address := 10;
		
		type record length(1 .. c_maxNrIpv6Address) of Ipv6Address Ipv6AddressList
		with {
			encode "present=isEOF()== false ;elements=valueOf(getTag('hdrExtLen'));"
		}
		type record length(1 .. c_maxNrIpv6Address) of Ipv6Address Ipv6AddressList;
		
		
	}//end group rfc4291AddressingArchitecture
@@ -123,9 +120,9 @@ module LibIpv6_CommonRfcs_TypesAndValues {
					Oct6to15			linkLayerAddr
				}
				with {
					encode "present=bytes(0,1,1);";
					encode (optionLength) "tag='SLA_optionLength';";
					encode (linkLayerAddr) "length=valueOf(getTag('SLA_optionLength'))*8-2;";
					variant "present=bytes(0,1,1);";
					variant (optionLength) "tag='SLA_optionLength';";
					variant (linkLayerAddr) "length=valueOf(getTag('SLA_optionLength'))*8-2;";
				}
	
			}//end group slla
@@ -144,15 +141,15 @@ module LibIpv6_CommonRfcs_TypesAndValues {
					Oct6to15			linkLayerAddr
				}
				with {
					encode "present=bytes(0,1,2);";
					encode (optionLength) "tag='TLA_optionLength';";
					encode (linkLayerAddr) "length=valueOf(getTag('TLA_optionLength'))*8-2;";
					variant "present=bytes(0,1,2);";
					variant (optionLength) "tag='TLA_optionLength';";
					variant (linkLayerAddr) "length=valueOf(getTag('TLA_optionLength'))*8-2;";
				}
		
		
			}//end group tlla

			group mtu {
			group mtuOptions {
		
				const UInt8 c_mtuOption := 5;

@@ -167,7 +164,7 @@ module LibIpv6_CommonRfcs_TypesAndValues {
					UInt32	mtu
				}
				with {
					encode "present=bytes(0,1,5);"
					variant "present=bytes(0,1,5);"
				}
		
			}//end group mtu
@@ -188,7 +185,7 @@ module LibIpv6_CommonRfcs_TypesAndValues {
				UInt8			optTunnelEncapLimitValue
			}
			with {
				encode "present=bytes(0,1,4);intTag='hdrExtIntLen',getIntTag('hdrExtIntLen')-3";
				variant "present=bytes(0,1,4);intTag='hdrExtIntLen',getIntTag('hdrExtIntLen')-3";
			}
	
		}//end group rfc2473Options
@@ -209,7 +206,7 @@ module LibIpv6_CommonRfcs_TypesAndValues {
				UInt32			optJumboPayloadLength
			}
			with {
				encode "present=bytes(0,1,194);intTag='hdrExtIntLen',getIntTag('hdrExtIntLen')-6";
				variant "present=bytes(0,1,194);intTag='hdrExtIntLen',getIntTag('hdrExtIntLen')-6";
			}

		}//end group rfc2675Options
@@ -228,7 +225,7 @@ module LibIpv6_CommonRfcs_TypesAndValues {
				UInt16			optValue
			}
			with {
				encode "present=bytes(0,1,5);intTag='hdrExtIntLen',getIntTag('hdrExtIntLen')-4";
				variant "present=bytes(0,1,5);intTag='hdrExtIntLen',getIntTag('hdrExtIntLen')-4";
			}

		}//end group rfc2711Options
@@ -248,7 +245,7 @@ module LibIpv6_CommonRfcs_TypesAndValues {
				UInt32		advInterval
			}
			with {
				encode "present=bytes(1, 0x07)"
				variant "present=bytes(1, 0x07)"
			}
		
			/*
@@ -262,7 +259,7 @@ module LibIpv6_CommonRfcs_TypesAndValues {
				UInt16		homeAgentLifetime
			}
			with {
				encode "present=bytes(1, 0x08)"
				variant "present=bytes(1, 0x08)"
			}

			/* @desc Derived from RFCxxxx MIpv6, clause 6.2 
@@ -277,7 +274,7 @@ module LibIpv6_CommonRfcs_TypesAndValues {
				Oct16	homeAddress
			}
			with {
				encode "present=bytes(0,1,201);intTag='hdrExtIntLen',getIntTag('hdrExtIntLen')-18";
				variant "present=bytes(0,1,201);intTag='hdrExtIntLen',getIntTag('hdrExtIntLen')-18";
			}

			group mipOptionValues {
+1 −65
Original line number Diff line number Diff line
@@ -16,7 +16,6 @@
	//LibIpv6
	import from LibIpv6_CommonRfcs_TypesAndValues { type all };
	import from LibIpv6_Interface_TypesAndValues all;
	import from LibIpv6_Interface_TypesAndValues all;

	/* @desc    This external function calculates the payload length
	 *			of a IPv6 packet
@@ -75,31 +74,6 @@
//	external function fx_dstOptHdrLength( in  ExtensionHeader p_extHdr) 
//	return UInt8;

	/* @desc   Apply indicated encryption algorithm to the message.
	 *			
	 * @param  p_crypto Cryptographic function used to compute MAC
	 * @param  p_key Key used to compute the MAC
	 * @param  p_message Octetstring message
	 * @return Message HMAC
	*/
//	external function fx_encrypt( EncryptionAlgo p_encryptionAlgo, in octetstring p_key, in octetstring p_message) 
//	return octetstring;

	external function fx_encrypt( 	in IpSecProtocolMode p_ipSecProtocolMode,
									in EncryptionAlgo p_encryptionAlgo,
									in octetstring p_key,
									in PlaintextData p_plaintextData,
									out EncryptResult p_encryptResult) 
	return FncRetCode;

	external function fx_decrypt( 	in UInt8 p_ivLength, 
									in UInt8 p_icvLength, 
									in IpSecProtocolMode p_ipSecProtocolMode, 
									in EncryptionAlgo p_encryptionAlgo, 
									in octetstring p_key,
									in octetstring p_encryptedMsg,
									out PlaintextData p_plaintextData) 
	return FncRetCode;

	/* @desc    Apply indicated Integrity algorithm to the message. Message is an octetstring.
	 *			If e_sha1_96 is chosen, then the key input shall be ignored.
@@ -112,51 +86,13 @@
	external function fx_integrity( IntegrityAlgo p_integrityAlgo, in octetstring p_key, in octetstring p_message) 
	return octetstring;

	/* @desc    Apply indicated Integrity algorithm to the message. Message can only be an EspHeader.
	 *			If e_sha1_96 is chosen, then the key input shall be ignored.
	 *			
	 * @param  p_integrityAlgo Cryptographic function used to compute MAC
	 * @param  p_key Key used to compute the MAC
	 * @param  p_espHeader EspHeader
	 * @param  p_integrityResult  Result of Integrity function
	 * @return Message HMAC
	*/
	external function fx_integrityEspHdr( 	in IntegrityAlgo p_integrityAlgo,
											in octetstring p_key,
											in EspHeader p_espHeader,
											out IntegrityResult p_integrityResult) 
	return FncRetCode;

	/* @desc 	This external function runs the MipHeader through Codec and returns 
	 *			the octetstring representing the MipHeader
	 *			
	 * @param 	p_mipHeader MIp Header to be encoded to octetstring
	 * @param 	p_mipHeader Mip Header to be encoded to octetstring
	 * @return 	octetstring
	*/
	external function fx_mipHdrToOct(MipHeader p_mipHeader)
	return octetstring;

	/* @desc 	This external function computes Integrity Check Value
	 * @param 	p_ipv6Packet Ipv6 Packet
	 * @param 	p_sa Security association
	 * @return 	Integrity Check Value
	*/
	external function fx_integrityCheckValue( in Ipv6Packet p_ipv6Packet,
											  in octetstring p_sa,
											  out octetstring p_result)
	return FncRetCode;

	/* @desc 	This external function returns the padding octets that
	 *			are needed to align to a given Byte Boundary.
	 *			Example: Byte Boundary == 4
	 *			If lenghtof EspHeader is 3, then result = 1
	 * @param 	p_byteBoundary Align to a multiple of this value
	 * @param 	p_espHeader ESP-HDR to be aligned
	 * @return 	Padding needed to align
	*/
	external function fx_byteAlignEspHeader(	in UInt8 p_byteBoundary,
												in EspHeader p_espHeader,
												out octetstring p_result)
	return FncRetCode;

}// end module LibIpv6_ExternalFunctions
+323 −29
Original line number Diff line number Diff line
@@ -146,7 +146,7 @@ group rfc3775Mipv6_ExtHdrFunctions {
		//else if (ischosen(p_mipHeader.mipMessage.careOfTest) and (PX_TEST_IPSEC == true)) {
		//SMU TODO
		//}
		if (ischosen(p_mipHeader.mipMessage.bindingUpdate)) {//Authorization data is only needed for BU sent to CN=IUT
		if (ischosen(p_mipHeader.mipMessage.bindingUpdateMsg)) {//Authorization data is only needed for BU sent to CN=IUT
			var UInt8 v_position := 0;
			//Concept of including bindingAuthentication
			// specifiy on template level all options
@@ -155,19 +155,19 @@ group rfc3775Mipv6_ExtHdrFunctions {
			//     because it's assumed that the correct value was set on template level
			// 3) same applies to nonceIndex etc

			if (f_isPresentNonceIndices(p_mipHeader.mipMessage.bindingUpdate, v_position) == e_success
			if (f_isPresentNonceIndices(p_mipHeader.mipMessage.bindingUpdateMsg, v_position) == e_success
				and vc_mipSec.mnSimuParams.receivedHomeNonceIndex != c_uInt16Zero
				and vc_mipSec.mnSimuParams.receivedCareOfNonceIndex != c_uInt16Zero) {
					p_mipHeader.mipMessage.bindingUpdate.mipOptions[v_position].mipOptNonceIndices.homeNonceIndex
					p_mipHeader.mipMessage.bindingUpdateMsg.mipOptions[v_position].mipOptNonceIndices.homeNonceIndex
					:= vc_mipSec.mnSimuParams.receivedHomeNonceIndex;
					p_mipHeader.mipMessage.bindingUpdate.mipOptions[v_position].mipOptNonceIndices.careOfNonceIndex
					p_mipHeader.mipMessage.bindingUpdateMsg.mipOptions[v_position].mipOptNonceIndices.careOfNonceIndex
					:= vc_mipSec.mnSimuParams.receivedCareOfNonceIndex;
			}
			else {
				log("f_setMipHeader: Error: NonceIndices included in Binding Update, but mnSimuParams.receivedCareOfNonceIndex/receivedHomeNonceIndex not initialized");
				return e_error;	
			}
			if (f_isPresentBindingAuthorizationDataOption(p_mipHeader.mipMessage.bindingUpdate, v_position) == e_success
			if (f_isPresentBindingAuthorizationDataOption(p_mipHeader.mipMessage.bindingUpdateMsg, v_position) == e_success
				and vc_mipSec.mnSimuParams.receivedHomeKeygenToken != c_64ZeroBits
				and vc_mipSec.mnSimuParams.receivedCareOfKeygenToken != c_64ZeroBits) {
				
@@ -180,7 +180,7 @@ group rfc3775Mipv6_ExtHdrFunctions {
																		& p_dstAddr//cnAddr
																		& fx_mipHdrToOct(p_mipHeader) );

					p_mipHeader.mipMessage.bindingUpdate.mipOptions[v_position].mipBindingAuthorizationData := {
					p_mipHeader.mipMessage.bindingUpdateMsg.mipOptions[v_position].mipBindingAuthorizationData := {
							mipOptType := 5,
							mipOptLen := lengthof(v_bindingAuthenticator),
							authenticator := v_bindingAuthenticator
@@ -217,7 +217,7 @@ group rfc3775Mipv6_ExtHdrFunctions {
	 * @param 	v_position Position of the NonceIndicesOption in the MipOptionList
	 * @return 	execution status 
	*/
	function f_isPresentNonceIndices(	in BindingUpdate p_bindingUpdate,
	function f_isPresentNonceIndices(	in BindingUpdateMsg p_bindingUpdate,
														inout UInt8 v_position)
	runs on LibIpv6Node
	return FncRetCode {
@@ -241,7 +241,7 @@ group rfc3775Mipv6_ExtHdrFunctions {
	 * @param 	v_position Position of the AuthorizationDataOption in the MipOptionList
	 * @return 	execution status 
	*/
	function f_isPresentBindingAuthorizationDataOption(	in BindingUpdate p_bindingUpdate,
	function f_isPresentBindingAuthorizationDataOption(	in BindingUpdateMsg p_bindingUpdate,
														inout UInt8 v_position)
	runs on LibIpv6Node
	return FncRetCode {
@@ -258,6 +258,299 @@ group rfc3775Mipv6_ExtHdrFunctions {
		return v_ret;
	}//end function f_isPresentBindingAuthorizationDataOption

	/*
	 * @desc 	This sends a IPv6 packet with MipExtHdr - Binding Update
	 *			from an IPv6 node to any NUT.
	 *			
	 * @remark  
	 * @param 	p_msg MIPHeader to be sent	
	 * @return 	execution status
	*/
	function f_sendBU(template BindingUpdate p_msg)
	runs on LibIpv6Node
	return FncRetCode {
		//Variables
		var BindingUpdate v_ipPkt;
		v_ipPkt := valueof(p_msg);
		//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_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);

		return e_success;
	}//end f_sendBU

	/*
	 * @desc 	This sends a IPv6 packet with MipExtHdr - Binding Acknowledgement
	 *			from an IPv6 node to any NUT.
	 *			
	 * @remark  
	 * @param 	p_msg MIPHeader to be sent	
	 * @return 	execution status
	*/
	function f_sendBA(template BindingAcknowledgement p_msg)
	runs on LibIpv6Node
	return FncRetCode {
		//Variables
		var BindingAcknowledgement v_ipPkt;
		v_ipPkt := valueof(p_msg);
		//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_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);

		return e_success;
	}//end f_sendBA

	/*
	 * @desc 	This sends a IPv6 packet with MipExtHdr - Binding Error
	 *			from an IPv6 node to any NUT.
	 *			
	 * @remark  
	 * @param 	p_msg MIPHeader to be sent	
	 * @return 	execution status
	*/
	function f_sendBE(template BindingError p_msg)
	runs on LibIpv6Node
	return FncRetCode {
		//Variables
		var BindingError v_ipPkt;
		v_ipPkt := valueof(p_msg);
		//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_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);

		return e_success;
	}//end f_sendBE

	/*
	 * @desc 	This sends a IPv6 packet with MipExtHdr - Binding Refresh Request
	 *			from an IPv6 node to any NUT.
	 *			
	 * @remark  
	 * @param 	p_msg MIPHeader to be sent	
	 * @return 	execution status
	*/
	function f_sendBR(template BindingRefreshRequest p_msg)
	runs on LibIpv6Node
	return FncRetCode {
		//Variables
		var BindingRefreshRequest v_ipPkt;
		v_ipPkt := valueof(p_msg);
		//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_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);

		return e_success;
	}//end f_sendBR

	/*
	 * @desc 	This sends a IPv6 packet with MipExtHdr - Home Test
	 *			from an IPv6 node to any NUT.
	 *			
	 * @remark  
	 * @param 	p_msg MIPHeader to be sent	
	 * @return 	execution status
	*/
	function f_sendHot(template HomeTest p_msg)
	runs on LibIpv6Node
	return FncRetCode {
		//Variables
		var HomeTest v_ipPkt;
		v_ipPkt := valueof(p_msg);
		//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_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);

		return e_success;
	}//end f_sendHot

		/*
	 * @desc 	This sends a IPv6 packet with MipExtHdr - Home Test Init
	 *			from an IPv6 node to any NUT.
	 *			
	 * @remark  
	 * @param 	p_msg MIPHeader to be sent	
	 * @return 	execution status
	*/
	function f_sendHoti(template HomeTestInit p_msg)
	runs on LibIpv6Node
	return FncRetCode {
		//Variables
		var HomeTestInit v_ipPkt;
		v_ipPkt := valueof(p_msg);
		//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_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);

		return e_success;
	}//end f_sendHoti

	/*
	 * @desc 	This sends a IPv6 packet with MipExtHdr - CareOfTestInit
	 *			from an IPv6 node to any NUT.
	 *			
	 * @remark  
	 * @param 	p_msg MIPHeader to be sent	
	 * @return 	execution status
	*/
	function f_sendCoti(template CareOfTestInit p_msg)
	runs on LibIpv6Node
	return FncRetCode {
		//Variables
		var CareOfTestInit v_ipPkt;
		v_ipPkt := valueof(p_msg);
		//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_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);

		return e_success;
	}//end f_sendCoti

		/*
	 * @desc 	This sends a IPv6 packet with MipExtHdr - CareOfTest
	 *			from an IPv6 node to any NUT.
	 *			
	 * @remark  
	 * @param 	p_msg MIPHeader to be sent	
	 * @return 	execution status
	*/
	function f_sendCot(template CareOfTest p_msg)
	runs on LibIpv6Node
	return FncRetCode {
		//Variables
		var CareOfTest v_ipPkt;
		v_ipPkt := valueof(p_msg);
		//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_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);

		return e_success;
	}//end f_sendCot

			/*
	 * @desc 	This sends a IPv6 packet with MipExtHdr - Fast Nbr Adv
	 *			from an IPv6 node to any NUT.
	 *			
	 * @remark  
	 * @param 	p_msg MIPHeader to be sent	
	 * @return 	execution status
	*/
	function f_sendFastNbrAdv(template FastNbrAdv p_msg)
	runs on LibIpv6Node
	return FncRetCode {
		//Variables
		var FastNbrAdv v_ipPkt;
		v_ipPkt := valueof(p_msg);
		//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_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


@@ -267,20 +560,20 @@ group rfc4303Esp_ExtHdrFunctions {
	runs on LibIpv6Node {
		
		vc_sad[0] := {
			securityParametersIndex := f_createSpi(),
			sequenceNumber := c_uInt32Zero,
			spi := PX_SPI/*f_createSpi()*/,
			seqNr := c_uInt32Zero,
			// AH Integrity
			ahIntegrityAlgo := PX_INTEGRITY_ALGO,
			ahIntegrityKey := f_createSecretKey(),
			ahIntegrityKey := PX_INTEGRITY_KEY/*f_createSecretKey()*/,
			// ESP encryption
			espEncryptionAlgo := PX_ENCRYPTION_ALGO,
			espEncryptionKey := f_createSecretKey(),
			espEncryptionKey := PX_ESP_ENCR_KEY/*f_createSecretKey()*/,
			// ESP integrity
			espIntegrityAlgo := PX_INTEGRITY_ALGO,
			espIntegrityKey := f_createSecretKey(),
			espIntegrityKey := PX_INTEGRITY_KEY/*f_createSecretKey()*/,
			// Combined mode
			espCombinedModeAlgo := PX_COMBINED_MODE_ALGO,
			espCombinedModeKey := f_createSecretKey(),
			espCombinedModeKey := PX_COMBINED_MODE_KEY/*f_createSecretKey()*/,
			// Protocol mode
			ipSecProtocolMode := PX_IP_SEC_PROTOCOL_MODE
		}
@@ -312,18 +605,19 @@ group rfc4303Esp_ExtHdrFunctions {
		return v_key;
	}//end f_createSecretKey

	function f_buildEspExtHdr(	
			in Sa p_sa,
			in PlaintextData p_plaintextData,
			out ExtensionHeader p_extensionHeader)
	runs on LibIpv6Node
	return FncRetCode {
		// Variables
		var EncryptResult v_encryptResult;
		var IntegrityResult v_integrityResult;
		var FncRetCode v_ret := e_error;
		var octetstring v_padding := c_1ZeroByte;

//	function f_buildEspExtHdr(	
//			in Sa p_sa,
//			in PlaintextData p_plaintextData,
//			out ExtensionHeader p_extensionHeader)
//	runs on LibIpv6Node
//	return FncRetCode {
//		// Variables
//		var EncryptResult v_encryptResult;
///		var IntegrityResult v_integrityResult;
//		var FncRetCode v_ret := e_error;
//		var octetstring v_padding := c_1ZeroByte;
//TODO check this
/*
		// Encrypt espPayloadData
		v_ret := fx_encrypt(	p_sa.ipSecProtocolMode,
								p_sa.espEncryptionAlgo,
@@ -369,10 +663,10 @@ group rfc4303Esp_ExtHdrFunctions {
		// Assign Plaintext EspPayload
		v_espHdr.espPayloadData.plaintextData := p_plaintextData;
		p_extensionHeader := {espHeader := v_espHdr};
*/
//		return e_success;

		return e_success;

	}//end function f_buildEspExtHdr	
//	}//end function f_buildEspExtHdr	
	
}//end group rfc4303Esp_ExtHdrFunctions

+123 −56

File changed.

Preview size limit exceeded, changes collapsed.

Loading