X-Git-Url: http://g0dil.de/git?a=blobdiff_plain;f=Packets%2FDefaultBundle%2FIPv6Packet.hh;h=2ce41a6101c0407a215d8438077d55d5711a5c69;hb=81f84badf27b66dbadec9890646ca1193e998505;hp=935bcea8a5af95933bfb5fb49570c11c4ffa92ff;hpb=844ac7af0a15ed6c487bc9928148ac38a2ce4025;p=senf.git diff --git a/Packets/DefaultBundle/IPv6Packet.hh b/Packets/DefaultBundle/IPv6Packet.hh index 935bcea..2ce41a6 100644 --- a/Packets/DefaultBundle/IPv6Packet.hh +++ b/Packets/DefaultBundle/IPv6Packet.hh @@ -1,8 +1,8 @@ // $Id: EthernetPacket.hh 299 2007-07-10 21:23:49Z g0dil $ // // Copyright (C) 2007 -// Fraunhofer Institute for Open Communication Systems (FOKUS) -// Competence Center NETwork research (NET), St. Augustin, GERMANY +// 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 @@ -23,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" @@ -51,14 +51,15 @@ 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); } + 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 */ @@ -91,12 +92,34 @@ namespace senf { \par Fields: \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 */ @@ -106,9 +129,10 @@ namespace senf { { #ifndef DOXYGEN typedef PacketTypeMixin mixin; - typedef ConcretePacket packet; - typedef IPv6PacketParser 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; @@ -117,9 +141,15 @@ namespace senf { 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 */