diff -r 000000000000 -r af10295192d8 tcpiputils/dhcp/include/DHCP_Std.h --- /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 + +#include +#include +#include +#include +#include + +#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 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(Rnd(0,0xFFFFFF))); + } + +inline void TDhcpRnd::Init() +/** + * Initialises class to a random value + * + * @internalTechnology + */ + { + SetXid(static_cast(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 +inline T* ObjectByteCopy(T* apDst, const T* apSrc) +{ + return reinterpret_cast( Mem::Copy(apDst, apSrc ,sizeof(T))); +} + + + + +#endif // __DHCP_STD_H__ +