4 // Fraunhofer Institute for Open Communication Systems (FOKUS)
5 // Competence Center NETwork research (NET), St. Augustin, GERMANY
6 // Christian Niephaus <cni@berlios.de>
8 // This program is free software; you can redistribute it and/or modify
9 // it under the terms of the GNU General Public License as published by
10 // the Free Software Foundation; either version 2 of the License, or
11 // (at your option) any later version.
13 // This program is distributed in the hope that it will be useful,
14 // but WITHOUT ANY WARRANTY; without even the implied warranty of
15 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16 // GNU General Public License for more details.
18 // You should have received a copy of the GNU General Public License
19 // along with this program; if not, write to the
20 // Free Software Foundation, Inc.,
21 // 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
24 \brief RadiotapPacket unit tests */
27 #include "RadiotapPacket.hh"
28 #include "../../Packets/Packets.hh"
30 #include "../../Utils/auto_unit_test.hh"
31 #include <boost/test/test_tools.hpp>
33 ///////////////////////////////cc.p////////////////////////////////////////
34 BOOST_AUTO_UNIT_TEST(RadiotapPacket_packet)
36 /* used madwifi 0.9.4 */
37 unsigned char data[] = {
38 0x00 ,0x00 ,0x1a ,0x00, 0x6f, 0x18, 0x00, 0x00,
39 0x02, 0xe6, 0x8a, 0xdf, 0x12, 0x00, 0x00, 0x00,
40 0x12, 0x0c, 0xc8, 0x14, 0x40, 0x01, 0xc3, 0xa0,
43 senf::RadiotapPacket p (senf::RadiotapPacket::create(data));
46 BOOST_CHECK_EQUAL( p->version(), 0u);
47 BOOST_CHECK_EQUAL( p->length(), 26u);
50 BOOST_CHECK_EQUAL( p->tsftPresent(), true);
51 BOOST_CHECK_EQUAL( p->flagsPresent(), true);
52 BOOST_CHECK_EQUAL( p->extendedBitmaskPresent(), false);
53 BOOST_CHECK_EQUAL( p->ratePresent(), true);
54 BOOST_CHECK_EQUAL( p->channelOptionsPresent(), true);
55 BOOST_CHECK_EQUAL( p->fhssPresent(), false);
56 BOOST_CHECK_EQUAL( p->dbmAntennaSignalPresent(), true);
57 BOOST_CHECK_EQUAL( p->dbmAntennaNoisePresent(), true);
58 BOOST_CHECK_EQUAL( p->lockQualityPresent(), false);
59 BOOST_CHECK_EQUAL( p->txAttenuationPresent(), false);
60 BOOST_CHECK_EQUAL( p->dbmTxAttenuationPresent(), false);
61 BOOST_CHECK_EQUAL( p->dbTxAttenuationPresent(), false);
62 BOOST_CHECK_EQUAL( p->antennaPresent(), true);
63 BOOST_CHECK_EQUAL( p->dbAntennaSignalPresent(), true);
64 BOOST_CHECK_EQUAL( p->dbAntennaNoisePresent(), false);
67 BOOST_CHECK_EQUAL( p->tsft(), 81059833346uLL);
68 BOOST_CHECK_EQUAL( p->rate(), 12u);
69 BOOST_CHECK_EQUAL( p->channelOptions().freq(), 5320u);
70 BOOST_CHECK_EQUAL( p->dbmAntennaSignal(), -61);
71 BOOST_CHECK_EQUAL( p->dbmAntennaNoise(), -96);
72 BOOST_CHECK_EQUAL( p->antenna(), 2u);
73 BOOST_CHECK_EQUAL( p->dbAntennaSignal(), 35u);
76 BOOST_CHECK_EQUAL( p->flags().cfp(), false);
77 BOOST_CHECK_EQUAL( p->flags().shortPreamble(), true);
78 BOOST_CHECK_EQUAL( p->flags().wep(), false);
79 BOOST_CHECK_EQUAL( p->flags().fragmentation(), false);
80 BOOST_CHECK_EQUAL( p->flags().fcsPresent(), true);
81 BOOST_CHECK_EQUAL( p->flags().padding(), false);
82 BOOST_CHECK_EQUAL( p->flags().badFCS(), false);
83 BOOST_CHECK_EQUAL( p->flags().shortGI(), false);
86 BOOST_CHECK_EQUAL( p->channelOptions().ofdm(), true);
87 BOOST_CHECK_EQUAL( p->channelOptions().turbo(), false);
88 BOOST_CHECK_EQUAL( p->channelOptions().cck(), false);
89 BOOST_CHECK_EQUAL( p->channelOptions().flag5ghz(), true);
90 BOOST_CHECK_EQUAL( p->channelOptions().passive(), false);
91 BOOST_CHECK_EQUAL( p->channelOptions().cckOfdm(), false);
92 BOOST_CHECK_EQUAL( p->channelOptions().gfsk(), false);
93 BOOST_CHECK_EQUAL( p->channelOptions().gsm(), false);
94 BOOST_CHECK_EQUAL( p->channelOptions().staticTurbo(), false);
95 BOOST_CHECK_EQUAL( p->channelOptions().halfRateChannel(), false);
96 BOOST_CHECK_EQUAL( p->channelOptions().quarterRateChannel(), false);
98 std::ostringstream oss (std::ostringstream::out);
99 SENF_CHECK_NO_THROW( p.dump( oss));
102 BOOST_AUTO_UNIT_TEST(RadiotapPacket_create)
104 unsigned char data[] = {
105 0x00 ,0x00 ,0x1a ,0x00, 0x6f, 0x18, 0x00, 0x00,
106 0x02, 0xe6, 0x8a, 0xdf, 0x12, 0x00, 0x00, 0x00,
107 0x12, 0x0c, 0xc8, 0x14, 0x40, 0x01, 0xc3, 0xa0,
111 senf::RadiotapPacket p (senf::RadiotapPacket::create());
113 SENF_CHECK_NO_THROW( p->init_tsft());
114 SENF_CHECK_NO_THROW( p->tsft()=81059833346uLL);
116 SENF_CHECK_NO_THROW( p->init_rate());
117 SENF_CHECK_NO_THROW( p->rate() = 12u);
118 SENF_CHECK_NO_THROW( p->init_dbmAntennaSignal());
119 SENF_CHECK_NO_THROW( p->dbmAntennaSignal() = -61);
120 SENF_CHECK_NO_THROW( p->init_dbmAntennaNoise());
121 SENF_CHECK_NO_THROW( p->dbmAntennaNoise() = -96);
122 SENF_CHECK_NO_THROW( p->init_antenna());
123 SENF_CHECK_NO_THROW( p->antenna() = 2u);
124 SENF_CHECK_NO_THROW( p->init_dbAntennaSignal());
125 SENF_CHECK_NO_THROW( p->dbAntennaSignal() = 35);
127 SENF_CHECK_NO_THROW( p->init_flags());
128 SENF_CHECK_NO_THROW( p->flags().cfp() = false);
129 SENF_CHECK_NO_THROW( p->flags().shortPreamble() = true);
130 SENF_CHECK_NO_THROW( p->flags().wep() = false);
131 SENF_CHECK_NO_THROW( p->flags().fragmentation() = false);
132 SENF_CHECK_NO_THROW( p->flags().fcsPresent() = true);
133 SENF_CHECK_NO_THROW( p->flags().padding() = false);
134 SENF_CHECK_NO_THROW( p->flags().badFCS() = false);
135 SENF_CHECK_NO_THROW( p->flags().shortGI() = false);
137 SENF_CHECK_NO_THROW( p->init_channelOptions());
138 SENF_CHECK_NO_THROW( p->channelOptions().freq() = 5320u)
139 SENF_CHECK_NO_THROW( p->channelOptions().ofdm() = true);
140 SENF_CHECK_NO_THROW( p->channelOptions().turbo() = false);
141 SENF_CHECK_NO_THROW( p->channelOptions().cck() = false);
142 SENF_CHECK_NO_THROW( p->channelOptions().flag5ghz() = true);
143 SENF_CHECK_NO_THROW( p->channelOptions().passive() = false);
144 SENF_CHECK_NO_THROW( p->channelOptions().cckOfdm() = false);
145 SENF_CHECK_NO_THROW( p->channelOptions().gfsk() = false);
146 SENF_CHECK_NO_THROW( p->channelOptions().gsm() = false);
147 SENF_CHECK_NO_THROW( p->channelOptions().staticTurbo() = false);
148 SENF_CHECK_NO_THROW( p->channelOptions().halfRateChannel() = false);
149 SENF_CHECK_NO_THROW( p->channelOptions().quarterRateChannel() = false);
153 BOOST_CHECK_EQUAL( p->length(), 26u );
154 BOOST_CHECK( equal( p.data().begin(), p.data().end(), data ));
157 BOOST_AUTO_UNIT_TEST(RadiotapPacket_packet_ath9k)
159 /* radiotap packet from ath9k with atheros card*/
160 unsigned char data[] = {
161 0x00, 0x00, 0x20, 0x00, 0x6f, 0x48, 0x00, 0x00, 0x87, 0xbb, 0x91, 0x7c, 0x3b, 0x00, 0x00, 0x00,
162 0x00, 0x04, 0x85, 0x09, 0x80, 0x04, 0xb2, 0xa1, 0x00, 0x00, 0x00, 0x00, 0xd5, 0x1a, 0xf7, 0x94
164 senf::RadiotapPacket p (senf::RadiotapPacket::create(data));
166 /* mandatory fields*/
167 BOOST_CHECK_EQUAL( p->version(), 0u);
168 BOOST_CHECK_EQUAL( p->length(), 32u);
170 BOOST_CHECK_EQUAL( p->dbmAntennaSignal(), -78);
171 BOOST_CHECK_EQUAL( p->dbmAntennaNoise(), -95);
172 BOOST_CHECK_EQUAL( p->fcs(), 0xd51af794);
173 BOOST_CHECK_EQUAL( p->antenna(), 0u);