X-Git-Url: http://g0dil.de/git?a=blobdiff_plain;f=Packets%2FDefaultBundle%2FIpV4Packet.hh;h=9d451c56402cdaee61a9c37d1448e5aa3e94a5ca;hb=2c4c9deecc7491fbfc916aeb41074dcb76e8a2c2;hp=e8879a2e1129af6da3afb6cf22e750e36340f969;hpb=64e170521a221effc1ba11a0544f753544d03bac;p=senf.git diff --git a/Packets/DefaultBundle/IpV4Packet.hh b/Packets/DefaultBundle/IpV4Packet.hh index e8879a2..9d451c5 100644 --- a/Packets/DefaultBundle/IpV4Packet.hh +++ b/Packets/DefaultBundle/IpV4Packet.hh @@ -1,4 +1,4 @@ -// $Id: IpV4Packet.hh 307 2007-07-14 21:31:12Z g0dil $ +// $Id$ // // Copyright (C) 2006 // Fraunhofer Institut fuer offene Kommunikationssysteme (FOKUS) @@ -24,25 +24,24 @@ #define HH_IpV4Packet_ 1 // Custom includes -#include "Packets/PacketType.hh" -#include "Packets/ParseInt.hh" -#include "Packets/PacketRegistry.hh" -#include "Packets/PacketParser.hh" +#include "Packets/Packets.hh" //#include "IpV4Packet.mpp" ///////////////////////////////hh.p//////////////////////////////////////// namespace senf { - ///\addtogroup protocolbundle_default - ///@{ + /** \brief Parse an IpV4 packet - struct Parse_IpV4 : public PacketParserBase - { - SENF_PACKET_PARSER_NO_INIT(Parse_IpV4); + Parser implementing the IpV4 header. The fields implemented are: - /////////////////////////////////////////////////////////////////////////// + \see IpV4PacketType \n + RFC 791 + \todo Implement options + */ + struct Parse_IpV4 : public PacketParserBase + { typedef Parse_UIntField < 0, 4 > Parse_Version; typedef Parse_UIntField < 4, 8 > Parse_IHL; typedef Parse_UInt8 Parse_8bit; @@ -53,6 +52,10 @@ namespace senf { typedef Parse_UIntField < 3, 16 > Parse_Frag; typedef Parse_UInt32 Parse_32bit; +# ifndef DOXYGEN + + SENF_PACKET_PARSER_NO_INIT(Parse_IpV4); + SENF_PACKET_PARSER_DEFINE_FIXED_FIELDS( ((OverlayField)( version, Parse_Version )) ((Field )( ihl, Parse_IHL )) @@ -69,17 +72,54 @@ namespace senf { ((Field )( source, Parse_32bit )) ((Field )( destination, Parse_32bit )) ); +# else + + Parse_Version version(); + Parse_IHL ihl(); + Parse_8bit tos(); + Parse_16bit length(); + Parse_16bit identifier(); + Parse_R reserved(); + Parse_DF df(); + Parse_MF mf(); + Parse_Frag frag(); + Parse_8bit ttl(); + Parse_8bit protocol(); + Parse_16bit crc(); + Parse_32bit source(); + Parse_32bit destination(); + +# endif + void init() { version() = 4; } }; + /** \brief IP protocol number registry + + This registeres packets with their IP protocol number. + + \see Protocol numbers \n + PacketRegistry + */ struct IpTypes { - // See http://www.iana.org/assignments/protocol-numbers - // Also used by IPv6 typedef boost::uint16_t key_t; }; + /** \brief IpV4 packet + + \par Packet type (typedef): + \ref IpV4Packet + + \par Fields: + \ref Parse_IpV4 + + \par Associated registries: + \ref IpTypes + + \ingroup protocolbundle_default + */ struct IpV4PacketType : public PacketTypeBase, public PacketTypeMixin @@ -99,13 +139,14 @@ namespace senf { static void dump(packet p, std::ostream & os); }; + /** \brief IpV4 packet typedef */ typedef IpV4PacketType::packet IpV4Packet; - - ///@} } ///////////////////////////////hh.e//////////////////////////////////////// +#endif +#ifndef SENF_PACKETS_DECL_ONLY //#include IpV4Packet.cci" //#include "IpV4Packet.ct" //#include "IpV4Packet.cti"