Fix documentation build under maverick (doxygen 1.7.1)
[senf.git] / senf / Packets / DefaultBundle / ICMPv6TypePacket.hh
index 067f34e..f850c4f 100644 (file)
 #include <senf/Packets/Packets.hh>
 #include "IPv6Packet.hh"
 #include "ICMPv6Packet.hh"
+#include "ListOptionTypeParser.hh"
+#include "NDPOptions.hh"
 
+//-/////////////////////////////////////////////////////////////////////////////////////////////////
 namespace senf {
 
     //#############################################################
@@ -40,10 +43,10 @@ namespace senf {
 #       include SENF_FIXED_PARSER()
         SENF_PARSER_FIELD ( identifier, UInt16Parser );
         SENF_PARSER_FIELD ( seqNr,      UInt16Parser );
-        
+
         SENF_PARSER_FINALIZE ( ICMPv6EchoRequestParser );
     };
-    
+
     /** \brief ICMPv6 Echo Request
 
         \par Packet type (typedef):
@@ -62,16 +65,16 @@ namespace senf {
         typedef PacketTypeMixin<ICMPv6EchoRequestType> mixin;
         typedef ConcretePacket<ICMPv6EchoRequestType> packet;
         typedef ICMPv6EchoRequestParser parser;
-        
+
         using mixin::nextPacketRange;
         using mixin::init;
         using mixin::initSize;
 
         static void dump(packet p, std::ostream & os);
     };
-    
+
     typedef ConcretePacket<ICMPv6EchoRequestType> ICMPv6EchoRequest;
-    
+
     //#############################################################
     //ICMPv6 Echo Reply
     //#############################################################
@@ -80,10 +83,10 @@ namespace senf {
 #       include SENF_FIXED_PARSER()
         SENF_PARSER_FIELD ( identifier, UInt16Parser );
         SENF_PARSER_FIELD ( seqNr,      UInt16Parser );
-        
+
         SENF_PARSER_FINALIZE ( ICMPv6EchoReplyParser );
     };
-    
+
     /** \brief ICMPv6 Echo Reply
 
         \par Packet type (typedef):
@@ -102,26 +105,28 @@ namespace senf {
         typedef PacketTypeMixin<ICMPv6EchoReplyType> mixin;
         typedef ConcretePacket<ICMPv6EchoReplyType> packet;
         typedef ICMPv6EchoReplyParser parser;
-        
+
         using mixin::nextPacketRange;
         using mixin::init;
         using mixin::initSize;
+
+        static void dump(packet p, std::ostream & os);
     };
-        
+
     typedef ConcretePacket<ICMPv6EchoReplyType> ICMPv6EchoReply;
-    
+
     //#############################################################
     //ICMPv6 Error Destination Unreachable Message
     //#############################################################
     struct ICMPv6ErrDestUnreachableParser : public PacketParserBase
     {
 #       include SENF_FIXED_PARSER()
-        
+
         //should be set static 0 by sender and ignored by receiver
         SENF_PARSER_PRIVATE_FIELD ( unused, UInt32Parser );
-        
-        SENF_PARSER_INIT() { 
-            unused() = 0; 
+
+        SENF_PARSER_INIT() {
+            unused() = 0;
         }
         /*   Code     0 - No route to destination
                     1 - Communication with destination
@@ -135,10 +140,10 @@ namespace senf {
             ICMPv6Packet icmpv6 (senf::Packet().rfind<ICMPv6Packet>(senf::nothrow));
             icmpv6->code() = code;
         }
-        
+
         SENF_PARSER_FINALIZE ( ICMPv6ErrDestUnreachableParser );
     };
-    
+
     /** \brief ICMPv6 Destination unreachable
 
         \par Packet type (typedef):
@@ -147,7 +152,7 @@ namespace senf {
         \par Fields:
             \ref ICMPv6ErrDestUnreachableParser
             \image html ICMPv6ErrDestUnreachable.png
+
         \ingroup protocolbundle_default
     */
     struct ICMPv6ErrDestUnreachableType
@@ -157,14 +162,16 @@ namespace senf {
         typedef PacketTypeMixin<ICMPv6ErrDestUnreachableType> mixin;
         typedef ConcretePacket<ICMPv6ErrDestUnreachableType> packet;
         typedef ICMPv6ErrDestUnreachableParser parser;
-        
+
         using mixin::nextPacketRange;
         using mixin::init;
         using mixin::initSize;
+
+        static void dump(packet p, std::ostream & os);
     };
-        
+
     typedef ConcretePacket<ICMPv6ErrDestUnreachableType> ICMPv6ErrDestUnreachable;
-    
+
     //#############################################################
     //ICMPv6 Error Packet Too Big Message
     //#############################################################
@@ -172,16 +179,16 @@ namespace senf {
     {
 #       include SENF_FIXED_PARSER()
         SENF_PARSER_FIELD ( mtu, UInt32Parser );
-    
+
         /*   Code     static set to 0       */
-    //     SENF_PARSER_INIT() {
-    //         ICMPv6Packet icmpv6 (packet().rfind<ICMPv6Packet>(senf::nothrow));
-    //         icmpv6->code() = 0;
-    //     }
-        
+        SENF_PARSER_INIT() {
+            ICMPv6Packet icmpv6 (packet().rfind<ICMPv6Packet>(senf::nothrow));
+            icmpv6->code() = 0;
+        }
+
         SENF_PARSER_FINALIZE ( ICMPv6ErrTooBigParser );
     };
-    
+
     /** \brief ICMPv6 Packet to big
 
         \par Packet type (typedef):
@@ -200,14 +207,16 @@ namespace senf {
         typedef PacketTypeMixin<ICMPv6ErrTooBigType> mixin;
         typedef ConcretePacket<ICMPv6ErrTooBigType> packet;
         typedef ICMPv6ErrTooBigParser parser;
-        
+
         using mixin::nextPacketRange;
         using mixin::init;
         using mixin::initSize;
+
+        static void dump(packet p, std::ostream & os);
     };
 
     typedef ConcretePacket<ICMPv6ErrTooBigType> ICMPv6ErrTooBig;
-    
+
     //#############################################################
     //ICMPv6 Error Time Exceeded Message
     //#############################################################
@@ -218,14 +227,15 @@ namespace senf {
         SENF_PARSER_FIELD    ( unused, UInt32Parser );
         /*  Code    0 - Hop limit exceeded in transit
                     1 - Fragment reassembly time exceeded   */
-        void setErrCode(int code){
+        void setErrCode(int code)
+        {
             ICMPv6Packet icmpv6 (packet().rfind<ICMPv6Packet>(senf::nothrow));
             icmpv6->code() = code;
         }
-        
+
         SENF_PARSER_FINALIZE ( ICMPv6ErrTimeExceededParser );
     };
-    
+
     /** \brief ICMPv6 Time exceeded
 
         \par Packet type (typedef):
@@ -244,13 +254,15 @@ namespace senf {
         typedef PacketTypeMixin<ICMPv6ErrTimeExceededType> mixin;
         typedef ConcretePacket<ICMPv6ErrTimeExceededType> packet;
         typedef ICMPv6ErrTimeExceededParser parser;
-        
+
         using mixin::nextPacketRange;
         using mixin::init;
         using mixin::initSize;
+
+        static void dump(packet p, std::ostream & os);
     };
     typedef ConcretePacket<ICMPv6ErrTimeExceededType> ICMPv6ErrTimeExceeded;
-    
+
     //#############################################################
     //ICMPv6 Error Parameter Problem Message
     //#############################################################
@@ -262,14 +274,15 @@ namespace senf {
         /*  Code      0 - Erroneous header field encountered
                     1 - Unrecognized Next Header type encountered
                     2 - Unrecognized IPv6 option encountered          */
-        
-        void setErrCode(int code){
+
+        void setErrCode(int code)
+        {
             ICMPv6Packet icmpv6 (packet().rfind<ICMPv6Packet>(senf::nothrow));
             icmpv6->code() = code;
         }
         SENF_PARSER_FINALIZE ( ICMPv6ErrParamProblemParser );
     };
-    
+
     /** \brief ICMPv6 Parameter problem
 
         \par Packet type (typedef):
@@ -288,13 +301,15 @@ namespace senf {
         typedef PacketTypeMixin<ICMPv6ErrParamProblemType> mixin;
         typedef ConcretePacket<ICMPv6ErrParamProblemType> packet;
         typedef ICMPv6ErrParamProblemParser parser;
-        
+
         using mixin::nextPacketRange;
         using mixin::init;
         using mixin::initSize;
+
+        static void dump(packet p, std::ostream & os);
     };
     typedef ConcretePacket<ICMPv6ErrParamProblemType> ICMPv6ErrParamProblem;
-    
+
     //#############################################################
     //ICMPv6 MLDv2 (RFC 3810) Multicast Listener Query
     //#############################################################
@@ -304,13 +319,13 @@ namespace senf {
         //need a variant here
         // a.) maxResponseCode < 32768 =>Interger
         // b.) maxResponseCode >=32768 => float (is there a float parser???)
-        /* 
-        float value as followed: 
+        /*
+        float value as followed:
         0 1 2 3 4 5 6 7 8 9 A B C D E F
         +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
         |1| exp |          mant         |
         +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ */
-        
+
         SENF_PARSER_FIELD ( maxResponseCode, UInt16Parser       );
         SENF_PARSER_FIELD ( reserved,        UInt16Parser       ); // set to zero by default
         SENF_PARSER_FIELD ( mcAddress,       INet6AddressParser );
@@ -320,15 +335,15 @@ namespace senf {
         SENF_PARSER_FIELD    ( qqic, UInt8Parser );
         SENF_PARSER_PRIVATE_FIELD ( nrSources, UInt16Parser );
         SENF_PARSER_VECTOR   (srcAddresses, nrSources, INet6AddressParser );
-        
+
         SENF_PARSER_FINALIZE ( MLDv2ListenerQueryParser );
-        
-        SENF_PARSER_INIT() { 
-            reserved() = 0; 
+
+        SENF_PARSER_INIT() {
+            reserved() = 0;
             resv() = 0;
         }
     };
-    
+
     /** \brief MLDv2 Listener query
 
         \par Packet type (typedef):
@@ -347,14 +362,16 @@ namespace senf {
         typedef PacketTypeMixin<MLDv2ListenerQueryType> mixin;
         typedef ConcretePacket<MLDv2ListenerQueryType> packet;
         typedef MLDv2ListenerQueryParser parser;
-        
+
         using mixin::nextPacketRange;
         using mixin::init;
         using mixin::initSize;
+
+        static void dump(packet p, std::ostream & os);
     };
-        
+
     typedef ConcretePacket<MLDv2ListenerQueryType> MLDv2ListenerQuery;
-    
+
     //#############################################################
     //ICMPv6 MLDv2 (RFC 3810) Multicast Listener Report Message
     //#############################################################
@@ -362,32 +379,32 @@ namespace senf {
     struct MLDv2AddressRecordParser : public PacketParserBase
     {
 #       include SENF_PARSER()
-        
+
         SENF_PARSER_FIELD   ( recordType, UInt8Parser );
         SENF_PARSER_PRIVATE_FIELD   ( auxDataLen, UInt8Parser );
         SENF_PARSER_PRIVATE_FIELD   ( nrOfSrcs, UInt16Parser );
         SENF_PARSER_FIELD   ( mcAddress, INet6AddressParser);
         SENF_PARSER_VECTOR  ( srcAddresses, nrOfSrcs, INet6AddressParser );
         SENF_PARSER_VECTOR  ( auxData, auxDataLen, UInt32Parser );
-        
+
         SENF_PARSER_FINALIZE ( MLDv2AddressRecordParser );
     };
-    
+
     struct MLDv2ListenerReportParser : public PacketParserBase
     {
 #       include SENF_PARSER()
-        
+
         SENF_PARSER_FIELD   ( reserved, UInt16Parser );   //set to zero by default
         SENF_PARSER_PRIVATE_FIELD   ( nrMcastAddrRecords_, UInt16Parser );
         SENF_PARSER_LIST    ( mcastAddrRecords, nrMcastAddrRecords_, MLDv2AddressRecordParser );
-        
+
         SENF_PARSER_FINALIZE ( MLDv2ListenerReportParser );
-        
-        SENF_PARSER_INIT() { 
-            reserved() = 0; 
+
+        SENF_PARSER_INIT() {
+            reserved() = 0;
         }
     };
-    
+
     /** \brief MLDv2 Listener report
 
         \par Packet type (typedef):
@@ -407,15 +424,244 @@ namespace senf {
         typedef PacketTypeMixin<MLDv2ListenerReportType> mixin;
         typedef ConcretePacket<MLDv2ListenerReportType> packet;
         typedef MLDv2ListenerReportParser parser;
-        
+
         using mixin::nextPacketRange;
         using mixin::init;
         using mixin::initSize;
+
+        static void dump(packet p, std::ostream & os);
     };
-        
     typedef ConcretePacket<MLDv2ListenerReportType> MLDv2ListenerReport;
+
+    //#############################################################
+    //ICMPv6 Router Solicitation (RFC 4861) Message
+    //#############################################################
+    struct NDPRouterSolicitationParser : public PacketParserBase
+    {
+#      include SENF_PARSER()
+        SENF_PARSER_BITFIELD ( reserved, 32, unsigned );// set to zero by default
+        SENF_PARSER_LIST     ( options, packetSize(), senf::NDPGenericOptionParser );
+        SENF_PARSER_FINALIZE ( NDPRouterSolicitationParser );
+
+        SENF_PARSER_INIT() {
+            reserved() = 0;
+        }
+    };
+
+    /** \brief Router Solicitation Message
+
+        \par Packet type (typedef):
+            \ref NDPRouterSolicitationMessage
+
+        \par Fields:
+            \ref NDPRouterSolicitationParser
+            \image html NDPRouterSolicitationMessage.png
+
+        \ingroup protocolbundle_default
+     */
+    struct NDPRouterSolicitationMessageType
+        : public PacketTypeBase,
+          public PacketTypeMixin<NDPRouterSolicitationMessageType>
+    {
+        typedef PacketTypeMixin<NDPRouterSolicitationMessageType> mixin;
+        typedef ConcretePacket<NDPRouterSolicitationMessageType> packet;
+        typedef NDPRouterSolicitationParser parser;
+
+        using mixin::nextPacketRange;
+        using mixin::init;
+        using mixin::initSize;
+
+        static void dump(packet p, std::ostream & os);
+    };
+    typedef ConcretePacket<NDPRouterSolicitationMessageType> NDPRouterSolicitationMessage;
+
+    //#############################################################
+    //ICMPv6 Router Advertisement (RFC 4861) Message
+    //#############################################################
+    struct NDPRouterAdvertisementParser : public PacketParserBase
+    {
+#      include SENF_PARSER()
+        SENF_PARSER_FIELD        ( curHopLimit, UInt8Parser );
+        SENF_PARSER_BITFIELD     ( m, 1, bool);
+        SENF_PARSER_BITFIELD     ( o, 1, bool);
+        SENF_PARSER_BITFIELD     ( reserved, 6, unsigned ); // set to zero by default
+        SENF_PARSER_FIELD        ( routerLifetime, UInt16Parser );
+        SENF_PARSER_FIELD        ( reachableTime, UInt32Parser );
+        SENF_PARSER_FIELD        ( retransTimer, UInt32Parser );
+        SENF_PARSER_LIST         ( options, packetSize(), senf::NDPGenericOptionParser );
+        SENF_PARSER_FINALIZE     ( NDPRouterAdvertisementParser );
+
+        SENF_PARSER_INIT() {
+            reserved() = 0;
+        }
+    };
+
+    /** \brief Router Advertisement Message
+
+        \par Packet type (typedef):
+            \ref NDPRouterAdvertisementMessage
+
+        \par Fields:
+            \ref NDPRouterAdvertisementParser
+            \imageMessage html NDPRouterAdvertisementMessage.png
+
+        \ingroup protocolbundle_default
+     */
+    struct NDPRouterAdvertisementMessageType
+        : public PacketTypeBase,
+          public PacketTypeMixin<NDPRouterAdvertisementMessageType>
+    {
+        typedef PacketTypeMixin<NDPRouterAdvertisementMessageType> mixin;
+        typedef ConcretePacket<NDPRouterAdvertisementMessageType> packet;
+        typedef NDPRouterAdvertisementParser parser;
+
+        using mixin::nextPacketRange;
+        using mixin::init;
+        using mixin::initSize;
+
+        static void dump(packet p, std::ostream & os);
+    };
+    typedef ConcretePacket<NDPRouterAdvertisementMessageType> NDPRouterAdvertisementMessage;
+
+    //#############################################################
+    //ICMPv6 Neighbor Solicitation (RFC 4861) Message
+    //#############################################################
+    struct NDPNeighborSolicitationParser : public PacketParserBase
+    {
+#      include SENF_PARSER()
+        SENF_PARSER_BITFIELD  ( reserved, 32, unsigned ); // set to zero by default
+        SENF_PARSER_FIELD     ( target, INet6AddressParser );
+        SENF_PARSER_LIST      ( options, packetSize(), senf::NDPGenericOptionParser );
+        SENF_PARSER_FINALIZE  ( NDPNeighborSolicitationParser );
+
+        SENF_PARSER_INIT() {
+            reserved() = 0;
+        }
+    };
+
+    /** \brief Neighbor Solicitation Message
+
+        \par Packet type (typedef):
+            \ref NDPNeighborSolicitationMessage
+
+        \par Fields:
+            \ref NDPNeighborSolicitationParser
+            \imageMessage html NDPNeighborSolicitationMessage.png
+
+        \ingroup protocolbundle_default
+     */
+    struct NDPNeighborSolicitationMessageType
+        : public PacketTypeBase,
+          public PacketTypeMixin<NDPNeighborSolicitationMessageType>
+    {
+        typedef PacketTypeMixin<NDPNeighborSolicitationMessageType> mixin;
+        typedef ConcretePacket<NDPNeighborSolicitationMessageType> packet;
+        typedef NDPNeighborSolicitationParser parser;
+
+        using mixin::nextPacketRange;
+        using mixin::init;
+        using mixin::initSize;
+
+        static void dump(packet p, std::ostream & os);
+    };
+    typedef ConcretePacket<NDPNeighborSolicitationMessageType> NDPNeighborSolicitationMessage;
+
+    //#############################################################
+    //ICMPv6 Neighbor Advertisement (RFC 4861) Message
+    //#############################################################
+    struct NDPNeighborAdvertisementParser : public PacketParserBase
+    {
+#      include SENF_PARSER()
+        SENF_PARSER_BITFIELD  ( r, 1, bool );
+        SENF_PARSER_BITFIELD  ( s, 1, bool );
+        SENF_PARSER_BITFIELD  ( o, 1, bool );
+        SENF_PARSER_BITFIELD  ( reserved, 29, unsigned ); // set to zero by default
+        SENF_PARSER_FIELD     ( target, INet6AddressParser );
+        SENF_PARSER_LIST      ( options, packetSize(), senf::NDPGenericOptionParser );
+        SENF_PARSER_FINALIZE  ( NDPNeighborAdvertisementParser );
+
+        SENF_PARSER_INIT() {
+            reserved() = 0;
+        }
+    };
+
+    /** \brief Neighbor Advertisement Message
+
+        \par Packet type (typedef):
+            \ref NDPNeighborAdvertisementParser
+
+        \par Fields:
+            \ref NDPNeighborAdvertisementParser
+            \imageMessage html NDPNeighborAdvertisementMessage.png
+
+        \ingroup protocolbundle_default
+     */
+    struct NDPNeighborAdvertisementMessageType
+        : public PacketTypeBase,
+          public PacketTypeMixin<NDPNeighborAdvertisementMessageType>
+    {
+        typedef PacketTypeMixin<NDPNeighborAdvertisementMessageType> mixin;
+        typedef ConcretePacket<NDPNeighborAdvertisementMessageType> packet;
+        typedef NDPNeighborAdvertisementParser parser;
+
+        using mixin::nextPacketRange;
+        using mixin::init;
+        using mixin::initSize;
+
+        static void dump(packet p, std::ostream & os);
+    };
+    typedef ConcretePacket<NDPNeighborAdvertisementMessageType> NDPNeighborAdvertisementMessage;
+
+    //#############################################################
+    //ICMPv6 Redirect (RFC 4861) Message
+    //#############################################################
+    struct  NDPRedirectParser : public PacketParserBase
+    {
+#      include SENF_PARSER()
+        SENF_PARSER_BITFIELD  ( reserved, 32, unsigned ); // set to zero by default
+        SENF_PARSER_FIELD     ( target, INet6AddressParser );
+        SENF_PARSER_FIELD     ( destination, INet6AddressParser );
+        SENF_PARSER_LIST      ( options, packetSize(), senf::NDPGenericOptionParser );
+        SENF_PARSER_FINALIZE  ( NDPRedirectParser );
+
+        SENF_PARSER_INIT() {
+            reserved() = 0;
+
+        }
+    };
+
+    /** \brief Redirect Message
+
+        \par Packet type (typedef):
+            \ref NDPRedirectParser
+
+        \par Fields:
+            \ref NDPRedirectParser
+            \imageMessage html NDPRedirectMessage.png
+
+        \ingroup protocolbundle_default
+     */
+    struct NDPRedirectMessageType
+        : public PacketTypeBase,
+          public PacketTypeMixin<NDPRedirectMessageType>
+    {
+        typedef PacketTypeMixin<NDPRedirectMessageType> mixin;
+        typedef ConcretePacket<NDPRedirectMessageType> packet;
+        typedef NDPRedirectParser parser;
+
+        using mixin::nextPacketRange;
+        using mixin::init;
+        using mixin::initSize;
+
+        static void dump(packet p, std::ostream & os);
+    };
+    typedef ConcretePacket<NDPRedirectMessageType> NDPRedirectMessage;
 }
 
+//-/////////////////////////////////////////////////////////////////////////////////////////////////
+//#include "ICMPv6TypePacket.cci"
+//#include "ICMPv6TypePacket.ct"
+//#include "ICMPv6TypePacket.cti"
 #endif
 
 \f