X-Git-Url: http://g0dil.de/git?a=blobdiff_plain;f=Packets%2F80211Bundle%2FRadiotapPacket.hh;h=48d020bb19735f8bf3514d27bdc4270ed0cffc9d;hb=088daffdd823ed156b56a99090717b114e1de147;hp=465e14ac99ca923b02b582143a1456366aa21a4b;hpb=08bba1cbe020e940671a58c0db5afce75ef84619;p=senf.git diff --git a/Packets/80211Bundle/RadiotapPacket.hh b/Packets/80211Bundle/RadiotapPacket.hh index 465e14a..48d020b 100644 --- a/Packets/80211Bundle/RadiotapPacket.hh +++ b/Packets/80211Bundle/RadiotapPacket.hh @@ -1,9 +1,9 @@ -// $Id:$ +// $Id$ // -// Copyright (C) 2006 +// Copyright (C) 2008 // Fraunhofer Institute for Open Communication Systems (FOKUS) // Competence Center NETwork research (NET), St. Augustin, GERMANY -// Christian Niephaus +// Christian Niephaus // // This program is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by @@ -23,12 +23,10 @@ /** \file \brief Radiotap header \n Radiotap uses least significant bit byte order - - */ -#ifndef HH_RadiotapPacket_ -#define HH_RadioPacket_ 1 +#ifndef HH_SENF_Packets_80211Bundle_RadiotapPacket_ +#define HH_SENF_Packets_80211Bundle_RadiotapPacket_ 1 #include "../../Packets/Packets.hh" @@ -43,17 +41,16 @@ namespace senf { # include SENF_FIXED_PARSER() - SENF_PARSER_BITFIELD ( shortGI, 1, bool); - SENF_PARSER_BITFIELD ( badFCS, 1, bool); - SENF_PARSER_BITFIELD ( padding, 1, bool); - SENF_PARSER_BITFIELD ( fcsPresent, 1, bool); - SENF_PARSER_BITFIELD ( fragmentation, 1, bool); - SENF_PARSER_BITFIELD ( wep, 1, bool); - SENF_PARSER_BITFIELD ( shortPreamble, 1, bool); - SENF_PARSER_BITFIELD ( cfp, 1, bool); + SENF_PARSER_BITFIELD ( shortGI, 1, bool ); + SENF_PARSER_BITFIELD ( badFCS, 1, bool ); + SENF_PARSER_BITFIELD ( padding, 1, bool ); + SENF_PARSER_BITFIELD ( fcsPresent, 1, bool ); + SENF_PARSER_BITFIELD ( fragmentation, 1, bool ); + SENF_PARSER_BITFIELD ( wep, 1, bool ); + SENF_PARSER_BITFIELD ( shortPreamble, 1, bool ); + SENF_PARSER_BITFIELD ( cfp, 1, bool ); SENF_PARSER_FINALIZE ( RadiotapPacketParser_Flags ); - }; /** \brief Parse in Radiotap Header channel frequency and flag field @@ -64,21 +61,21 @@ namespace senf { # include SENF_FIXED_PARSER() - SENF_PARSER_FIELD ( freq, UInt16LSBParser ); - - SENF_PARSER_BITFIELD ( flag2ghz, 1, bool ); - SENF_PARSER_BITFIELD ( ofdm, 1, bool ); - SENF_PARSER_BITFIELD ( cck, 1, bool ); - SENF_PARSER_BITFIELD ( turbo, 1, bool ); - SENF_PARSER_SKIP_BITS ( 4 ); //currently unused in radiotap - SENF_PARSER_BITFIELD ( quarterRateChannel, 1, bool ); - SENF_PARSER_BITFIELD ( halfRateChannel, 1, bool ); - SENF_PARSER_BITFIELD ( gsm, 1, bool ); - SENF_PARSER_BITFIELD ( staticTurbo, 1, bool ); - SENF_PARSER_BITFIELD ( gfsk, 1, bool ); - SENF_PARSER_BITFIELD ( cckOfdm, 1, bool ); - SENF_PARSER_BITFIELD ( passive, 1, bool ); - SENF_PARSER_BITFIELD ( flag5ghz, 1, bool ); + SENF_PARSER_FIELD ( freq, UInt16LSBParser ); + + SENF_PARSER_BITFIELD ( flag2ghz, 1, bool ); + SENF_PARSER_BITFIELD ( ofdm, 1, bool ); + SENF_PARSER_BITFIELD ( cck, 1, bool ); + SENF_PARSER_BITFIELD ( turbo, 1, bool ); + SENF_PARSER_SKIP_BITS ( 4 ); //currently unused in radiotap + SENF_PARSER_BITFIELD ( quarterRateChannel, 1, bool ); + SENF_PARSER_BITFIELD ( halfRateChannel, 1, bool ); + SENF_PARSER_BITFIELD ( gsm, 1, bool ); + SENF_PARSER_BITFIELD ( staticTurbo, 1, bool ); + SENF_PARSER_BITFIELD ( gfsk, 1, bool ); + SENF_PARSER_BITFIELD ( cckOfdm, 1, bool ); + SENF_PARSER_BITFIELD ( passive, 1, bool ); + SENF_PARSER_BITFIELD ( flag5ghz, 1, bool ); SENF_PARSER_FINALIZE ( RadiotapPacketParser_ChannelOptions ); }; @@ -98,90 +95,74 @@ namespace senf /* * mandatory fields */ - SENF_PARSER_FIELD ( version, UInt8Parser ); + SENF_PARSER_FIELD ( version, UInt8Parser ); //padding bits, currently unused, it simply aligns the fields onto natural word boundaries. - SENF_PARSER_SKIP ( 1,1 ); - SENF_PARSER_FIELD ( length, UInt16LSBParser); + SENF_PARSER_SKIP ( 1,1 ); + SENF_PARSER_FIELD ( length, UInt16LSBParser ); /* * present flags * indicate which data field are contained in the packet */ - SENF_PARSER_BITFIELD_RO ( lockQualityPresent, 1, bool ); - SENF_PARSER_BITFIELD_RO ( dbmAntennaNoisePresent, 1, bool ); - SENF_PARSER_BITFIELD_RO ( dbmAntennaSignalPresent, 1, bool ); - SENF_PARSER_BITFIELD_RO ( fhssPresent, 1, bool ); - SENF_PARSER_BITFIELD_RO ( channelPresent, 1, bool ); - SENF_PARSER_BITFIELD_RO ( ratePresent, 1, bool ); - SENF_PARSER_BITFIELD_RO ( flagsPresent, 1, bool ); - SENF_PARSER_BITFIELD_RO ( tsftPresent, 1, bool ); - SENF_PARSER_SKIP_BITS ( 2 ); //currently unused bits - SENF_PARSER_BITFIELD_RO ( dbAntennaNoisePresent, 1, bool ); - SENF_PARSER_BITFIELD_RO ( dbAntennaSignalPresent, 1, bool ); - SENF_PARSER_BITFIELD_RO ( antennaPresent, 1, bool ); - SENF_PARSER_BITFIELD_RO ( dbmTxAttenuationPresent, 1, bool ); - SENF_PARSER_BITFIELD_RO ( dbTxAttenuationPresent, 1, bool ); - SENF_PARSER_BITFIELD_RO ( txAttenuationPresent, 1, bool ); - SENF_PARSER_SKIP_BITS ( 8 ); //currently unused bits + SENF_PARSER_BITFIELD_RO ( lockQualityPresent, 1, bool ); + SENF_PARSER_BITFIELD_RO ( dbmAntennaNoisePresent, 1, bool ); + SENF_PARSER_BITFIELD_RO ( dbmAntennaSignalPresent, 1, bool ); + SENF_PARSER_BITFIELD_RO ( fhssPresent, 1, bool ); + SENF_PARSER_BITFIELD_RO ( channelOptionsPresent, 1, bool ); + SENF_PARSER_BITFIELD_RO ( ratePresent, 1, bool ); + SENF_PARSER_BITFIELD_RO ( flagsPresent, 1, bool ); + SENF_PARSER_BITFIELD_RO ( tsftPresent, 1, bool ); + SENF_PARSER_SKIP_BITS ( 2 ); //currently unused bits + SENF_PARSER_BITFIELD_RO ( dbAntennaNoisePresent, 1, bool ); + SENF_PARSER_BITFIELD_RO ( dbAntennaSignalPresent, 1, bool ); + SENF_PARSER_BITFIELD_RO ( antennaPresent, 1, bool ); + SENF_PARSER_BITFIELD_RO ( dbmTxAttenuationPresent, 1, bool ); + SENF_PARSER_BITFIELD_RO ( dbTxAttenuationPresent, 1, bool ); + SENF_PARSER_BITFIELD_RO ( txAttenuationPresent, 1, bool ); + SENF_PARSER_SKIP_BITS ( 8 ); //currently unused bits //if bit is set,another 32 bit present flag is attached (not implemented yet) - SENF_PARSER_BITFIELD ( extendedBitmaskPresent, 1, bool ); - SENF_PARSER_SKIP_BITS ( 7 ); //currently unused bits - + SENF_PARSER_BITFIELD ( extendedBitmaskPresent, 1, bool ); + SENF_PARSER_SKIP_BITS ( 7 ); //currently unused bits /* * Radiotap data * parsing data according to present flags */ - SENF_PARSER_VARIANT ( tsft_, tsftPresent, - ( novalue ( disable_tsft, VoidPacketParser )) - ( id ( tsft, UInt64LSBParser )) ); - SENF_PARSER_VARIANT ( flags_, flagsPresent, - ( novalue ( disable_flags, VoidPacketParser )) - ( id ( flags, RadiotapPacketParser_Flags )) ); - SENF_PARSER_VARIANT ( rate_, ratePresent, - ( novalue ( disable_rate, VoidPacketParser )) - ( id ( rate, UInt8Parser )) ); - SENF_PARSER_VARIANT ( channelFlags_, channelPresent, - ( novalue ( disable_channelOptions, VoidPacketParser )) - ( id ( channelOptions, RadiotapPacketParser_ChannelOptions )) ); - SENF_PARSER_VARIANT ( fhss_, fhssPresent, - ( novalue ( disable_fhss, VoidPacketParser )) - ( id ( fhss, UInt16LSBParser )) ); - SENF_PARSER_VARIANT ( dbmAntennaSignal_, dbmAntennaSignalPresent, - ( novalue ( disable_dbmAntennaSignal, VoidPacketParser )) - ( id ( dbmAntennaSignal, Int8Parser )) ); - SENF_PARSER_VARIANT ( dbmAntennaNoise_, dbmAntennaNoisePresent, - ( novalue ( disable_dbmAntennaNoise, VoidPacketParser )) - ( id ( dbmAntennaNoise, Int8Parser )) ); - SENF_PARSER_VARIANT ( lockQuality_, lockQualityPresent, - ( novalue ( disable_lockQuality, VoidPacketParser )) - ( id ( lockQuality, UInt16LSBParser )) ); - SENF_PARSER_VARIANT ( txAttenuation_, txAttenuationPresent, - ( novalue ( disable_txAttenuation, VoidPacketParser )) - ( id ( txAttenuation, UInt16LSBParser )) ); - SENF_PARSER_VARIANT ( dbTxAttenuation_, dbTxAttenuationPresent, - ( novalue ( disable_dbTxAttenuation, VoidPacketParser )) - ( id ( dbTxAttenuation, UInt16LSBParser )) ); - SENF_PARSER_VARIANT ( antenna_, antennaPresent, - ( novalue ( disable_antenna, VoidPacketParser )) - ( id ( antenna, UInt8Parser )) ); - SENF_PARSER_VARIANT ( dbAntennaSignal_, dbAntennaSignalPresent, - ( novalue ( disable_dbAntennaSignal, VoidPacketParser )) - ( id ( dbAntennaSignal, UInt8Parser )) ); - SENF_PARSER_VARIANT ( dbAntennaNoise_, dbAntennaNoisePresent, - ( novalue ( disable_dbAntennaNoise, VoidPacketParser )) - ( id ( dbAntennaNoise, UInt8Parser )) ); + #define OPTIONAL_FIELD(name, parser) SENF_PARSER_VARIANT \ + ( name##_, name##Present, \ + ( novalue( disable_##name, VoidPacketParser )) \ + ( id( name, parser )) ); + + OPTIONAL_FIELD ( tsft, UInt64LSBParser ); + OPTIONAL_FIELD ( flags, RadiotapPacketParser_Flags ); + OPTIONAL_FIELD ( rate, UInt8Parser ); + OPTIONAL_FIELD ( channelOptions, RadiotapPacketParser_ChannelOptions ); + OPTIONAL_FIELD ( fhss, UInt16LSBParser ); + OPTIONAL_FIELD ( dbmAntennaSignal, Int8Parser ); + OPTIONAL_FIELD ( dbmAntennaNoise, Int8Parser ); + OPTIONAL_FIELD ( txAttenuation, UInt16LSBParser ); + OPTIONAL_FIELD ( dbTxAttenuation, UInt16LSBParser ); + OPTIONAL_FIELD ( antenna, UInt8Parser ); + OPTIONAL_FIELD ( dbAntennaSignal, UInt8Parser ); + OPTIONAL_FIELD ( dbAntennaNoise, UInt8Parser ); SENF_PARSER_INIT() { version() = 0; } - SENF_PARSER_FINALIZE(RadiotapPacketParser); }; + /** \brief Radiotap packet + \par Packet type (typedef): + \ref RadiotapPacket + \par Fields: + \ref RadiotapPacketParser + + \ingroup protocolbundle_80211 + */ struct RadiotapPacketType : public senf::PacketTypeBase, public senf::PacketTypeMixin @@ -196,11 +177,9 @@ namespace senf static void dump(packet p, std::ostream &os); static void finalize(packet p); - - }; - typedef RadiotapPacketType::packet RadiotapPacket; + typedef senf::ConcretePacket RadiotapPacket; } #endif