X-Git-Url: http://g0dil.de/git?a=blobdiff_plain;f=senf%2FPackets%2FDefaultBundle%2FIPv6Extensions.hh;h=f2f3a47834cc596d4eb3bd42193223fc50109ae3;hb=7661548b20e6c7627f54bff87e0758396fd523ef;hp=c8749f7dd43874ae3ff5bbe615800b3bd443a119;hpb=29a39b247b75454ad25f3f9dc7a524debf8e805c;p=senf.git diff --git a/senf/Packets/DefaultBundle/IPv6Extensions.hh b/senf/Packets/DefaultBundle/IPv6Extensions.hh index c8749f7..f2f3a47 100644 --- a/senf/Packets/DefaultBundle/IPv6Extensions.hh +++ b/senf/Packets/DefaultBundle/IPv6Extensions.hh @@ -28,18 +28,17 @@ #define HH_SENF_Packets_DefaultBundle_IPv6Extensions_ 1 // Custom includes -#include -#include "IPv6ExtOptionType.hh" +#include "IPv6ExtOptions.hh" #include "ListOptionTypeParser.hh" #include "IPv6Packet.hh" //#include "IPv6Extensions.mpp" -///////////////////////////////hh.p//////////////////////////////////////// +//-///////////////////////////////////////////////////////////////////////////////////////////////// namespace senf { /** \brief Parse in IPv6 fragment extension header - + Parser implementing the IPv6 fragment extension. The fields implemented are: \image html IPv6FragmentPacket.png @@ -67,10 +66,10 @@ namespace senf { \par Fields: \ref IPv6FragmentPacketParser - + \par Associated registries: \ref IpTypes - + \par Finalize action: Set \a nextHeader from type of next packet if found in \ref IpTypes @@ -93,17 +92,16 @@ namespace senf { using mixin::initSize; using mixin::init; - static key_t nextPacketKey(packet p) + static key_t nextPacketKey(packet p) { return p->nextHeader(); } - + /** \brief Dump given IPv6FragmentPacket in readable form to given output stream */ - static void dump(packet p, std::ostream & os); + static void dump(packet p, std::ostream & os); - static void finalize(packet p) { - p->nextHeader() << key(p.next(nothrow)); } + static void finalize(packet p); }; - /** \brief IPv6 fragment extension packet typedef + /** \brief IPv6 fragment extension packet typedef \ingroup protocolbundle_default */ typedef ConcretePacket IPv6FragmentPacket; @@ -130,11 +128,11 @@ namespace senf { | Reserved | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | | - + + + + | | - + Address[1] + + + Address[1] | | - + + + + | | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ . . . @@ -142,32 +140,32 @@ namespace senf { . . . +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | | - + + + + | | - + Address[n] + + + Address[n] | | - + + + + | | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ */ # include SENF_PARSER() - + SENF_PARSER_FIELD ( nextHeader, UInt8Parser ); SENF_PARSER_FIELD ( headerLength, UInt8Parser ); SENF_PARSER_FIELD ( routingType, UInt8Parser ); //set to Zero for minimal implementation SENF_PARSER_FIELD_RO ( segmentsLeft, UInt8Parser ); SENF_PARSER_FIELD ( reserved, UInt32Parser ); //set to zero by RFC SENF_PARSER_VECTOR ( hopAddresses, segmentsLeft, INet6AddressParser ); - + SENF_PARSER_FINALIZE ( IPv6RoutingPacketParser ); - + //provisionary, since only type 0 is implemented - SENF_PARSER_INIT() { + SENF_PARSER_INIT() { routingType() = 0u; - reserved() = 0u; + reserved() = 0u; } }; - + /** \brief IPv6 routing extension \par Packet type (typedef): @@ -175,10 +173,10 @@ namespace senf { \par Fields: \ref IPv6RoutingPacketParser - + \par Associated registries: \ref IpTypes - + \par Finalize action: Set \a nextHeader from type of next packet if found in \ref IpTypes @@ -195,29 +193,29 @@ namespace senf { typedef ConcretePacket packet; /** \brief typedef to the parser of IPv6 routing extension packet */ typedef IPv6RoutingPacketParser parser; - + using mixin::nextPacketRange; using mixin::nextPacketType; using mixin::init; using mixin::initSize; - - static key_t nextPacketKey(packet p) + + static key_t nextPacketKey(packet p) { return p->nextHeader(); } + /** \brief Dump given IPv6RoutingPacket in readable form to given output stream */ - static void dump(packet p, std::ostream & os); - - static void finalize(packet p) { - p->nextHeader() << key(p.next(nothrow)); } + static void dump(packet p, std::ostream & os); + + static void finalize(packet p); }; - + /** \brief IPv6 routing extension packet typedef \ingroup protocolbundle_default */ typedef ConcretePacket IPv6RoutingPacket; - + // ===================================================================================================== - + /** \brief Parse in IPv6 Hop-By-Hop extension header Parser implementing the IPv6 routing Header extension. The fields implemented are: @@ -226,23 +224,23 @@ namespace senf { \see IPv6ExtensionType_HopByHop \n RFC 2460 */ - struct IPv6HopByHopOptionsPacketParser : public PacketParserBase + struct IPv6HopByHopOptionsPacketParser : public PacketParserBase { # include SENF_PARSER() - - SENF_PARSER_FIELD ( nextHeader, UInt8Parser ); - SENF_PARSER_FIELD ( headerLength, UInt8Parser ); + + SENF_PARSER_FIELD ( nextHeader, UInt8Parser ); + SENF_PARSER_FIELD_RO ( headerLength, UInt8Parser ); typedef detail::FixedAuxParserPolicy ListOptionTypeAuxPolicy; typedef detail::ListOptionTypeParser_Policy< - IPv6GenericOptionTLVParser, ListOptionTypeAuxPolicy> ListOptionTypePolicy; + IPv6GenericOptionParser, ListOptionTypeAuxPolicy> ListOptionTypePolicy; typedef ListParser ListOptionTypeParser; SENF_PARSER_FIELD ( options, ListOptionTypeParser); SENF_PARSER_FINALIZE ( IPv6HopByHopOptionsPacketParser ); }; - + /** \brief IPv6 Hop-By-Hop extension \par Packet type (typedef): @@ -250,10 +248,10 @@ namespace senf { \par Fields: \ref IPv6HopByHopOptionsPacketParser - + \par Associated registries: \ref IpTypes - + \par Finalize action: Set \a nextHeader from type of next packet if found in \ref IpTypes @@ -270,47 +268,52 @@ namespace senf { typedef ConcretePacket packet; /** \brief typedef to the parser of IPv6 Hop-By-Hop extension packet */ typedef IPv6HopByHopOptionsPacketParser parser; - + using mixin::nextPacketRange; using mixin::nextPacketType; using mixin::init; using mixin::initSize; - - static key_t nextPacketKey(packet p) - { return p->nextHeader(); } - + + static key_t nextPacketKey(packet p) { + return p->nextHeader(); } + /** \brief Dump given IPv6HopByHopOptionsPacket in readable form to given output stream */ - static void dump(packet p, std::ostream & os); - - static void finalize(packet p) { - p->nextHeader() << key(p.next(nothrow)); } + static void dump(packet p, std::ostream & os); + + static void finalize(packet p); }; - + /** \brief IPv6 routing Hop-By-Hop packet typedef \ingroup protocolbundle_default */ typedef ConcretePacket IPv6HopByHopOptionsPacket; - + // ===================================================================================================== - + /** \brief Parse in IPv6 Destination Options extension header - Parser implementing the IPv6 Destination Options Header extension. + Parser implementing the IPv6 Destination Options Header extension. The fields implemented are: \image html IPv6DestinationOptionsPacket.png \see IPv6ExtensionType_Destination \n RFC 2460 - */ - struct IPv6DestinationOptionsPacketParser : public PacketParserBase + */ + struct IPv6DestinationOptionsPacketParser : public PacketParserBase { # include SENF_PARSER() SENF_PARSER_FIELD ( nextHeader, UInt8Parser ); - SENF_PARSER_FIELD ( headerLength, UInt8Parser ); - + SENF_PARSER_FIELD_RO ( headerLength, UInt8Parser ); + typedef detail::FixedAuxParserPolicy ListOptionTypeAuxPolicy; + typedef detail::ListOptionTypeParser_Policy< + IPv6GenericOptionParser, ListOptionTypeAuxPolicy> ListOptionTypePolicy; + typedef ListParser ListOptionTypeParser; + + SENF_PARSER_FIELD ( options, ListOptionTypeParser); + SENF_PARSER_FINALIZE ( IPv6DestinationOptionsPacketParser ); }; - + /** \brief IPv6 Destination Options extension \par Packet type (typedef): @@ -318,10 +321,10 @@ namespace senf { \par Fields: \ref IPv6DestinationOptionsPacketParser - + \par Associated registries: \ref IpTypes - + \par Finalize action: Set \a nextHeader from type of next packet if found in \ref IpTypes @@ -338,29 +341,28 @@ namespace senf { typedef ConcretePacket packet; /** \brief typedef to the parser of IPv6 Destination Options extension packet */ typedef IPv6DestinationOptionsPacketParser parser; - + using mixin::nextPacketRange; using mixin::nextPacketType; using mixin::init; using mixin::initSize; - - static key_t nextPacketKey(packet p) + + static key_t nextPacketKey(packet p) { return p->nextHeader(); } /** \brief Dump given IPv6DestinationOptionsPacket in readable form to given output stream */ - static void dump(packet p, std::ostream & os); - - static void finalize(packet p) { - p->nextHeader() << key(p.next(nothrow)); } + static void dump(packet p, std::ostream & os); + + static void finalize(packet p); }; - + /** \brief IPv6 routing Destination Options packet typedef \ingroup protocolbundle_default */ typedef ConcretePacket IPv6DestinationOptionsPacket; - + } -///////////////////////////////hh.e//////////////////////////////////////// +//-///////////////////////////////////////////////////////////////////////////////////////////////// //#include "IPv6Extensions.cci" //#include "IPv6Extensions.ct" //#include "IPv6Extensions.cti"