X-Git-Url: http://g0dil.de/git?a=blobdiff_plain;f=senf%2FPackets%2F80211Bundle%2FWLANPacket.hh;h=4a91e39ba9f3ad284de6ba0a239fc724370bba10;hb=e3179a2123ad51d0d9eb63834a581145c4f77c92;hp=ddbe46c61b84cf3aec0ce9934d441edce3ac690f;hpb=9cb871b939efe93e35dd96808d25089399acfc46;p=senf.git diff --git a/senf/Packets/80211Bundle/WLANPacket.hh b/senf/Packets/80211Bundle/WLANPacket.hh index ddbe46c..4a91e39 100644 --- a/senf/Packets/80211Bundle/WLANPacket.hh +++ b/senf/Packets/80211Bundle/WLANPacket.hh @@ -30,7 +30,7 @@ #include #include -///////////////////////////////hh.p//////////////////////////////////////// +//-///////////////////////////////////////////////////////////////////////////////////////////////// namespace senf { @@ -66,7 +66,7 @@ namespace senf SENF_PARSER_FINALIZE(WLANPacketParser); }; - /////////////////////////////////////////////////////////////////////////// + //-//////////////////////////////////////////////////////////////////////// /** \brief Management frame parser Re-ordering of bits due to LSB byte order @@ -120,7 +120,7 @@ namespace senf using mixin::initSize; using PacketTypeBase::nextPacketRange; - static void dump(packet p, std::ostream &os); + static void dump(packet p, std::ostream & os); }; /** \brief WLAN Management frame packet typedef @@ -128,7 +128,7 @@ namespace senf */ typedef WLANPacket_MgtFrameType::packet WLANPacket_MgtFrame; - /////////////////////////////////////////////////////////////////////////// + //-//////////////////////////////////////////////////////////////////////// /** \brief Control frame parser Re-ordering of bits due to LSB byte order @@ -178,7 +178,7 @@ namespace senf using mixin::initSize; using PacketTypeBase::nextPacketRange; - static void dump(packet p, std::ostream &os); + static void dump(packet p, std::ostream & os); }; /** \brief WLAN Control frame packet typedef @@ -186,7 +186,7 @@ namespace senf */ typedef WLANPacket_CtrlFrameType::packet WLANPacket_CtrlFrame; - /////////////////////////////////////////////////////////////////////////// + //-//////////////////////////////////////////////////////////////////////// /** \brief Data frame parser Re-ordering of bits due to LSB byte order @@ -197,27 +197,36 @@ namespace senf SENF_PARSER_INHERIT(WLANPacketParser); - SENF_PARSER_GOTO(subtype); - SENF_PARSER_SKIP_BITS(14); // dsBits_t; + dsBits_t::value_type dsBits() const { return parse( 1); } - SENF_PARSER_PRIVATE_FIELD ( addr1, MACAddressParser ); - SENF_PARSER_PRIVATE_FIELD ( addr2, MACAddressParser ); - SENF_PARSER_PRIVATE_FIELD ( addr3, MACAddressParser ); + MACAddressParser addr1() const { return parse( 4); } + MACAddressParser addr2() const { return parse( 10); } + MACAddressParser addr3() const { return parse( 16); } //sequence Number and fragment number //shift bits manually due to LSB - SENF_PARSER_PRIVATE_BITFIELD ( seqNumber_1, 4, unsigned ); - SENF_PARSER_BITFIELD ( fragmentNumber, 4, unsigned ); - SENF_PARSER_PRIVATE_FIELD ( seqNumber_2, UInt8Parser ); + typedef UIntFieldParser<0, 0+4> seqNumber_1_t; + seqNumber_1_t seqNumber_1() const { return parse( 22); } + + public: + typedef UIntFieldParser<4, 4+4> fragmentNumber_t; + fragmentNumber_t fragmentNumber() const { return parse( 22); } + + protected: + UInt8Parser seqNumber_2() const { return parse( 23); } + + public: boost::uint16_t sequenceNumber() const { return (uint16_t)(seqNumber_2()) << 4 | seqNumber_1(); }; void sequenceNumber(boost::uint16_t sn); + SENF_PARSER_GOTO_OFFSET( 24, 24); + // TODO fourth address field in case of WDS // SENF_PARSER_PRIVATE_VARIANT (wds_, dsBits, // ( novalue ( disable_addr4, VoidPacketParser )) @@ -273,7 +282,7 @@ namespace senf : no_factory(); } - static void dump(packet p, std::ostream &os); + static void dump(packet p, std::ostream & os); }; /** \brief WLAN Data frame packet typedef @@ -282,7 +291,7 @@ namespace senf typedef WLANPacket_DataFrameType::packet WLANPacket_DataFrame; } -///////////////////////////////hh.e//////////////////////////////////////// +//-///////////////////////////////////////////////////////////////////////////////////////////////// //#include "WLANPacket.cci" //#include "WLANPacket.ct" //#include "WLANPacket.cti"