diff -r 000000000000 -r af10295192d8 linklayerprotocols/ethernetnif/INC/ProtocolHeaders.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/linklayerprotocols/ethernetnif/INC/ProtocolHeaders.h Tue Jan 26 15:23:49 2010 +0200 @@ -0,0 +1,86 @@ +// 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: +// + +/** + @file + @internalComponent +*/ + +#if !defined(__ProtocolHeaders_H__) +#define __ProtocolHeaders_H__ + +#define DotToIp(a,b,c,d) (((a)<<24) | ((b)<<16) | ((c)<<8) | (d)) + +const TUint KUDPHeaderSize = 8; +const TUint KIPMinHeaderSize = 20; +const TUint KIPDefaultTOS = 0; +const TInt KIPDefaultTTL = 255; +const TUint KIPVersion = 4; + +struct TGenericHeader +{ +}; + +/** +IP message header +*/ +struct TIpHdr +{ +public: + //inline TUint32 DestAddr() const {return(BigEndian::Get32(iDestAddr.Begin()));}; + //inline TUint32 SrcAddr() const {return(BigEndian::Get32(iSrcAddr.Begin()));}; + //inline TUint16 FragOffset() const {return(BigEndian::Get16(iFragOffset.Begin()));}; + /** Bits 7..4 of iVersion */ + inline TUint Version() const {return (iVersion>>4); }; + inline void SetVersion(TUint aVal) { iVersion = (TUint8)((iVersion&0xf)|((aVal&0xf)<<4)); }; + /** Bits 3..0 of iVersion */ + inline TUint HdrLen() const { return (iVersion&0xf)<<2; }; + inline void SetHdrLen(TUint aVal) { iVersion = + (TUint8)((iVersion&0xf0)|((TUint8)(aVal>>2)&0xf)); }; + inline TUint TOS() { return iTOS; }; + inline void SetTOS(TUint aVal) { iTOS = (TUint8)(aVal&0xff); }; + inline TUint16 Length() { return BigEndian::Get16((TUint8*)&iLength); }; + inline void SetLength(TUint16 aVal) { BigEndian::Put16((TUint8*)&iLength,aVal); }; + inline TUint16 Ident() { return BigEndian::Get16((TUint8*)&iIdent); }; + inline void SetIdent(TUint16 aVal) { BigEndian::Put16((TUint8*)&iIdent,aVal); }; + inline TUint8 TTL() { return iTTL; }; + inline void SetTTL(TUint aVal) { iTTL = (TUint8)(aVal&0xff); }; + inline TUint8 Protocol() { return iProtocol; }; + inline void SetProtocol(TUint aVal) { iProtocol = (TUint8)(aVal&0xff); }; + inline TUint16 Checksum() { return BigEndian::Get16((TUint8*)&iChecksum); }; + inline void SetChecksum(TUint16 aVal) { BigEndian::Put16((TUint8*)&iChecksum,aVal); }; + inline TUint32 DestAddr() const {return(BigEndian::Get32(iDestAddr));}; + inline TUint32 SrcAddr() const {return(BigEndian::Get32(iSrcAddr));}; + inline TUint16 FragOffset() const {return BigEndian::Get16(iFragOffset);}; + inline void SetDestAddr(TUint32 aVal) const { BigEndian::Put32((TUint8*)(&iDestAddr),aVal);}; + inline void SetSrcAddr(TUint32 aVal) const { BigEndian::Put32((TUint8*)(&iSrcAddr),aVal);}; + inline void SetFragOffset(TUint16 aVal) const {BigEndian::Put16((TUint8*)(&iFragOffset),aVal);}; +protected: + TUint8 iVersion; + TUint8 iTOS; + TUint16 iLength; + TUint16 iIdent; + //TFixedArray iFragOffset; + TUint8 iFragOffset[2]; + TUint8 iTTL; + TUint8 iProtocol; + TUint16 iChecksum; + //TFixedArray iSrcAddr; + //TFixedArray iDestAddr; + TUint8 iSrcAddr[4]; + TUint8 iDestAddr[4]; +}; + +#endif