X-Git-Url: http://g0dil.de/git?a=blobdiff_plain;f=senf%2FPackets%2F80211Bundle%2FWLANPacket.hh;h=0db88891d4dc4494a04dd2ae6e8271c4e6685cba;hb=ddb2132be4265f8a0d7d4c954c7c9401e59d027c;hp=c323afc95cd592799447066b866d932fc7905d98;hpb=9ffdaae4804503c4f36a53747c852a87ee626b9e;p=senf.git diff --git a/senf/Packets/80211Bundle/WLANPacket.hh b/senf/Packets/80211Bundle/WLANPacket.hh index c323afc..0db8889 100644 --- a/senf/Packets/80211Bundle/WLANPacket.hh +++ b/senf/Packets/80211Bundle/WLANPacket.hh @@ -2,23 +2,28 @@ // // Copyright (C) 2008 // Fraunhofer Institute for Open Communication Systems (FOKUS) -// Competence Center NETwork research (NET), St. Augustin, GERMANY -// 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 -// the Free Software Foundation; either version 2 of the License, or -// (at your option) any later version. +// The contents of this file are subject to the Fraunhofer FOKUS Public License +// Version 1.0 (the "License"); you may not use this file except in compliance +// with the License. You may obtain a copy of the License at +// http://senf.berlios.de/license.html // -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. +// The Fraunhofer FOKUS Public License Version 1.0 is based on, +// but modifies the Mozilla Public License Version 1.1. +// See the full license text for the amendments. // -// You should have received a copy of the GNU General Public License -// along with this program; if not, write to the -// Free Software Foundation, Inc., -// 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +// Software distributed under the License is distributed on an "AS IS" basis, +// WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License +// for the specific language governing rights and limitations under the License. +// +// The Original Code is Fraunhofer FOKUS code. +// +// The Initial Developer of the Original Code is Fraunhofer-Gesellschaft e.V. +// (registered association), Hansastraße 27 c, 80686 Munich, Germany. +// All Rights Reserved. +// +// Contributor(s): +// Christian Niephaus /** \file \brief 802.11 WLANPacket public header */ @@ -30,7 +35,7 @@ #include #include -///////////////////////////////hh.p//////////////////////////////////////// +//-///////////////////////////////////////////////////////////////////////////////////////////////// namespace senf { @@ -66,7 +71,7 @@ namespace senf SENF_PARSER_FINALIZE(WLANPacketParser); }; - /////////////////////////////////////////////////////////////////////////// + //-//////////////////////////////////////////////////////////////////////// /** \brief Management frame parser Re-ordering of bits due to LSB byte order @@ -93,6 +98,8 @@ namespace senf boost::uint16_t sequenceNumber() const { return (uint16_t)(seqNumber_2()) << 4 | seqNumber_1(); }; + + void sequenceNumber(boost::uint16_t sn); }; /** \brief WLAN Management frame packet @@ -118,7 +125,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 @@ -126,7 +133,7 @@ namespace senf */ typedef WLANPacket_MgtFrameType::packet WLANPacket_MgtFrame; - /////////////////////////////////////////////////////////////////////////// + //-//////////////////////////////////////////////////////////////////////// /** \brief Control frame parser Re-ordering of bits due to LSB byte order @@ -176,7 +183,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 @@ -184,7 +191,7 @@ namespace senf */ typedef WLANPacket_CtrlFrameType::packet WLANPacket_CtrlFrame; - /////////////////////////////////////////////////////////////////////////// + //-//////////////////////////////////////////////////////////////////////// /** \brief Data frame parser Re-ordering of bits due to LSB byte order @@ -195,25 +202,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 )) @@ -263,13 +281,13 @@ 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(); } - static void dump(packet p, std::ostream &os); + static void dump(packet p, std::ostream & os); }; /** \brief WLAN Data frame packet typedef @@ -278,7 +296,7 @@ namespace senf typedef WLANPacket_DataFrameType::packet WLANPacket_DataFrame; } -///////////////////////////////hh.e//////////////////////////////////////// +//-///////////////////////////////////////////////////////////////////////////////////////////////// //#include "WLANPacket.cci" //#include "WLANPacket.ct" //#include "WLANPacket.cti"