diff -r 000000000000 -r af10295192d8 linklayerprotocols/pppnif/INC/in_ip.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/linklayerprotocols/pppnif/INC/in_ip.h Tue Jan 26 15:23:49 2010 +0200 @@ -0,0 +1,262 @@ +// Copyright (c) 1997-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: +// Obsolete TCP/IP header file +// +// + +/** + @file in_ip.h + @internalTechnology + @deprecated This file originates from an obsolete implementation of the TCP/IP stack +*/ + +#ifndef __IN_IP_H__ +#define __IN_IP_H__ + +#include + +const TUint KIPFragListTTL = 60*1000000; +const TUint KIPMinHeaderSize = 20; +const TUint KIPMaxHeaderSize = 60; // Max length of an IP header with options +const TUint KIPDefaultTOS = 0; +const TInt KIPDefaultTTL = 255; +const TUint KIPVersion = 4; +const TInt KMaxIpDatagramLength = 65535; + +// Option Values +const TUint KIPOptionEOL = 0x00; +const TUint KIPOptionNOP = 0x01; +const TUint KIPOptionRecRoute = 0x07; +const TUint KIPOptionTimeStamp = 0x44; +const TUint KIPOptionSecurity = 0x82; +const TUint KIPOptionLooseSrcRt = 0x83; +const TUint KIPOptionSatNetId = 0x88; +const TUint KIPOptionStrictSrcRt = 0x89; +// Flag bits +const TUint KIPOptionIsCopiedFlag = 0x80; +// Offsets to field within an IP option +const TInt KIPOptionValByte = 0; +const TInt KIPOptionLenByte = 1; +const TInt KIPOptionOffset = 2; +const TInt KIPOptionMinOffset = 4; + +class ThdrICMP; + +/** +Manipulate fields in an IP packet header. +Host byte order is assumed. +@internalComponent +*/ +class ThdrIP + { +public: + static ThdrIP* GetHeader(RMBufChain &aChain); + static ThdrIP* NetGetHeader(RMBufChain &aChain); + inline static ThdrIP* Ptr(RMBufPacketBase& aPacket); + inline static ThdrIP* Ptr(ThdrICMP* aHdr); + inline static ThdrIP* NetPtr(ThdrIP* aHdr); + inline TUint8* EndPtr(); + inline TUint8* NetEndPtr(); + inline TUint8* OptPtr(); + void SwapOrder(); + TInt CopyOptionsCount(); + TInt CopyOptions(ThdrIP* aDstPtr); + inline static TBool IsOptCopied(TUint8* aBuf); + inline TUint GetVersion(); + inline void SetVersion(TUint aVal); + inline TUint NetGetVersion(); + inline TUint GetHdrLen(); + inline void SetHdrLen(TUint aVal); + inline TUint NetGetHdrLen(); + inline TUint GetTOS(); + inline void SetTOS(TUint aVal); + inline TUint GetLength(); + inline void SetLength(TUint aVal); +//#ifdef VJCOMP + inline TUint NetGetId(); + inline void NetSetId(TUint aVal); + inline TUint16 NetGetLength(); + inline void NetSetLength(TUint16 aVal); + inline void VJSetChecksum(TUint16 aVal); + inline void NetSetProtocol(TUint aVal); + inline TUint NetGetFragment(); + inline TUint16 Word0(); + inline TUint16 Word3(); + inline TUint16 Word4(); + inline TUint8* GetOptions(); +//#endif + inline TUint GetId(); + inline void SetId(TUint aVal); + inline TUint GetMF(); + inline void SetMF(TUint aVal); + inline TUint GetDF(); + inline void SetDF(TUint aVal); + inline TUint GetOffset(); + inline void SetOffset(TUint aVal); + inline TUint GetFragment(); + inline void SetFragment(TUint aVal); + inline void SetFragment(TUint aOffset, TUint aMF); + inline TUint GetTTL(); + inline void SetTtl(TUint aVal); + inline TUint GetProtocol(); + inline TUint NetGetProtocol(); + inline void SetProtocol(TUint aVal); + inline TUint GetChecksum(); + inline void SetChecksum(TUint aVal); + inline TUint NetGetChecksum(); + inline void NetSetChecksum(TUint aVal); + inline TUint32 GetSrcAddr(); + inline TUint32 NetGetSrcAddr(); + inline void SetSrcAddr(TUint32 aAddr); + inline TUint32 GetDstAddr(); + inline TUint32 NetGetDstAddr(); + inline void SetDstAddr(TUint32 aAddr); + inline void SetWord0(TUint aHdrLen, TUint aTOS, TUint aLen); + inline void SetWord1(TUint aId); + inline void SetWord1(TUint aId, TUint aDF); + inline void SetWord1(TUint aId, TUint aMF, TUint aOffset); + inline void SetWord2(TUint aTTL, TUint aProtocol); // Checksum invariably set afterwards +private: + union + { + TUint32 iData32[3]; + TUint16 iData16[6]; + TUint8 iData8[12]; + } u; + TUint32 iSrcAddr; + TUint32 iDstAddr; + }; + + +// ICMP Type and Code values +const TUint KICMPTypeEchoReply = 0; +const TUint KICMPCode = 0; +const TUint KICMPTypeUnreachable = 3; +const TUint KICMPCodeUnreachNet = 0; +const TUint KICMPCodeUnreachHost = 1; +const TUint KICMPCodeUnreachProtocol = 2; +const TUint KICMPCodeUnreachPort = 3; +const TUint KICMPCodeUnreachNeedFrag = 4; +const TUint KICMPCodeUnreachSrcRouteFail = 5; +const TUint KICMPCodeUnreachNetUnknown = 6; +const TUint KICMPCodeUnreachHostUnknown = 7; +const TUint KICMPCodeUnreachSrcHostIsolated = 8; // Obsolete +const TUint KICMPCodeUnreachNetProhibited = 9; +const TUint KICMPCodeUnreachHostProhibited = 10; +const TUint KICMPCodeUnreachNetTOS = 11; +const TUint KICMPCodeUnreachHostTOS = 12; +const TUint KICMPCodeUnreachProhibited = 13; +const TUint KICMPCodeUnreachPrecVolation = 14; +const TUint KICMPCodeUnreachPrecCutoff = 15; +const TUint KICMPTypeSourceQuench = 4; +const TUint KICMPTypeRedirect = 5; +const TUint KICMPCodeRedirectNet = 0; +const TUint KICMPCodeRedirectHost = 1; +const TUint KICMPCodeRedirectNetTOS = 2; +const TUint KICMPCodeRedirectHostTOS = 3; +const TUint KICMPTypeEchoRequest = 8; +const TUint KICMPTypeRouterAdvert = 9; +const TUint KICMPTypeRouterSolicit = 10; +const TUint KICMPTypeTimeExceeded = 11; +const TUint KICMPCodeExceedInTransit = 0; +const TUint KICMPCodeExceedInReasm = 1; +const TUint KICMPTypeBadParameter = 12; +const TUint KICMPTypeTimeRequest = 13; +const TUint KICMPTypeTimeReply = 14; +const TUint KICMPTypeInfoRequest = 15; // Obsolete +const TUint KICMPTypeInfoReply = 16; // Obsolete +const TUint KICMPTypeMaskRequest = 17; +const TUint KICMPTypeMaskReply = 18; + +/** +Manipulate fields in an ICMP packet header. +@internalComponent +*/ +class ThdrICMP +{ +public: +// void SwapOrder(); +// static ThdrICMP* GetHeader(RMBufChain &aChain); +// static ThdrICMP* NetGetHeader(RMBufPacketBase& aPacket); + inline static ThdrICMP* Ptr(RMBufPacketBase& aPacket); + inline static ThdrICMP* Ptr(ThdrIP* aHdr); + inline static ThdrICMP* NetPtr(ThdrIP* aHdr); + inline ThdrIP* IpPtr(); + inline TUint NetGetType(); + inline void NetSetType(TInt aVal); + inline TUint NetGetCode(); + inline void NetSetCode(TInt aVal); + inline void NetSet(TUint aType, TUint aCode); + inline TInt NetGetChecksum(); + inline void NetSetChecksum(TInt aSum); +private: +// ICMP Base Protocol Header + union + { + TUint8 iData8[4]; + TUint16 iData16[2]; + TUint32 iData32[1]; + } u; +}; + +/* + Type of service + Bits + 0-2 Precedence + 000 Routine + 001 Priority + 010 Immediate + 011 Flash + 100 Flash override + 101 CRITIC/ECP + 110 Internetwork control + 111 Network control + 3 0=Normal delay 1=Low delay + 4 0=Normal throughput 1=High throughput + 5 0=Normal reliability 1=High reliablity + 6 Reserved + 7 Reserved + + Flags + Bits + 0 Reserved (must be zero) + 1 DF 0=May fragment 1=Dont fragment + 2 MF 0=Last fragement 1=More fragments + + Options + Two types: + 1. Single byte of optin type + 2. Option type byte, option length byte (including type and length bytes), option data bytes + Type as follows: + 1 bit Copy to each fragment flag + 2 bits Option class + 0 = control + 1 = reserved + 2 = debugging and measurement + 3 = reserved + 5 bits Option number + Class Number Length Description + 0 0 - End of options list + 0 1 - NOP for alignment padding + 0 2 11 Security + 0 3 var Loose source routing + 0 9 var Strict source routing + 0 7 var Record route + 2 4 var Internet timestamp + */ + +#include "networking/in_ip.inl" + +#endif +