X-Git-Url: http://g0dil.de/git?a=blobdiff_plain;f=Packets%2FDefaultBundle%2FIPv4Packet.hh;h=0cdae50f558752534870d50534512c05a659beaf;hb=8674fb1d184e7d620eb7c604957b5b4203df37a6;hp=3da21e008c7c77e2b8e7e8f2009c4a3a88a8bb2f;hpb=844ac7af0a15ed6c487bc9928148ac38a2ce4025;p=senf.git diff --git a/Packets/DefaultBundle/IPv4Packet.hh b/Packets/DefaultBundle/IPv4Packet.hh index 3da21e0..0cdae50 100644 --- a/Packets/DefaultBundle/IPv4Packet.hh +++ b/Packets/DefaultBundle/IPv4Packet.hh @@ -1,8 +1,8 @@ // $Id$ // // Copyright (C) 2006 -// Fraunhofer Institute for Open Communication Systems (FOKUS) -// Competence Center NETwork research (NET), St. Augustin, GERMANY +// Fraunhofer Institute for Open Communication Systems (FOKUS) +// Competence Center NETwork research (NET), St. Augustin, GERMANY // Stefan Bund // // This program is free software; you can redistribute it and/or modify @@ -23,8 +23,8 @@ /** \file \brief IPv4Packet public header */ -#ifndef HH_IPv4Packet_ -#define HH_IPv4Packet_ 1 +#ifndef HH_SENF_Packets_DefaultBundle_IPv4Packet_ +#define HH_SENF_Packets_DefaultBundle_IPv4Packet_ 1 // Custom includes #include "../../Socket/Protocols/INet/INet4Address.hh" @@ -50,8 +50,8 @@ namespace senf { value_type value() const { return value_type::from_data(i()); } void value(value_type const & v) { std::copy(v.begin(), v.end(), i()); } - operator value_type() { return value(); } - byte & operator[](size_type index) { return *boost::next(i(),index); } + operator value_type() const { return value(); } + byte & operator[](size_type index) const { return *boost::next(i(),index); } INet4AddressParser const & operator= (value_type const & other) { value(other); return *this; } }; @@ -60,6 +60,8 @@ namespace senf { Parser implementing the IPv4 header. + \image html IPv4Packet.png + \see IPv4PacketType \n RFC 791 @@ -76,10 +78,10 @@ namespace senf { SENF_PARSER_FIELD( length, UInt16Parser ); SENF_PARSER_FIELD( identifier, UInt16Parser ); - SENF_PARSER_BITFIELD( reserved, 1, bool ); - SENF_PARSER_BITFIELD( df, 1, bool ); - SENF_PARSER_BITFIELD( mf, 1, bool ); - SENF_PARSER_BITFIELD( frag, 13, unsigned ); + SENF_PARSER_PRIVATE_BITFIELD( reserved, 1, bool ); + SENF_PARSER_BITFIELD ( df, 1, bool ); + SENF_PARSER_BITFIELD ( mf, 1, bool ); + SENF_PARSER_BITFIELD ( frag, 13, unsigned ); SENF_PARSER_FIELD( ttl, UInt8Parser ); SENF_PARSER_FIELD( protocol, UInt8Parser ); @@ -95,11 +97,16 @@ namespace senf { SENF_PARSER_FINALIZE(IPv4PacketParser); - boost::uint16_t calcChecksum() const; + boost::uint16_t calcChecksum() const; ///< calculate header checksum + /**< calculate and return the checksum of the header + \see \ref senf::IpChecksum */ bool validateChecksum() const { return checksum() == calcChecksum(); - } + } ///< validate header checksum + /**< return \c true if the \ref checksum() "checksum" + field is equal to the \ref calcChecksum() + "calculated checksum" */ }; /** \brief IP protocol number registry @@ -114,6 +121,12 @@ namespace senf { }; /** \brief IPv4 packet + + \par Packet type (typedef): + \ref IPv4Packet + + \par Fields: + see \ref IPv4PacketParser @@ -129,7 +142,7 @@ namespace senf { - + @@ -143,21 +156,13 @@ namespace senf {
\ref IPv4PacketParser::length() "Length"
\ref IPv4PacketParser::identifier() "Identifier"\ref IPv4PacketParser::reserved() "R"R \ref IPv4PacketParser::df() "DF" \ref IPv4PacketParser::mf() "MF" \ref IPv4PacketParser::frag() "Fragment Offset"\ref IPv4PacketParser::destination() "Destination Address"
- - \par Packet type (typedef): - \ref IPv4Packet - - \par Fields: - \ref IPv4PacketParser \par Associated registries: \ref IpTypes \par Finalize action: - Set \a length from payload size\n - Set \a protocol from type of next packet if found in \ref IpTypes\n - Calculate \a checksum - + \copydetails finalize() + \ingroup protocolbundle_default */ struct IPv4PacketType @@ -166,9 +171,10 @@ namespace senf { { #ifndef DOXYGEN typedef PacketTypeMixin mixin; - typedef ConcretePacket packet; - typedef IPv4PacketParser parser; #endif + typedef ConcretePacket packet; ///< IPv4 packet typedef + typedef IPv4PacketParser parser; ///< typedef to the parser of IPv4 packet + using mixin::nextPacketRange; using mixin::nextPacketType; using mixin::initSize; @@ -176,20 +182,26 @@ namespace senf { static key_t nextPacketKey(packet p) { return p->protocol(); } - - static void dump(packet p, std::ostream & os); - static void finalize(packet p); - }; + /** \brief Dump given IPv4Packet in readable form to given output stream */ + static void dump(packet p, std::ostream & os); + + static void finalize(packet p); ///< Finalize packet. + /**< \li set \ref IPv4PacketParser::length() "length" + from payload size + \li set \ref IPv4PacketParser::protocol() "protocol" + from type of next packet if found in \ref IpTypes + \li calculate and set + \ref IPv4PacketParser::checksum() "checksum" */ + }; + /** \brief IPv4 packet typedef */ typedef ConcretePacket IPv4Packet; } ///////////////////////////////hh.e//////////////////////////////////////// -#endif -#ifndef SENF_PACKETS_DECL_ONLY -//#include IPv4Packet.cci" +//#include "IPv4Packet.cci" //#include "IPv4Packet.ct" //#include "IPv4Packet.cti" #endif