X-Git-Url: http://g0dil.de/git?a=blobdiff_plain;f=Packets%2FDefaultBundle%2FEthernetPacket.hh;h=3dcddc6f4fef53ea4743c80dbe54b5e7162342d5;hb=6a3a31fb7b2d2a5e8ae6d67d50797700274fb34e;hp=f7d8e6d20619c1a7caa1727160fff69d479545e5;hpb=c7512677a51c8ba551ab23611d6e99bdc7a7fdfa;p=senf.git diff --git a/Packets/DefaultBundle/EthernetPacket.hh b/Packets/DefaultBundle/EthernetPacket.hh index f7d8e6d..3dcddc6 100644 --- a/Packets/DefaultBundle/EthernetPacket.hh +++ b/Packets/DefaultBundle/EthernetPacket.hh @@ -72,7 +72,7 @@ namespace senf { SENF_PARSER_FIELD( destination, Parse_MAC ); SENF_PARSER_FIELD( source, Parse_MAC ); - SENF_PARSER_FIELD( type, Parse_UInt16 ); + SENF_PARSER_FIELD( type_length, Parse_UInt16 ); SENF_PARSER_FINALIZE(Parse_Ethernet); }; @@ -109,26 +109,23 @@ namespace senf { : public PacketTypeBase, public PacketTypeMixin { +#ifndef DOXYGEN typedef PacketTypeMixin mixin; typedef ConcretePacket packet; typedef Parse_Ethernet parser; - +#endif using mixin::nextPacketRange; - using mixin::nextPacketType; + // using mixin::nextPacketType; using mixin::initSize; using mixin::init; - /** \todo Add LLC/SNAP support -> only use the registry - for type() values >=1536, otherwise expect an LLC header */ - static registry_key_t nextPacketKey(packet p) - { return p->type(); } - + static factory_t nextPacketType(packet p); static void dump(packet p, std::ostream & os); static void finalize(packet p); }; /** \brief Ethernet packet typedef */ - typedef EthernetPacketType::packet EthernetPacket; + typedef ConcretePacket EthernetPacket; /** \brief Parse an ethernet VLAN tag @@ -169,10 +166,11 @@ namespace senf { : public PacketTypeBase, public PacketTypeMixin { +#ifndef DOXYGEN typedef PacketTypeMixin mixin; typedef ConcretePacket packet; typedef Parse_EthVLan parser; - +#endif using mixin::nextPacketRange; using mixin::nextPacketType; using mixin::initSize; @@ -188,7 +186,70 @@ namespace senf { }; /** \brief Ethernet VLAN tag typedef */ - typedef EthVLanPacketType::packet EthVLanPacket; + typedef ConcretePacket EthVLanPacket; + + + /** \brief Parse an ethernet LLC/SNAP header + + \todo document me + + \see EthVLanPacketType + */ + struct Parse_EthLlcSnapPacket : public PacketParserBase + { +# include SENF_FIXED_PARSER() + + SENF_PARSER_FIELD( dsap, Parse_UInt8 ); + SENF_PARSER_FIELD( ssap, Parse_UInt8 ); + SENF_PARSER_FIELD( ctrl, Parse_UInt8 ); + + SENF_PARSER_FIELD( protocolId, Parse_UInt24 ); + SENF_PARSER_FIELD( type, Parse_UInt24 ); + + SENF_PARSER_FINALIZE(Parse_EthLlcSnapPacket); + }; + + /** \brief Ethernet LLC/SNAP header + + \todo document me + + \par Packet type (typedef): + \ref EthLlcSnapPacketType + + \par Fields: + \ref Parse_EthLlcSnapPacket + + \par Associated registries: + \ref EtherTypes + + \par Finalize action: + XXXX + + \ingroup protocolbundle_default + */ + struct EthLlcSnapPacketType + : public PacketTypeBase, + public PacketTypeMixin + { +#ifndef DOXYGEN + typedef PacketTypeMixin mixin; + typedef ConcretePacket packet; + typedef Parse_EthLlcSnapPacket parser; +#endif + using mixin::nextPacketRange; + using mixin::nextPacketType; + using mixin::initSize; + using mixin::init; + + static registry_key_t nextPacketKey(packet p) + { return p->type(); } + + static void dump(packet p, std::ostream & os); + static void finalize(packet p); + }; + + /** \brief Ethernet VLAN tag typedef */ + typedef ConcretePacket EthLlcSnapPacket; }