diff --git a/Packets/MPEGDVBBundle/GREPacket.hh b/Packets/MPEGDVBBundle/GREPacket.hh index f056b51e54fc2726011afe05fb7a807eb6dc41ed..bbf21f8f38a59dac9f0340cae1d7fbeb6029b5cd 100644 --- a/Packets/MPEGDVBBundle/GREPacket.hh +++ b/Packets/MPEGDVBBundle/GREPacket.hh @@ -55,7 +55,7 @@ namespace senf { SENF_PARSER_BITFIELD ( checksum_present, 1, bool ); SENF_PARSER_PRIVATE_BITFIELD ( reserved0_, 12, unsigned ); // TODO: SKIP !! - SENF_PARSER_BITFIELD_RO ( version_number, 3, unsigned ); // TODO: Always Zero !! + SENF_PARSER_BITFIELD ( version_number, 3, unsigned ); // TODO: Always Zero !! SENF_PARSER_FIELD ( protocol_type, Parse_UInt16 ); SENF_PARSER_PRIVATE_VARIANT ( checksum_, checksum_present, (VoidPacketParser) (GREChecksumParser) ); @@ -91,8 +91,19 @@ namespace senf { using mixin::initSize; static void dump(packet p, std::ostream & os); - static EtherTypes::key_t nextPacketKey(packet p) { return p->protocol_type(); } - static void finalize(packet p) { p->protocol_type() << key(p.next()); } + static EtherTypes::key_t nextPacketKey(packet p) { + return p->protocol_type(); + } + static void finalize(packet p) { + p->protocol_type() << key(p.next()); + p->version_number() = 0; // as per RFC2784, 2.3.1 + + if (p->checksum_present()) { + // compute checksum + } else { + // ??? + } + } }; /** \brief GRE packet typedef */