X-Git-Url: http://g0dil.de/git?a=blobdiff_plain;f=Packets%2FDefaultBundle%2FIpV6Extensions.hh;h=79cc42acdd1b597430b13bc4143e0bafd3e018f0;hb=47368f306a577d1e46df69a7f729bd3893cbe5e7;hp=380a2bb3a5a1acd72409b2b112ba38e9ad9c3951;hpb=145f6a7d0f3a6aaa77b3625351c952d24cb0b8a1;p=senf.git diff --git a/Packets/DefaultBundle/IpV6Extensions.hh b/Packets/DefaultBundle/IpV6Extensions.hh index 380a2bb..79cc42a 100644 --- a/Packets/DefaultBundle/IpV6Extensions.hh +++ b/Packets/DefaultBundle/IpV6Extensions.hh @@ -33,64 +33,52 @@ namespace senf { // 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); - - 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); }; + + typedef IpV6ExtensionType_Fragment::packet IpV6Extension_Fragment; } ///////////////////////////////hh.e//////////////////////////////////////// //#include "IpV6Extensions.cci" -#include "IpV6Extensions.ct" +//#include "IpV6Extensions.ct" //#include "IpV6Extensions.cti" #endif