#define HH_SENF_Packets_DefaultBundle_IPv6Extensions_ 1
// Custom includes
-#include <senf/Packets/Packets.hh>
-#include <senf/Packets/AuxParser.hh>
-#include <senf/Packets/DefaultBundle/IPv6ExtOptionType.hh>
+#include "IPv6ExtOptions.hh"
#include "ListOptionTypeParser.hh"
#include "IPv6Packet.hh"
/** \brief Parse in IPv6 fragment extension header
Parser implementing the IPv6 fragment extension. The fields implemented are:
- \image html IPv6Extensions_Fragment.png
+ \image html IPv6FragmentPacket.png
\see IPv6ExtensionType_Fragment \n
<a href="http://tools.ietf.org/html/rfc2460">RFC 2460</a>
/** \brief Dump given IPv6FragmentPacket 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 finalize(packet p);
};
- /** \brief IPv6 fragment extension packet typedef */
+ /** \brief IPv6 fragment extension packet typedef
+ \ingroup protocolbundle_default
+ */
typedef ConcretePacket<IPv6FragmentPacketType> IPv6FragmentPacket;
// =====================================================================================================
Parser implementing the IPv6 routing Header extension (type 0 only).
The fields implemented are:
- \image html IPv6Extensions_Routing.png
+ \image html IPv6RoutingPacket.png
\see IPv6ExtensionType_Routing \n
<a href="http://tools.ietf.org/html/rfc2460">RFC 2460</a>
*/
- struct IPv6PRoutingPacketParser : public PacketParserBase
+ struct IPv6RoutingPacketParser : public PacketParserBase
{
/*
The Type 0 Routing header has the following format: (RFC 2460)
SENF_PARSER_FIELD ( reserved, UInt32Parser ); //set to zero by RFC
SENF_PARSER_VECTOR ( hopAddresses, segmentsLeft, INet6AddressParser );
- SENF_PARSER_FINALIZE ( IPv6PRoutingPacketParser );
+ SENF_PARSER_FINALIZE ( IPv6RoutingPacketParser );
//provisionary, since only type 0 is implemented
SENF_PARSER_INIT() {
\ref IPv6RoutingPacket
\par Fields:
- \ref IPv6PRoutingPacketParser
+ \ref IPv6RoutingPacketParser
\par Associated registries:
\ref IpTypes
/** \brief IPv6 routing extension packet typedef */
typedef ConcretePacket<IPv6RoutingPacketType> packet;
/** \brief typedef to the parser of IPv6 routing extension packet */
- typedef IPv6PRoutingPacketParser parser;
+ typedef IPv6RoutingPacketParser parser;
using mixin::nextPacketRange;
using mixin::nextPacketType;
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 finalize(packet p);
};
- /** \brief IPv6 routing extension packet typedef */
+ /** \brief IPv6 routing extension packet typedef
+ \ingroup protocolbundle_default
+ */
typedef ConcretePacket<IPv6RoutingPacketType> IPv6RoutingPacket;
/** \brief Parse in IPv6 Hop-By-Hop extension header
Parser implementing the IPv6 routing Header extension. The fields implemented are:
- \image html IPv6Extensions_HopByHop.png
+ \image html IPv6HopByHopOptionsPacket.png
\see IPv6ExtensionType_HopByHop \n
<a href="http://tools.ietf.org/html/rfc2460">RFC 2460</a>
*/
- 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<UInt8Parser, 1u> ListOptionTypeAuxPolicy;
typedef detail::ListOptionTypeParser_Policy<
- IPv6GenericOptionTLVParser, ListOptionTypeAuxPolicy> ListOptionTypePolicy;
+ IPv6GenericOptionParser, ListOptionTypeAuxPolicy> ListOptionTypePolicy;
typedef ListParser<ListOptionTypePolicy> ListOptionTypeParser;
SENF_PARSER_FIELD ( options, ListOptionTypeParser);
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 finalize(packet p);
};
- /** \brief IPv6 routing Hop-By-Hop packet typedef */
+ /** \brief IPv6 routing Hop-By-Hop packet typedef
+ \ingroup protocolbundle_default
+ */
typedef ConcretePacket<IPv6HopByHopOptionsPacketType> IPv6HopByHopOptionsPacket;
// =====================================================================================================
Parser implementing the IPv6 Destination Options Header extension.
The fields implemented are:
- \image html IPv6Extensions_Destination.png
+ \image html IPv6DestinationOptionsPacket.png
\see IPv6ExtensionType_Destination \n
<a href="http://tools.ietf.org/html/rfc2460">RFC 2460</a>
p->nextHeader() << key(p.next(nothrow)); }
};
- /** \brief IPv6 routing Destination Options packet typedef */
+ /** \brief IPv6 routing Destination Options packet typedef
+ \ingroup protocolbundle_default
+ */
typedef ConcretePacket<IPv6DestinationOptionsPacketType> IPv6DestinationOptionsPacket;
}