*/
struct Parse_Ethernet : public PacketParserBase
{
- typedef Parse_UInt16 Parse_Type;
+# include SENF_FIXED_PARSER()
-# ifndef DOXYGEN
+ SENF_PARSER_FIELD( destination, Parse_MAC );
+ SENF_PARSER_FIELD( source, Parse_MAC );
+ SENF_PARSER_FIELD( type, Parse_UInt16 );
- SENF_PACKET_PARSER_INIT(Parse_Ethernet);
-
- SENF_PACKET_PARSER_DEFINE_FIXED_FIELDS(
- ((Field)( destination, Parse_MAC ))
- ((Field)( source, Parse_MAC ))
- ((Field)( type, Parse_Type )) );
-
-# else
-
- Parse_MAC destination();
- Parse_MAC source();
- Parse_Type type();
-
-# endif
+ SENF_PARSER_FINALIZE(Parse_Ethernet);
};
/** \brief EtherType registry
\par Associated registries:
\ref EtherTypes
+ \par Finalize action:
+ Set \a type from type of next packet if found in \ref EtherTypes
+
\ingroup protocolbundle_default
*/
struct EthernetPacketType
{ return p->type(); }
static void dump(packet p, std::ostream & os);
+ static void finalize(packet p);
};
/** \brief Ethernet packet typedef */
*/
struct Parse_EthVLan : public PacketParserBase
{
- typedef Parse_UIntField < 0, 3 > Parse_Priority;
- typedef Parse_Flag < 3 > Parse_CFI;
- typedef Parse_UIntField < 4, 16 > Parse_VLanId;
- typedef Parse_UInt16 Parse_Type;
+# include SENF_FIXED_PARSER()
-# ifndef DOXYGEN
+ SENF_PARSER_BITFIELD( priority, 3, unsigned );
+ SENF_PARSER_BITFIELD( cfi, 1, bool );
+ SENF_PARSER_BITFIELD( vlanId, 12, unsigned );
- SENF_PACKET_PARSER_INIT(Parse_EthVLan);
+ SENF_PARSER_FIELD( type, Parse_UInt16 );
- SENF_PACKET_PARSER_DEFINE_FIXED_FIELDS(
- ((OverlayField)( priority, Parse_Priority ))
- ((OverlayField)( cfi, Parse_CFI ))
- ((Field )( vlanId, Parse_VLanId ))
- ((Field )( type, Parse_Type )) );
-
-# else
-
- Parse_Priority priority();
- Parse_CFI cfi();
- Parse_VLanId vlanId();
- Parse_Type type();
-
-# endif
+ SENF_PARSER_FINALIZE(Parse_EthVLan);
};
/** \brief Ethernet VLAN tag
\par Associated registries:
\ref EtherTypes
+ \par Finalize action:
+ Set \a type from type of next packet if found in \ref EtherTypes
+
\ingroup protocolbundle_default
*/
struct EthVLanPacketType
{ return p->type(); }
static void dump(packet p, std::ostream & os);
+ static void finalize(packet p);
};
/** \brief Ethernet VLAN tag typedef */