-added example selfnet generic option Type for checksum with imaginary type codes...
[senf.git] / senf / Packets / DefaultBundle / IPv6ExtOptionType.hh
index f1e8cc5..29d2f59 100644 (file)
@@ -33,7 +33,7 @@
 ///////////////////////////////hh.p////////////////////////////////////////
 namespace senf {
 
-    class OptTypeTLVPacketParser : public PacketParserBase 
+        class IPv6OptionTLVParser : public PacketParserBase
     {
     public:
 #       include SENF_PARSER()
@@ -41,20 +41,21 @@ namespace senf {
         SENF_PARSER_BITFIELD (changeFlag, 1, unsigned);
         SENF_PARSER_BITFIELD (optionType, 5, unsigned);
         SENF_PARSER_FIELD (optionLength, UInt8Parser);
-        SENF_PARSER_FINALIZE (OptTypeTLVPacketParser);
+        SENF_PARSER_FINALIZE (IPv6OptionTLVParser);
     };
 
-    struct GenericOptTypeTLVPacketParser : public OptTypeTLVPacketParser 
+    
+    struct IPv6GenericOptionTLVParser : public IPv6OptionTLVParser
     {
 #       include SENF_PARSER()
-        SENF_PARSER_INHERIT ( OptTypeTLVPacketParser );
+        SENF_PARSER_INHERIT ( IPv6OptionTLVParser );
         SENF_PARSER_SKIP ( optionLength(), 0 );
-        SENF_PARSER_FINALIZE ( GenericOptTypeTLVPacketParser );
+        SENF_PARSER_FINALIZE ( IPv6GenericOptionTLVParser );
 
         senf::PacketInterpreterBase::range value() const;
 
         template <class Parser>
-        Parser& init();
+        Parser init();
 
     //     template <class Parser>
     //     Parser& get();
@@ -66,9 +67,24 @@ namespace senf {
 
         template<class ForwardReadableRange>
         void setPayload(ForwardReadableRange const &range);
-
     };
 
+    struct IPv6ChecksumOptionTLVParser : public IPv6OptionTLVParser
+    {
+#       include SENF_PARSER()
+        SENF_PARSER_INHERIT ( IPv6OptionTLVParser );
+        SENF_PARSER_FIELD ( SlfNetType, UInt8Parser);
+        SENF_PARSER_FIELD ( checksum, UInt16Parser );
+        
+        SENF_PARSER_INIT() {
+            optionType() = typeCode;
+            optionLength() = senf::init_bytes<IPv6ChecksumOptionTLVParser>::value -senf::init_bytes<IPv6OptionTLVParser>::value;
+            SlfNetType() = SN_typeCode;     
+        }
+        SENF_PARSER_FINALIZE ( IPv6ChecksumOptionTLVParser );
+        static const unsigned int typeCode = 13u;
+        static const unsigned int SN_typeCode = 77u;
+    };
 }