X-Git-Url: http://g0dil.de/git?a=blobdiff_plain;f=Packets%2FDefaultBundle%2FIPv6Packet.hh;h=2ce41a6101c0407a215d8438077d55d5711a5c69;hb=fd3a0e8ac95d1158e9ea661ddf9187b67c70169f;hp=509419c5cd901d53fadbb26761b80f8b464d60e5;hpb=67608d39cb73231d6deaae285aa5477762246e50;p=senf.git diff --git a/Packets/DefaultBundle/IPv6Packet.hh b/Packets/DefaultBundle/IPv6Packet.hh index 509419c..2ce41a6 100644 --- a/Packets/DefaultBundle/IPv6Packet.hh +++ b/Packets/DefaultBundle/IPv6Packet.hh @@ -1,6 +1,8 @@ +// $Id: EthernetPacket.hh 299 2007-07-10 21:23:49Z g0dil $ +// // Copyright (C) 2007 -// Fraunhofer Institut fuer offene Kommunikationssysteme (FOKUS) -// Kompetenzzentrum fuer Satelitenkommunikation (SatCom) +// Fraunhofer Institute for Open Communication Systems (FOKUS) +// Competence Center NETwork research (NET), St. Augustin, GERMANY // Stefan Bund // // This program is free software; you can redistribute it and/or modify @@ -21,8 +23,8 @@ /** \file \brief IPv6Packet public header */ -#ifndef HH_IPv6Packet_ -#define HH_IPv6Packet_ 1 +#ifndef HH_SENF_Packets_DefaultBundle_IPv6Packet_ +#define HH_SENF_Packets_DefaultBundle_IPv6Packet_ 1 // Custom includes #include "../../Socket/Protocols/INet/INet6Address.hh" @@ -38,9 +40,9 @@ namespace senf { \see INet6Address */ - struct Parse_INet6Address : public PacketParserBase + struct INet6AddressParser : public PacketParserBase { - Parse_INet6Address(data_iterator i, state_type s) : PacketParserBase(i,s,fixed_bytes) {} + INet6AddressParser(data_iterator i, state_type s) : PacketParserBase(i,s,fixed_bytes) {} /////////////////////////////////////////////////////////////////////////// @@ -49,18 +51,19 @@ namespace senf { value_type value() const { return value_type::from_data(i()); } void value(value_type const & v) { std::copy(v.begin(), v.end(), i()); } - operator value_type() { return value(); } - byte & operator[](size_type index) { return *boost::next(i(),index); } - Parse_INet6Address const & operator= (value_type const & other) + operator value_type() const { return value(); } + byte & operator[](size_type index) const { return *boost::next(i(),index); } + INet6AddressParser const & operator= (value_type const & other) { value(other); return *this; } }; /** \brief Parse an IPv6 packet + \image html IPv6Packet.png \see IPv6PacketType \n RFC 2460 */ - struct Parse_IPv6 : public PacketParserBase + struct IPv6PacketParser : public PacketParserBase { # include SENF_FIXED_PARSER() @@ -68,17 +71,17 @@ namespace senf { SENF_PARSER_BITFIELD( trafficClass, 8, unsigned ); SENF_PARSER_BITFIELD( flowLabel, 20, unsigned ); - SENF_PARSER_FIELD( length, Parse_UInt16 ); - SENF_PARSER_FIELD( nextHeader, Parse_UInt8 ); - SENF_PARSER_FIELD( hopLimit, Parse_UInt8 ); - SENF_PARSER_FIELD( source, Parse_INet6Address ); - SENF_PARSER_FIELD( destination, Parse_INet6Address ); + SENF_PARSER_FIELD( length, UInt16Parser ); + SENF_PARSER_FIELD( nextHeader, UInt8Parser ); + SENF_PARSER_FIELD( hopLimit, UInt8Parser ); + SENF_PARSER_FIELD( source, INet6AddressParser ); + SENF_PARSER_FIELD( destination, INet6AddressParser ); SENF_PARSER_INIT() { version() = 6; } - SENF_PARSER_FINALIZE(Parse_IPv6); + SENF_PARSER_FINALIZE(IPv6PacketParser); }; /** \brief IPv6 packet @@ -87,14 +90,36 @@ namespace senf { \ref IPv6Packet \par Fields: - \ref Parse_IPv6 - + \ref IPv6PacketParser + + + + + + + + + + + + + + + + + + + + +
0 4 812 16 2024 2831
\ref IPv6PacketParser::version() "Version"\ref IPv6PacketParser::trafficClass() "Traffic Class"\ref IPv6PacketParser::flowLabel() "Flow Label"
\ref IPv6PacketParser::length() "Payload Length"\ref IPv6PacketParser::nextHeader() "Next Header"\ref IPv6PacketParser::hopLimit() "Hop Limit"
+ \ref IPv6PacketParser::source() "Source Address"
+ \ref IPv6PacketParser::destination() "Destination Address"
+ \par Associated registries: \ref IpTypes \par Finalize action: - Set \a length from payload size\n - Set \a nextHeader from type of next packet if found in \ref IpTypes + \copydetails finalize() \ingroup protocolbundle_default */ @@ -104,20 +129,27 @@ namespace senf { { #ifndef DOXYGEN typedef PacketTypeMixin mixin; - typedef ConcretePacket packet; - typedef Parse_IPv6 parser; #endif + typedef ConcretePacket packet; ///< IPv6 packet typedef + typedef IPv6PacketParser parser; ///< typedef to the parser of IPv6 packet + using mixin::nextPacketRange; using mixin::nextPacketType; using mixin::initSize; using mixin::init; - static registry_key_t nextPacketKey(packet p) + static key_t nextPacketKey(packet p) { return p->nextHeader(); } - static void dump(packet p, std::ostream & os); - - static void finalize(packet p); + /** \brief Dump given IPv6Packet in readable form to given output stream */ + static void dump(packet p, std::ostream & os); + + static void finalize(packet p); ///< Finalize packet. + /**< \li set \ref IPv6PacketParser::length() "length" + from payload size + \li set \ref IPv6PacketParser::nextHeader() + "nextHeader" from type of next packet if found + in \ref IpTypes */ }; /** \brief IPv6 packet typedef */