X-Git-Url: http://g0dil.de/git?a=blobdiff_plain;f=Packets%2FDefaultBundle%2FIpV6Extensions.hh;h=481734800c0b60dcf831b906af8dbf6a4f914389;hb=96d591f9024bc536e0a643b40c2bf243241d342d;hp=7bf1a566cce0db42a356726ffb1df4e5adcc3c4d;hpb=31d85cd6b8e03c5ecc924ca8892906be1bab702f;p=senf.git diff --git a/Packets/DefaultBundle/IpV6Extensions.hh b/Packets/DefaultBundle/IpV6Extensions.hh index 7bf1a56..4817348 100644 --- a/Packets/DefaultBundle/IpV6Extensions.hh +++ b/Packets/DefaultBundle/IpV6Extensions.hh @@ -32,65 +32,85 @@ 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: + + + + + + + + + +
Field nameParser type
nextHeader\ref Parse_8bit
reserved1\ref Parse_8bit
fragmentOffset\ref Parse_Offset
reserved2\ref Parse_Reserved
moreFragments\ref Parse_More
id\ref Parse_32bit
+ + \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; } + SENF_PACKET_PARSER_INIT(Parse_IpV6Extension_Fragment); /////////////////////////////////////////////////////////////////////////// - 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; + + 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 )) ); }; - 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 @@ -102,4 +122,5 @@ namespace senf { // indent-tabs-mode: nil // ispell-local-dictionary: "american" // compile-command: "scons -u test" +// comment-column: 40 // End: