tcpiputils/dhcp/include/DHCP_Std.h
changeset 0 af10295192d8
child 53 7e41d162e158
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tcpiputils/dhcp/include/DHCP_Std.h	Tue Jan 26 15:23:49 2010 +0200
@@ -0,0 +1,247 @@
+// Copyright (c) 2004-2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+// Provides constants common across DHCP component
+// 
+//
+
+/**
+ @file DHCP_Std.h
+*/
+
+#ifndef __DHCP_STD_H__
+#define __DHCP_STD_H__
+
+#include <e32def.h>
+
+#include <es_sock.h>
+#include <es_enum.h>
+#include <in_sock.h>
+#include <cflog.h>
+#include <es_sock_partner.h>
+
+#ifdef _DEBUG
+const TUid KMyPropertyCat = {0x101FD9C5};
+const TUint32 KMyPropertyDestPortv4 = 67;
+const TUint32 KMyPropertyDestPortv6 = 547;
+#endif
+
+__CFLOG_STMT(_LIT8(KLogSubSysDHCP, "DHCP");) // subsystem name
+
+IMPORT_C TInt E32Main();
+
+#ifdef EKA2
+_LIT(KDHCPServerName,"!DHCPServ");
+#else
+_LIT(KDHCPServerName,"DHCPServ");
+#endif
+
+_LIT(KDHCPProcessName,"DhcpServ");
+
+_LIT(KDHCPExeName, "DHCPexe.exe");
+_LIT(KDHCPDLLName,"DHCPServ.dll");
+
+//persistence TIDs for DHCPv4 & DHCPv6 (cooked-up numbers to be able distinguish
+//what's been stored. Doesn't have to be system wide unique
+const TInt KDHCPv6Persinstence = 0x01DFA341;
+const TInt KDHCPv4Persinstence = 0x01DFA342;
+const TInt KDHCPv6PersinstenceId = 1;
+const TInt KDHCPv4PersinstenceId = 1;
+const TInt KDHCPv4MaxRetryCount = 3;
+
+const TInt KDHCPSrvMajorVersionNumber=1;
+const TInt KDHCPSrvMinorVersionNumber=0;
+const TInt KDHCPSrvBuildVersionNumber=0;
+
+const TUint8	KDhcpParameterRequestListLen = 7;
+const TUint16	KDhcpMaxMsgSizeIP4 = 576;
+
+const TUint8	KIp4AddrByteLength = 4;
+const TUint8	KIp4ChAddrMaxLength = 16;
+const TUint8	KHwAddrOffset = 8;
+#ifdef SYMBIAN_NETWORKING_ADDRESS_PROVISION
+const TUint 	KHwAddrLength = 6;
+#endif //SYMBIAN_NETWORKING_ADDRESS_PROVISION
+
+#ifdef _DEBUG
+const TUint8	KDhcpWrongSrcPort = 34;
+const TUint8	KDhcpWrongDestPort = 33;
+#else
+const TUint8	KDhcpSrcPort = 68;
+const TUint8	KDhcpDestPort = 67;
+#endif
+
+#ifdef SYMBIAN_NETWORKING_DHCPSERVER
+// now that we are having both dhcp client and server implemantation within 
+// DHCPServe.exe, we explicitly mentioned the client and server port to avoid confusion
+const TUint8 	KDhcpClientPort = 68;
+const TUint8	KDhcpServerPort = 67;
+
+/** 6 hours, magic number which is set on the rational that
+ anything bigger than this number would not be required as a mobile device might
+ not be used as a DHCP server for more than 6hours continuously
+ anything less than this lease time would mean more DHCP network traffic to reconfigure/renew
+ when the lease time expires
+*/
+const TUint32 KDefaultLeaseTime = 21600;
+
+// Constant used for setting custom lease time for the DHCP server 
+// using RProperty::Define and RProperty::Set API's
+// Only on Debug builds
+#ifdef _DEBUG
+const TUint32 KMyDefaultLeaseTime = 21600;
+#endif
+
+#endif // SYMBIAN_NETWORKING_DHCPSERVER
+
+
+const TUint		KOneSecond = 1;
+const TInt		KInfinity = -1;
+const TUint		KHalfSecondInMicroSeconds = 500000;
+const TUint		KZeroSecond = 0;
+const TUint     KFailTimeOut = 10;
+const TUint		KWaitForResponseTime = 512;	// in seconds
+const TUint		KReallyLongLease = 0x7fffffff; // over 68 years - a virtual freehold
+
+const TTimeIntervalSeconds KManualRenewTimeout = 2*KWaitForResponseTime;
+
+//------------------------------------------------------------------------------------
+//-- Debug heap control functions definition for the DHCP daemon.
+//-- Access to these function is provided by RConnection Ioctl functionality.
+//-- Note that this Ioctl level KDhcpMemDbgIoctl is not standard.
+//------------------------------------------------------------------------------------
+
+#ifdef  _DEBUG
+#define __DHCP_HEAP_CHECK_CONTROL
+#endif
+
+//-- IOCTL level for heap debug control functions
+const TUint KDhcpMemDbgIoctl    = KConnWriteUserDataBit | 0x1000;
+
+//-- debug heap control functions numbers
+
+const TUint KDHCP_DbgMarkHeap   = 1; //-- start heap mark.
+const TUint KDHCP_DbgCheckHeap  = 2; //-- check heap, required a paremeter - number of expected allocated cells.
+const TUint KDHCP_DbgMarkEnd    = 3; //-- mark the end of heap checking, required a paremeter - number of expected allocated cells.
+const TUint KDHCP_DbgFailNext   = 4; //-- simulate heap alloc failure. Requires a parameter - failure rate. if param <0 resets.
+const TUint KDHCP_DbgFlags      = 5; //-- set debug flags.
+
+//-- debug flags used with KDHCP_DbgFlags
+const TUint KDHCP_FailDiscover         	 = 1;  	//-- force init task to fail (state machine returns -KErrTimeOut)
+const TUint KDHCP_FailRenew            	 = 2;  	//-- force renew task to fail (state machine returns -KErrTimeOut)
+const TUint KDHCP_FailRebind           	 = 4;  	//-- force rebind task to fail (state machine returns -KErrTimeOut)
+const TUint KDHCP_SetShortLease        	 = 8;  	//-- set short lease as defined in KDHCP_ShortLeaseSec
+const TUint KDHCP_SetShortRetryTimeOut 	 = 16; 	//-- set short lease as defined in KDHCP_ShortRetryTimeOutSec
+const TUint KDHCP_ForceDiscovery       	 = 32; 	//-- ignore lease time in commDB.
+const TUint KDHCP_Dad 					 = 64;	// simulate a duplicate ip address has been found
+const TUint KDHCP_ShortLeaseRenewTime  	 = 20;	//
+const TUint KDHCP_ShortLeaseRebindTime   = 70;	// must be greater than timeout for test 5_6, so we know that renew worked
+const TUint KDHCP_ShortLeaseLeaseTime 	 = 110;	//
+const TUint KDHCP_ShortRetryTimeOut    	 = 7;	//
+const TUint KDHCP_RequestIP4BroadcastOffer = 128;	//-- override setting unicast bit in offers
+
+
+//-- buffer for storing function number
+typedef TPckgBuf<TInt> TDhcpMemDbgParamBuf;
+
+
+//-- IOCTL level for per-interface debug functions.
+//    specific numbers must have KConnWriteUserDataBit/KConnReadUserDataBit set as appropriate
+const TUint KDhcpInterfaceDbgIoctl    = 0x2000;
+
+
+
+
+
+
+class TDhcpRnd
+/**
+  * Little random number generator class
+  *
+  * @internalTechnology
+  */
+        {
+public:
+        TDhcpRnd();
+        TInt Rnd(TInt aMin, TInt aMax);
+        TUint32 Xid() const;
+        void SetXid(TUint32 aXid);
+    void Init();
+    void Init6();
+private:
+        TInt64 iSeed;
+        TUint32 iXid;
+        };
+
+inline void TDhcpRnd::SetXid(TUint32 aXid)
+/**
+  * Sets transaction id
+  *
+  * @internalTechnology
+  *
+  */
+        {
+        iXid = aXid;
+        }
+
+inline TUint32 TDhcpRnd::Xid() const
+/**
+  * Returns transaction id
+  *
+  * @internalTechnology
+  *
+  */
+        {
+        return iXid;
+        }
+
+inline void TDhcpRnd::Init6()
+/**
+  * Initialises class to a random value
+  *
+  * @internalTechnology
+  */
+   {
+        SetXid(static_cast<TUint32>(Rnd(0,0xFFFFFF)));
+   }
+
+inline void TDhcpRnd::Init()
+/**
+  * Initialises class to a random value
+  *
+  * @internalTechnology
+  */
+   {
+        SetXid(static_cast<TUint32>(Rnd(0,KMaxTInt)));
+   }
+
+/**
+Byte-to byte copying one object to another. Using Mem::Copy allows to avoid system crash on target platform
+if the destination address isn't aligned to machine word boundary (e.g if it is a middle of some buffer).
+Also performs a kind of type-check.
+
+@param  apDst   destination address
+@param  apSrc   pointer to the source object
+@return pointer to the destination object 
+*/
+template<class T>
+inline T* ObjectByteCopy(T* apDst, const T* apSrc)
+{
+    return reinterpret_cast<T*>( Mem::Copy(apDst, apSrc ,sizeof(T)));
+}
+
+
+
+
+#endif // __DHCP_STD_H__
+