Commit 90287df3 authored by validator's avatar validator
Browse files

Almost completly validated. SM to add generic ExtHdr setter

parent ff18eca4
Loading
Loading
Loading
Loading
+11 −3
Original line number Diff line number Diff line
@@ -36,13 +36,14 @@

		var Ipv6Packet v_ipPkt;
		v_ipPkt.generalIpv6 := valueof(p_msg);
		//calc payloadLen
		v_ipPkt.generalIpv6.ipv6Hdr.payloadLength := fx_payloadLength (v_ipPkt);
		
		//set extensionHeaders
		if(f_setGeneralIpv6ExtensionHeaders(v_ipPkt.generalIpv6) != e_success) {
			log(" **** f_sendIpv6ExtHdrs: Error whem calculating length of extension headers ****");
			log(" **** f_sendIpv6ExtHdrs: Error when calculating length of extension headers ****");
			return e_error;
		}
		//calc payloadLen
		v_ipPkt.generalIpv6.ipv6Hdr.payloadLength := fx_payloadLength (v_ipPkt);
		//send
		ipPort.send(v_ipPkt.generalIpv6);

@@ -60,6 +61,7 @@
	return FncRetCode {
		var UInt8 i;
		var Ipv6Address v_homeAddress := c_16ZeroBytes;
		var UInt8 v_nrOfTunnelHdr := 0;

		//select ext hdrs that need special calculation
		if (ispresent(p_generalIpv6.extHdrList)) {
@@ -76,6 +78,12 @@
										p_generalIpv6.extHdrList[i].mipHeader);
					}
				}
				else if (ischosen(p_generalIpv6.extHdrList[i].tunnelIpv6)) {
					//Cast GeneralIpv6Packet to Ipv6Packet in order to be able to reuse fx_tunnelledPayloadLength
					var Ipv6Packet v_ipv6Packet := {generalIpv6 := p_generalIpv6};
					v_nrOfTunnelHdr := v_nrOfTunnelHdr + 1;
					p_generalIpv6.extHdrList[i].tunnelIpv6.payloadLength := fx_tunnelledPayloadLength(v_ipv6Packet, v_nrOfTunnelHdr);
				}
			/*	else if (ischosen(p_extHdrList[i].)) {
					f_setSecurityHdr();
				}  */
+9 −1
Original line number Diff line number Diff line
@@ -330,6 +330,14 @@
			}
		}

		/*
		 *	@param  p_ipv6Address First IPv6 address in the routing header
		*/
		template RoutingHeaderData m_routingHeaderData_homeAddress ( template Ipv6Address p_ipv6Address ) := {
			rtHdrDataHomeAddress := p_ipv6Address
		}


		}//end group routingHeaderTemplates
		
		group mipHeaderTemplates {
@@ -381,7 +389,7 @@
				version 		:= c_ipv6Version ,
				trafficClass 	:= c_trafficClassZero ,
				flowLabel 		:= c_flowLabelZero ,
				payloadLength 	:= c_zeroPayloadLength, 
				payloadLength 	:= 16,//c_zeroPayloadLength,  TODO possible to calculate???
				nextHeader 		:= p_nextHdr,
				hopLimit 		:= c_hopLimit255,
				sourceAddress 	:= p_src,
+2 −1
Original line number Diff line number Diff line
@@ -140,7 +140,7 @@
		with {
			encode "present=(valueOf(getTag('nextHeader')) == 43);";
			encode (nextHeader) "tag='nextHeader';";
			encode (hdrExtLen) "tag='hdrExtLen';intTag='IPv6Header_payloadLength',getIntTag('IPv6Header_payloadLength')-value*8-8";
			encode (hdrExtLen) "tag='hdrExtLen';intTag='hdrExtIntLen',value*8+8-8;intTag='IPv6Header_payloadLength',getIntTag('IPv6Header_payloadLength')-value*8-8";
			encode (routingType) "tag='routingType';";
		}
		
@@ -151,6 +151,7 @@
		*/
		type union RoutingHeaderData{
			RtHdrDataIpv6AddressList	rtHdrDataIpv6AddressList,
			RtHdrDataHomeAddress		rtHdrDataHomeAddress,
			MipData						mipData
		}
		
+6 −3
Original line number Diff line number Diff line
@@ -293,10 +293,12 @@

		var FncRetCode v_ret := e_error;

		var EchoRequest echoRequest;
		
		tc_ac.start;
		alt {
			[]	ipPort.receive(mw_echoRequest ( 	p_llaAddrNut,
												p_llaAddrTn )) {
												p_llaAddrTn )) -> value echoRequest {
					tc_ac.stop;	
					v_ret := e_success;
				}
@@ -305,10 +307,11 @@
				}		
		} // end alt

		v_ret := f_sendEchoReply( m_echoReply_noExtHdr_noData( p_llaAddrTn,
		v_ret := f_sendEchoReply( m_echoReply_noExtHdr_data( p_llaAddrTn,
															p_llaAddrNut,
															p_identifier,
															p_seqNo ));
															p_seqNo,
															echoRequest.data ));
		return v_ret ;

	} // end f_replyToEchoRequest
+21 −10
Original line number Diff line number Diff line
@@ -96,6 +96,12 @@ module LibIpv6_Rfc3775Mipv6_Functions {
										p_haAddrDreq.extHdrList[i].mipHeader);
					}
				}
				else if (ischosen(p_haAddrDreq.extHdrList[i].tunnelIpv6)) {
					//Cast XXXIpv6Packet to Ipv6Packet in order to be able to reuse fx_tunnelledPayloadLength
					var Ipv6Packet v_ipv6Packet := {homeAgentAddressDiscoveryRequest := p_msg};
					v_nrOfTunnelHdr := v_nrOfTunnelHdr + 1;
					p_msg.extHdrList[i].tunnelIpv6.payloadLength := fx_tunnelledPayloadLength(v_ipv6Packet, v_nrOfTunnelHdr);
				}
			/*	else if (ischosen(p_extHdrList[i].)) {
					f_setSecurityHdr();
				}  */
@@ -128,6 +134,11 @@ module LibIpv6_Rfc3775Mipv6_Functions {
						p_haGlasNut := v_dhaadReply.homeAgentAddresses;
						v_ret := e_success ;
					}
					//TODO add Reply without address => Fail
				[]	ipPort.receive(mw_dhaadRepNoAddr(p_mnCoaTn, c_defId )) {
						tc_ac.stop;
						v_ret := e_error ;
					}
				[]	tc_ac.timeout{
						v_ret :=  e_timeout;
						log("**** f_sendHaAddrDreqAndWaitForReply: ERROR: tc_ac.timeout **** ");
@@ -186,9 +197,9 @@ module LibIpv6_Rfc3775Mipv6_Functions {
														m_extHdrList_2Elem(
														mw_extHdr_routingHeader(	c_mipHdr,
																					c_routeHdrLen2,
																					c_routeHdrType0,
																					c_routeHdrSegmentsLeft0,
																					m_routingHeaderData_ipv6AddressList_1Elem(p_mnHoaTn)),
																					c_routeHdrType2,
																					c_routeHdrSegmentsLeft1,
																					m_routingHeaderData_homeAddress(p_mnHoaTn)),
														mw_extHdr_mipHeader (	c_noNextHdr,
																				c_bindingAck,
																				mw_bindingAck(c_defSeqNo))))) {
@@ -242,8 +253,8 @@ module LibIpv6_Rfc3775Mipv6_Functions {
																		c_defSeqNo,
																		c_aFlag1,
																		c_hFlag1,
																		c_lFlag1,
																		c_kFlag1,
																		c_lFlag0,
																		c_kFlag0,
																		c_zeroTimeUnits,
																		m_mipOptList_1Elem(
																			m_mipOpt_padN(m_optPad4)))))));
@@ -301,7 +312,7 @@ module LibIpv6_Rfc3775Mipv6_Functions {
			[]	ipPort.receive(mw_generalIpv6_srcDst(	c_mipHdr,
												p_mnHoa,
												p_glaCn,
												m_extHdrList_1Elem( m_extHdr_mipHeader (	c_noNextHdr,
												m_extHdrList_1Elem( mw_extHdr_mipHeader (	c_noNextHdr,
																							c_homeTestInit,
																							mw_hoti)))) {
					tc_ac.stop;	
@@ -314,7 +325,7 @@ module LibIpv6_Rfc3775Mipv6_Functions {
				}		
		} // end alt

		v_ret := f_sendGeneralIpv6(mw_generalIpv6_srcDst (c_mipHdr,
		v_ret := f_sendGeneralIpv6(m_generalIpv6_srcDst (c_mipHdr,
											p_glaCn,
											p_mnHoa,
											m_extHdrList_1Elem( m_extHdr_mipHeader (	c_noNextHdr,
@@ -485,7 +496,7 @@ module LibIpv6_Rfc3775Mipv6_Functions {
												c_routeHdrLen2,
												c_routeHdrType2,
												c_routeHdrSegmentsLeft1,
												m_routingHeaderData_ipv6AddressList_1Elem(p_mnHoaTn))))) {
												m_routingHeaderData_homeAddress(p_mnHoaTn))))) {
						tc_ac.stop;
						v_ret := e_success ;
					}
Loading