Commit 3b2e451e authored by vouffofeudji's avatar vouffofeudji
Browse files

Added AuthHeader related functions

parent 17b8b781
Loading
Loading
Loading
Loading
+182 −0
Original line number Diff line number Diff line
@@ -616,5 +616,187 @@ group IcmpAndEspFns {
		
}//end IcmpAndEspFns

group IcmpAndAuthHeaderFns {
	function f_generateEchoReqWithAh(
		template Ipv6NodeParams p_paramsTn,
		template Ipv6NodeParams p_paramsIut,
		template Ipv6NodeParams p_paramsTunnelStart,
		template Ipv6NodeParams p_paramsTunnelEnd)
		runs on Ipv6Node return EchoRequest 
	{
		var EchoRequest v_echoRequest;
			
		if (vc_sad[c_saOut].ipSecProtocolMode == e_transportMode) {
			// Transport mode
			v_echoRequest := valueof(m_echoRequest_extHdr_noData (
				c_authHdr,
				m_extHdrList_1Elem (
					m_extHdr_AHHeaders(
						c_icmpHdr,
						vc_sad[c_saOut].spi,
						vc_sad[c_saOut].seqNr)),
				p_paramsTn.gla,
				p_paramsIut.gla,
				c_defId,
				c_defSeqNo)); // ICV is set to 0 before authentication
				
				
		}else{
		// Generate an Echo Request with Authentication Header in tunnel mode
			v_echoRequest := valueof(m_echoRequest_extHdr_noData (
				c_authHdr,
				m_extHdrList_2Elem (
					m_extHdr_AHHeaders(
						c_tunneledIpHdr,
						vc_sad[c_saOut].spi,
						vc_sad[c_saOut].seqNr),
					m_extHdr_tunneledHeader (
						c_icmpHdr,
						p_paramsTn.gla,
						p_paramsIut.gla )),
				p_paramsTunnelStart.gla,
				p_paramsTunnelEnd.gla,
				c_defId,
				c_defSeqNo ));
		}
			
		return v_echoRequest;

	} //end 


	function f_generateEchoReqWithAh_noData(
		template Ipv6NodeParams p_paramsRt,
		template Ipv6NodeParams p_paramsIut,
		template Ipv6NodeParams p_paramsTunnelStart,
		template Ipv6NodeParams p_paramsTunnelEnd,
		UInt16 p_id,
		UInt16 p_seqNr
		)
		runs on Ipv6Node return EchoRequest 
	{
		var EchoRequest v_echoRequest;
			
		if (vc_sad[c_saOut].ipSecProtocolMode == e_transportMode) {
			// Transport mode
			v_echoRequest := valueof(m_echoRequest_extHdr_noData (
				c_authHdr,
			m_extHdrList_1Elem (
				m_extHdr_AHHeaders(
					c_icmpHdr,
					vc_sad[c_saOut].spi,
					vc_sad[c_saOut].seqNr)),
				p_paramsRt.gla,
				p_paramsIut.gla,
				p_id,
				p_seqNr)); // ICV is set to 0 before authentication
		}else{
		// Generate an Echo Request with Authentication Header in tunnel mode
			v_echoRequest := valueof(m_echoRequest_extHdr_noData (
				c_authHdr,
			m_extHdrList_1Elem (
				m_extHdr_AHHeaders(
					c_tunneledIpHdr,
					vc_sad[c_saOut].spi,
					vc_sad[c_saOut].seqNr)),
				p_paramsRt.gla,
				p_paramsIut.gla,
				p_id,
				p_seqNr
						));
		}
			
		return v_echoRequest;

	} //end 		
	function f_generateEchoRequestWithAh_Fh(
		template Ipv6NodeParams p_paramsRt,
		template Ipv6NodeParams p_paramsIut,
		template Ipv6NodeParams p_paramsTunnelStart,
		template Ipv6NodeParams p_paramsTunnelEnd) 
		runs on Ipv6Node return EchoRequest {
			
			var EchoRequest v_echoRequest;
				
			if (vc_sad[c_saOut].ipSecProtocolMode == e_transportMode) {
				// Transport mode
				v_echoRequest := valueof(m_echoRequest_extHdr_noData (
					c_authHdr,
					m_extHdrList_2Elem (
						m_extHdr_AHHeaders(
							c_fragHdr,
							vc_sad[c_saOut].spi,
							vc_sad[c_saOut].seqNr), // ICV is set to 0 before authentication
						m_extHdr_fragmentHeader(
							c_icmpHdr,
							c_fragOffset2,
							c_moreFragments,
							c_fragmentId1 )),
					p_paramsRt.gla,
					p_paramsIut.gla,
					c_defId,
					c_defSeqNo)); 
			}else{
			// Generate an Echo Request with Authentication Header in tunnel mode
				v_echoRequest := valueof(m_echoRequest_extHdr_noData (
					c_authHdr,
					m_extHdrList_2Elem (
						m_extHdr_AHHeaders(
							c_fragHdr,
							vc_sad[c_saOut].spi,
							vc_sad[c_saOut].seqNr),
						m_extHdr_fragmentHeader(
							c_tunneledIpHdr,
							c_fragOffset2,
							c_moreFragments,
							c_fragmentId1 )),
					p_paramsRt.gla,
					p_paramsIut.gla,
					c_defId,
					c_defSeqNo)); 
		}
	
		return v_echoRequest;	
	} // end f_generateEchoRequestWithAh_Fh
	
	function f_generateNrbSolWithAh(
					template Ipv6NodeParams p_paramsTn,
					template Ipv6NodeParams p_paramsIut,
					template Ipv6NodeParams p_paramsTunnelStart,
					template Ipv6NodeParams p_paramsTunnelEnd) 
					runs on  Ipv6Node return NeighborSolicitation {
		
			var NeighborSolicitation v_nbrSol;
				
			if (vc_sad[c_saOut].ipSecProtocolMode == e_transportMode) {
				// Transport mode
				v_nbrSol := valueof(m_nbrSol_extHdr (
					c_authHdr,
					p_paramsTn.gla,
					p_paramsIut.gla,
					m_nbrSolOpt_sllaOpt ( p_paramsTn.macUca ),
					m_extHdrList_1Elem (
						m_extHdr_AHHeaders(
							c_icmpHdr,
							vc_sad[c_saOut].spi,
							vc_sad[c_saOut].seqNr)))); // ICV is set to 0 before authentication
			}else{
			// Generate a Neigbor Solicitation message with Authentication Header in tunnel mode
				v_nbrSol := valueof(m_nbrSol_extHdr (
					c_authHdr,
					p_paramsTn.gla,
					p_paramsIut.gla,
					m_nbrSolOpt_sllaOpt ( p_paramsTn.macUca ),
					m_extHdrList_1Elem (
						m_extHdr_AHHeaders(
							c_tunneledIpHdr,
							vc_sad[c_saOut].spi,
							vc_sad[c_saOut].seqNr))));
		}
		return v_nbrSol;
	}// end f_generateNrbSolWithAh
		
	
}// end IcmpAndAuthHeaderFns

} // end module LibIpv6_MultiRfcs_Functions