X-Git-Url: http://g0dil.de/git?a=blobdiff_plain;f=Packets%2FDefaultBundle%2FIpV6Extensions.hh;h=50ace787742b5765d20ba52f1175656f8b1bb338;hb=cb10487f67b404334eaffa60f074b8eca8f871de;hp=65c2340c65ac0691e960eb9ea468daae17a22e0a;hpb=9357448dc66bc9acfd3bd8db423deb75bcd6a2c4;p=senf.git diff --git a/Packets/DefaultBundle/IpV6Extensions.hh b/Packets/DefaultBundle/IpV6Extensions.hh index 65c2340..50ace78 100644 --- a/Packets/DefaultBundle/IpV6Extensions.hh +++ b/Packets/DefaultBundle/IpV6Extensions.hh @@ -32,65 +32,60 @@ namespace senf { + ///\addtogroup protocolbundle_default + ///@{ + // See RFC2460 - template - struct Parse_IpV6Extension_Fragment - : public ParserBase + 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 + struct IpV6ExtensionType_Fragment + : public PacketTypeBase, + public PacketTypeMixin { - using PacketRegistryMixin::registerInterpreter; - public: - /////////////////////////////////////////////////////////////////////////// - // Types - - typedef ptr_t::ptr ptr; - - /////////////////////////////////////////////////////////////////////////// - - private: - template - IpV6Extension_Fragment(Arg const & arg); + 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); + }; - virtual void v_nextInterpreter() const; - virtual void v_finalize(); - virtual void v_dump(std::ostream & os) const; + typedef IpV6ExtensionType_Fragment::packet IpV6Extension_Fragment; - friend class Packet; - }; + ///@} } ///////////////////////////////hh.e//////////////////////////////////////// +#endif +#ifndef SENF_PACKETS_DECL_ONLY //#include "IpV6Extensions.cci" -#include "IpV6Extensions.ct" +//#include "IpV6Extensions.ct" //#include "IpV6Extensions.cti" #endif @@ -101,4 +96,6 @@ namespace senf { // c-file-style: "senf" // indent-tabs-mode: nil // ispell-local-dictionary: "american" +// compile-command: "scons -u test" +// comment-column: 40 // End: