X-Git-Url: http://g0dil.de/git?a=blobdiff_plain;f=senf%2FPackets%2FDefaultBundle%2FNDPOptions.hh;h=d4cc4a7846535134e206ac35613b19bf485b567d;hb=e3179a2123ad51d0d9eb63834a581145c4f77c92;hp=cefce5591e221d377129b49fecf5b619d0025dfb;hpb=209950ee5f6898978cd68614ef339ae3531c5c53;p=senf.git diff --git a/senf/Packets/DefaultBundle/NDPOptions.hh b/senf/Packets/DefaultBundle/NDPOptions.hh index cefce55..d4cc4a7 100644 --- a/senf/Packets/DefaultBundle/NDPOptions.hh +++ b/senf/Packets/DefaultBundle/NDPOptions.hh @@ -1,4 +1,4 @@ -// $Id: ICMPv6TypePacket.hh 1449 2009-09-25 23:03:48Z g0dil $ +// $Id$ // // Copyright (C) 2010 // Fraunhofer Institute for Open Communication Systems (FOKUS) @@ -28,9 +28,11 @@ // Custom includes #include #include -#include +#include +//-///////////////////////////////////////////////////////////////////////////////////////////////// namespace senf { + //############################################################# //ICMPv6 Neighbor Discovery (RFC 4861) Options //############################################################# @@ -44,11 +46,21 @@ namespace senf { typedef GenericTLVParserRegistry Registry; }; - typedef GenericTLVParserBase NDPGenericOptionParser; + + struct NDPGenericOptionParser : public GenericTLVParserBase + { + typedef GenericTLVParserBase base; + NDPGenericOptionParser(data_iterator i, state_type s) : base(i,s) {} + + senf::PacketParserBase::size_type bytes() const + { + return length()*8; + } + }; struct NDPSourceLLAddressTLVParser : public NDPOptionParser { -# include SENF_PARSER() +# include SENF_PARSER() SENF_PARSER_INHERIT ( NDPOptionParser ); SENF_PARSER_FIELD ( source, MACAddressParser); SENF_PARSER_FINALIZE ( NDPSourceLLAddressTLVParser); @@ -64,7 +76,7 @@ namespace senf { struct NDPTargetLLAddressTLVParser : public NDPOptionParser { -# include SENF_PARSER() +# include SENF_PARSER() SENF_PARSER_INHERIT ( NDPOptionParser ); SENF_PARSER_FIELD ( target, MACAddressParser ); SENF_PARSER_FINALIZE ( NDPTargetLLAddressTLVParser ); @@ -74,13 +86,17 @@ namespace senf { type() = typeId; length() = 1; } - static const UInt8Parser::value_type typeId = 0x02; + + senf::PacketParserBase::size_type bytes(NDPTargetLLAddressTLVParser p) { + return length()*8; + } + static const type_t::value_type typeId = 0x02; void dump(std::ostream & os) const; }; struct NDPPrefixInformationTLVParser : public NDPOptionParser { -# include SENF_PARSER() +# include SENF_PARSER() SENF_PARSER_INHERIT ( NDPOptionParser ); SENF_PARSER_FIELD ( prefixLength, UInt8Parser ); SENF_PARSER_BITFIELD ( l, 1, bool ); @@ -99,13 +115,16 @@ namespace senf { reserved1() = 0; reserved2() = 0; } + senf::PacketParserBase::size_type bytes(NDPPrefixInformationTLVParser p) { + return length()*8; + } static const UInt8Parser::value_type typeId = 0x03; void dump(std::ostream & os) const; }; struct NDPMTUTLVParser : public NDPOptionParser { -# include SENF_PARSER() +# include SENF_PARSER() SENF_PARSER_INHERIT ( NDPOptionParser ); SENF_PARSER_PRIVATE_BITFIELD ( reserved, 16, unsigned ); SENF_PARSER_FIELD ( mtu, UInt32Parser ); @@ -122,9 +141,13 @@ namespace senf { }; } +//-///////////////////////////////////////////////////////////////////////////////////////////////// +//#include "NDPOptions.cci" +//#include "NDPOptions.ct" +//#include "NDPOptions.cti" #endif - + // Local Variables: // mode: c++ // fill-column: 100