Commit 846d41e5 authored by mullers's avatar mullers
Browse files

Adapted adaptation for ipv4 related configuration issues.

Minor changes for IPv4 functionality.
Introduced ARP.
parent ccccff73
Loading
Loading
Loading
Loading
+18 −11
Original line number Diff line number Diff line
@@ -1199,29 +1199,36 @@ group rfc791Fns {
	 * @return 	execution status
	*/
	function f_sendIpv4Packet (in template Ipv4Packet p_ipv4Packet) 
	runs on LibIpv4Node
	runs on LibIpv6Node
	return FncRetCode {
		var Ipv4Packet v_ipPkt;
		v_ipPkt := valueof(p_ipv4Packet);

		if (ispresent(v_ipPkt.ipv4Payload)) {
			//Build IPv6 Packet
		if (ispresent(v_ipPkt.ipv4Payload) and ischosen(v_ipPkt.ipv4Payload.ipv6Packet)) {
		 	if(ischosen(v_ipPkt.ipv4Payload.ipv6Packet)) {
				if(f_setExtensionHeaders(v_ipPkt.ipv4Payload.ipv6Packet) != e_success) {
					log(" **** f_sendIpv4Packet: Error when building IPv6Packet ****");
					return e_error;
				}
			}
			else if(ischosen(v_ipPkt.ipv4Payload.ipv4EchoRequestMsg)) {
				v_ipPkt.ipv4Payload.ipv4EchoRequestMsg.checksum := fx_calcIpv4PayloadChecksum (
					v_ipPkt.ipv4Payload
				);
			}
			else if(ischosen(v_ipPkt.ipv4Payload.ipv4EchoReplyMsg)) {
				v_ipPkt.ipv4Payload.ipv4EchoReplyMsg.checksum := fx_calcIpv4PayloadChecksum (
					v_ipPkt.ipv4Payload
				);
			}
		}

		//Build IPv4 Packet
		//IHL is set in templates
		// Update the total length					
		v_ipPkt.ipv4Hdr.totalLength := fx_ipv4PacketTotalLength (v_ipPkt);

		// Compute payload checksum (Icmpv6, UDP, ...)
		v_ipPkt.ipv4Payload.ipv4EchoRequestMsg.checksum := fx_calcIpv4PayloadChecksum (
			v_ipPkt.ipv4Payload
		);

		// Compute header checksum (HCS)
		v_ipPkt.ipv4Hdr.hcs := fx_calcIpv4Hcs (
			v_ipPkt.ipv4Hdr
+13 −12
Original line number Diff line number Diff line
@@ -28,6 +28,7 @@ module LibIpv6_Interface_TypesAndValues {
	import from LibIpv6_CommonRfcs_TypesAndValues all;
	import from LibIpv6_Rfc4306Ikev2_TypesAndValues all;
	import from LibIpv6_Rfc792Icmpv4_TypesAndValues all;
	import from LibIpv6_Rfc826Arp_TypesAndValues all;

	group ipv6TestSystem {
		/*
@@ -39,7 +40,9 @@ module LibIpv6_Interface_TypesAndValues {
		 *			be defined based on a type compatible component type.
		*/
		type component LibIpv6Node {
			port Ipv4Port ipv4Port;
			port Ipv6Port ipPort;
			port ArpPort arpPort;
			timer tc_ac:= PX_TAC;
			timer tc_noAc:= PX_TNOAC;
			timer tc_wait:= PX_TWAIT;
@@ -89,7 +92,7 @@ module LibIpv6_Interface_TypesAndValues {
			MobilePrefixSolicitation,
			MobilePrefixAdvertisement,
			MipRouterAdvertisement,
			BindingRefreshRequest,//BR
			BindingRefreshRequest,
			HomeTestInit,//Hoti
			CareOfTestInit,//Coti
			HomeTest,//Hot
@@ -128,17 +131,7 @@ module LibIpv6_Interface_TypesAndValues {

	group ipv4TestSystem {

		type component LibIpv4Node {
			port Ipv4Port ipv4Port;
			timer tc_ac:= PX_TAC;
			timer tc_noAc:= PX_TNOAC;
			timer tc_wait:= PX_TWAIT;
			timer tc_loop := PX_LOOP ;
			var StringStack v_stateStack:= c_initStringStack;
			port SyncPort syncSendPort;
			port SyncPort syncPort;
			timer tc_sync := PX_TSYNC_TIME_LIMIT;
		}
		
	
		type record Ipv4NodeParams {
			boolean 	useInTa,
@@ -155,6 +148,14 @@ module LibIpv6_Interface_TypesAndValues {
			Ipv4Packet
		}
		
		type port ArpPort message {
			inout
			//Arp
			ArpEthRequest,
			ArpEthReply,
			ArpEthPacket
		}
		
	}//end ipv4TestSystem

	group ipv6PacketDefs {
+2 −2
Original line number Diff line number Diff line
@@ -36,7 +36,7 @@
	 * @return 	execution status
	*/
	function f_sendIpv4EchoRequest (in template Ipv4EchoRequest p_ipv4EchoRequest) 
	runs on LibIpv4Node
	runs on LibIpv6Node
	return FncRetCode {
		var Ipv4EchoRequest v_ipPkt;
		v_ipPkt := valueof(p_ipv4EchoRequest);
@@ -72,4 +72,4 @@
	}//end f_sendIpv4EchoRequest


} // end module LibIpv6_Rfc2463Icmpv6_Functions
} // end module LibIpv6_Rfc792Icmpv6_Functions
+4 −4
Original line number Diff line number Diff line
@@ -2,7 +2,7 @@
 *	@author 	STF 276
 *  @version 	$Id$
 *	@desc		This module specifies common template definitions
 *              to specify ICMPv6 packets
 *              to specify ICMPv4 packets
 *
 */
module LibIpv6_Rfc792Icmpv4_Templates {
@@ -54,14 +54,14 @@ module LibIpv6_Rfc792Icmpv4_Templates {
		 *	@param  p_dst Binary IPv6 address associated with NUT.
		 *	@param  p_ipv6Packet Tunneled IPv6 packet
		*/
		template Ipv4EchoRequest mw_ipv4EchoReply_noData(
		template Ipv4EchoReply mw_ipv4EchoReply_noData(
			template Ipv4Address p_src,
			template Ipv4Address p_dst
		) := {
			ipv4Hdr := mw_ipv4Hdr_protocol_srcDst(c_protocol_icmp, p_src, p_dst),
			ipv4Payload := {
				ipv4EchoRequestMsg := {
					icmpType := c_icmpType_ipv4EReq,
				ipv4EchoReplyMsg := {
					icmpType := c_icmpType_ipv4ERep,
					icmpCode := c_ipv4IcmpCode0,
					checksum := ?,
					identifier := c_defId,
+1 −1
Original line number Diff line number Diff line
@@ -6,7 +6,7 @@
 *              Common and Ipv6 library. Also it provides some useful  
 *              constant definitions.
 *              All types have been defined on the basis of RFC 792
 *  @url        http://www.ietf.org/rfc/rfc2463.txt
 *  @url        http://www.ietf.org/rfc/rfc792.txt
 *  
 */
 module LibIpv6_Rfc792Icmpv4_TypesAndValues {