X-Git-Url: http://g0dil.de/git?a=blobdiff_plain;f=senf%2FPackets%2F80211Bundle%2FWLANPacket.hh;h=814263ef3bdac70c1a3613d4e0231e63f9043f5c;hb=ec082e2ded82e26d02f7aa72da519cbadcb601ec;hp=b5c2de947e3b5cf79c3b24905d37c8df40dbb0b9;hpb=0476b2133cab2df2c483b8c43d09d6116173e414;p=senf.git diff --git a/senf/Packets/80211Bundle/WLANPacket.hh b/senf/Packets/80211Bundle/WLANPacket.hh index b5c2de9..814263e 100644 --- a/senf/Packets/80211Bundle/WLANPacket.hh +++ b/senf/Packets/80211Bundle/WLANPacket.hh @@ -93,7 +93,7 @@ namespace senf boost::uint16_t sequenceNumber() const { return (uint16_t)(seqNumber_2()) << 4 | seqNumber_1(); }; - + void sequenceNumber(boost::uint16_t sn); }; @@ -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 )) @@ -267,9 +276,9 @@ namespace senf using mixin::initSize; using mixin::nextPacketRange; - static factory_t nextPacketType(packet p) { - return p->subtype() == 0 || p->subtype() == 8 - ? LlcSnapPacket::factory() + static factory_t nextPacketType(packet p) { + return p->subtype() == 0 || p->subtype() == 8 + ? LlcSnapPacket::factory() : no_factory(); }