Packets/DefaultBundle: IPv6ExtensionsHeaders: set nextHeader to 59 if their is no...
[senf.git] / senf / Packets / DefaultBundle / IPv6Extensions.hh
index 6ad1af8..3124b27 100644 (file)
@@ -28,9 +28,7 @@
 #define HH_SENF_Packets_DefaultBundle_IPv6Extensions_ 1
 
 // Custom includes
-#include <senf/Packets/Packets.hh>
-#include <senf/Packets/AuxParser.hh>
-#include "IPv6ExtOptionType.hh"
+#include "IPv6ExtOptions.hh"
 #include "ListOptionTypeParser.hh"
 #include "IPv6Packet.hh"
 
@@ -100,11 +98,12 @@ namespace senf {
         /** \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;
 
 // =====================================================================================================
@@ -173,7 +172,7 @@ namespace senf {
             \ref IPv6RoutingPacket
 
         \par Fields:
-            \ref IPv6PRoutingPacketParser
+            \ref IPv6RoutingPacketParser
         
         \par Associated registries:
             \ref IpTypes
@@ -202,14 +201,16 @@ namespace senf {
         
         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;
 
     
@@ -227,12 +228,12 @@ namespace senf {
     {
 #       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);
@@ -273,17 +274,18 @@ namespace senf {
         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;
     
 // =====================================================================================================
@@ -348,7 +350,9 @@ namespace senf {
             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;
     
 }