X-Git-Url: http://g0dil.de/git?a=blobdiff_plain;f=Packets%2FDefaultBundle%2FIpV6Extensions.hh;h=a0bd5b0117c347bd68f3034d8dd1ce9bf7686fa2;hb=81ffa1c459b96dd44472bcef37e1e373934ee138;hp=380a2bb3a5a1acd72409b2b112ba38e9ad9c3951;hpb=145f6a7d0f3a6aaa77b3625351c952d24cb0b8a1;p=senf.git diff --git a/Packets/DefaultBundle/IpV6Extensions.hh b/Packets/DefaultBundle/IpV6Extensions.hh index 380a2bb..a0bd5b0 100644 --- a/Packets/DefaultBundle/IpV6Extensions.hh +++ b/Packets/DefaultBundle/IpV6Extensions.hh @@ -32,65 +32,86 @@ namespace senf { - // See RFC2460 - template - struct Parse_IpV6Extension_Fragment - : public ParserBase + /** \brief Parse in IpV6 fragment extension header + + Parser implementing the IpV6 fragment extension. The fields implemented are: + + \see IpV6ExtensionType_Fragment \n + RFC 2460 + */ + struct Parse_IpV6Extension_Fragment : public PacketParserBase { - template - struct rebind { typedef Parse_IpV6Extension_Fragment parser; }; - typedef Iterator byte_iterator; - - Parse_IpV6Extension_Fragment() {} - Parse_IpV6Extension_Fragment(Iterator const & i) : ParserBase(i) {} - - static unsigned bytes() { return 8; } - - /////////////////////////////////////////////////////////////////////////// - - typedef Parse_UInt8 < Iterator > Parse_8bit; - typedef Parse_UIntField < 0, 13, Iterator > Parse_Offset; - typedef Parse_UIntField < 13, 15, Iterator > Parse_Reserved; - typedef Parse_Flag < 15, Iterator > Parse_More; - typedef Parse_UInt32 < Iterator > Parse_32bit; - - Parse_8bit nextHeader() const { return Parse_8bit (this->i() ); } - Parse_8bit reserved1() const { return Parse_8bit (this->i() + 1 ); } - Parse_Offset fragmentOffset() const { return Parse_Offset (this->i() + 2 ); } - Parse_Reserved reserved2() const { return Parse_Reserved (this->i() + 2 ); } - Parse_More moreFragments() const { return Parse_More (this->i() + 2 ); } - Parse_32bit id() const { return Parse_32bit (this->i() + 4 ); } + typedef Parse_UInt8 Parse_8bit; + typedef Parse_UIntField < 0, 13 > Parse_Offset; + typedef Parse_UIntField < 13, 15 > Parse_Reserved; + typedef Parse_Flag < 15 > Parse_More; + typedef Parse_UInt32 Parse_32bit; + +# ifndef DOXYGEN + + SENF_PACKET_PARSER_INIT(Parse_IpV6Extension_Fragment); + + SENF_PACKET_PARSER_DEFINE_FIXED_FIELDS( + ((Field )( nextHeader , Parse_8bit )) + ((Field )( reserved1 , Parse_8bit )) + ((OverlayField)( fragmentOffset , Parse_Offset )) + ((OverlayField)( reserved2 , Parse_Reserved )) + ((Field )( moreFragments , Parse_More )) + ((Field )( id , Parse_32bit )) ); + +# else + + Parse_8bit nextHeader(); + Parse_8bit reserved1(); + Parse_Offset fragmentOffset(); + Parse_Reserved reserved2(); + Parse_More moreFragments(); + Parse_32bit id(); + +# endif }; - class IpV6Extension_Fragment - : public Packet, - public Parse_IpV6Extension_Fragment, - public PacketRegistryMixin + /** \brief IpV6 fragment extension + + \par Packet type (typedef): + \ref IpV6Extension_Fragment + + \par Fields: + \ref Parse_IpV6Extension_Fragment + + \par Associated registries: + \par IpTypes + + \ingroup protocolbundle_default + */ + struct IpV6ExtensionType_Fragment + : public PacketTypeBase, + public PacketTypeMixin { - using PacketRegistryMixin::registerInterpreter; - public: - /////////////////////////////////////////////////////////////////////////// - // Types - - typedef ptr_t::ptr ptr; - - /////////////////////////////////////////////////////////////////////////// - - private: - template - IpV6Extension_Fragment(Arg const & arg); - - virtual void v_nextInterpreter() const; - virtual void v_finalize(); - virtual void v_dump(std::ostream & os) const; - - friend class Packet; + typedef PacketTypeMixin mixin; + typedef ConcretePacket packet; + typedef Parse_IpV6Extension_Fragment parser; + + using mixin::nextPacketRange; + using mixin::nextPacketType; + using mixin::initSize; + using mixin::init; + + static registry_key_t nextPacketKey(packet p) + { return p->nextHeader(); } + + static void dump(packet p, std::ostream & os); }; + + /** \brief IpV6 fragment extension packet typedef */ + typedef IpV6ExtensionType_Fragment::packet IpV6Extension_Fragment; } ///////////////////////////////hh.e//////////////////////////////////////// +#endif +#ifndef SENF_PACKETS_DECL_ONLY //#include "IpV6Extensions.cci" -#include "IpV6Extensions.ct" +//#include "IpV6Extensions.ct" //#include "IpV6Extensions.cti" #endif