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.
23 // Definition of non-inline non-template functions
26 #include "../../Packets/Packets.hh"
27 #include "../../Utils/auto_unit_test.hh"
28 #include <boost/test/test_tools.hpp>
29 #include "RadiotapPacket.hh"
32 BOOST_AUTO_UNIT_TEST(RadiotapPacket_packet)
34 /* used madwifi 0.9.4 */
35 unsigned char data[] = {
36 0x00 ,0x00 ,0x1a ,0x00, 0x6f, 0x18, 0x00, 0x00,
37 0x02, 0xe6, 0x8a, 0xdf, 0x12, 0x00, 0x00, 0x00,
38 0x12, 0x0c, 0xc8, 0x14, 0x40, 0x01, 0xc3, 0xa0,
41 senf::RadiotapPacket p (senf::RadiotapPacket::create(data));
44 BOOST_CHECK_EQUAL( p->version(), 0u);
45 BOOST_CHECK_EQUAL( p->length(), 26u);
48 BOOST_CHECK_EQUAL( p->tsftPresent(), true);
49 BOOST_CHECK_EQUAL( p->flagsPresent(), true);
50 BOOST_CHECK_EQUAL( p->extendedBitmaskPresent(), false);
51 BOOST_CHECK_EQUAL( p->ratePresent(), true);
52 BOOST_CHECK_EQUAL( p->channelOptionsPresent(), true);
53 BOOST_CHECK_EQUAL( p->fhssPresent(), false);
54 BOOST_CHECK_EQUAL( p->dbmAntennaSignalPresent(), true);
55 BOOST_CHECK_EQUAL( p->dbmAntennaNoisePresent(), true);
56 BOOST_CHECK_EQUAL( p->lockQualityPresent(), false);
57 BOOST_CHECK_EQUAL( p->txAttenuationPresent(), false);
58 BOOST_CHECK_EQUAL( p->dbmTxAttenuationPresent(), false);
59 BOOST_CHECK_EQUAL( p->dbTxAttenuationPresent(), false);
60 BOOST_CHECK_EQUAL( p->antennaPresent(), true);
61 BOOST_CHECK_EQUAL( p->dbAntennaSignalPresent(), true);
62 BOOST_CHECK_EQUAL( p->dbAntennaNoisePresent(), false);
65 BOOST_CHECK_EQUAL( p->tsft(), 81059833346uLL);
66 BOOST_CHECK_EQUAL( p->rate(), 12u);
67 BOOST_CHECK_EQUAL( p->channelOptions().freq(), 5320u);
68 BOOST_CHECK_EQUAL( p->dbmAntennaSignal(), -61);
69 BOOST_CHECK_EQUAL( p->dbmAntennaNoise(), -96);
70 BOOST_CHECK_EQUAL( p->antenna(), 2u);
71 BOOST_CHECK_EQUAL( p->dbAntennaSignal(), 35u);
74 BOOST_CHECK_EQUAL( p->flags().cfp(), false);
75 BOOST_CHECK_EQUAL( p->flags().shortPreamble(), true);
76 BOOST_CHECK_EQUAL( p->flags().wep(), false);
77 BOOST_CHECK_EQUAL( p->flags().fragmentation(), false);
78 BOOST_CHECK_EQUAL( p->flags().fcsPresent(), true);
79 BOOST_CHECK_EQUAL( p->flags().padding(), false);
80 BOOST_CHECK_EQUAL( p->flags().badFCS(), false);
81 BOOST_CHECK_EQUAL( p->flags().shortGI(), false);
84 BOOST_CHECK_EQUAL( p->channelOptions().ofdm(), true);
85 BOOST_CHECK_EQUAL( p->channelOptions().turbo(), false);
86 BOOST_CHECK_EQUAL( p->channelOptions().cck(), false);
87 BOOST_CHECK_EQUAL( p->channelOptions().flag5ghz(), true);
88 BOOST_CHECK_EQUAL( p->channelOptions().passive(), false);
89 BOOST_CHECK_EQUAL( p->channelOptions().cckOfdm(), false);
90 BOOST_CHECK_EQUAL( p->channelOptions().gfsk(), false);
91 BOOST_CHECK_EQUAL( p->channelOptions().gsm(), false);
92 BOOST_CHECK_EQUAL( p->channelOptions().staticTurbo(), false);
93 BOOST_CHECK_EQUAL( p->channelOptions().halfRateChannel(), false);
94 BOOST_CHECK_EQUAL( p->channelOptions().quarterRateChannel(), false);
96 std::ostringstream oss (std::ostringstream::out);
97 SENF_CHECK_NO_THROW( p.dump( oss));
100 BOOST_AUTO_UNIT_TEST(RadiotapPacket_create)
102 unsigned char data[] = {
103 0x00 ,0x00 ,0x1a ,0x00, 0x6f, 0x18, 0x00, 0x00,
104 0x02, 0xe6, 0x8a, 0xdf, 0x12, 0x00, 0x00, 0x00,
105 0x12, 0x0c, 0xc8, 0x14, 0x40, 0x01, 0xc3, 0xa0,
109 senf::RadiotapPacket p (senf::RadiotapPacket::create());
111 SENF_CHECK_NO_THROW( p->init_tsft());
112 SENF_CHECK_NO_THROW( p->tsft()=81059833346uLL);
114 SENF_CHECK_NO_THROW( p->init_rate());
115 SENF_CHECK_NO_THROW( p->rate() = 12u);
116 SENF_CHECK_NO_THROW( p->init_dbmAntennaSignal());
117 SENF_CHECK_NO_THROW( p->dbmAntennaSignal() = -61);
118 SENF_CHECK_NO_THROW( p->init_dbmAntennaNoise());
119 SENF_CHECK_NO_THROW( p->dbmAntennaNoise() = -96);
120 SENF_CHECK_NO_THROW( p->init_antenna());
121 SENF_CHECK_NO_THROW( p->antenna() = 2u);
122 SENF_CHECK_NO_THROW( p->init_dbAntennaSignal());
123 SENF_CHECK_NO_THROW( p->dbAntennaSignal() = 35);
125 SENF_CHECK_NO_THROW( p->init_flags());
126 SENF_CHECK_NO_THROW( p->flags().cfp() = false);
127 SENF_CHECK_NO_THROW( p->flags().shortPreamble() = true);
128 SENF_CHECK_NO_THROW( p->flags().wep() = false);
129 SENF_CHECK_NO_THROW( p->flags().fragmentation() = false);
130 SENF_CHECK_NO_THROW( p->flags().fcsPresent() = true);
131 SENF_CHECK_NO_THROW( p->flags().padding() = false);
132 SENF_CHECK_NO_THROW( p->flags().badFCS() = false);
133 SENF_CHECK_NO_THROW( p->flags().shortGI() = false);
135 SENF_CHECK_NO_THROW( p->init_channelOptions());
136 SENF_CHECK_NO_THROW( p->channelOptions().freq() = 5320u)
137 SENF_CHECK_NO_THROW( p->channelOptions().ofdm() = true);
138 SENF_CHECK_NO_THROW( p->channelOptions().turbo() = false);
139 SENF_CHECK_NO_THROW( p->channelOptions().cck() = false);
140 SENF_CHECK_NO_THROW( p->channelOptions().flag5ghz() = true);
141 SENF_CHECK_NO_THROW( p->channelOptions().passive() = false);
142 SENF_CHECK_NO_THROW( p->channelOptions().cckOfdm() = false);
143 SENF_CHECK_NO_THROW( p->channelOptions().gfsk() = false);
144 SENF_CHECK_NO_THROW( p->channelOptions().gsm() = false);
145 SENF_CHECK_NO_THROW( p->channelOptions().staticTurbo() = false);
146 SENF_CHECK_NO_THROW( p->channelOptions().halfRateChannel() = false);
147 SENF_CHECK_NO_THROW( p->channelOptions().quarterRateChannel() = false);
151 BOOST_CHECK_EQUAL( p->length(), 26u );
152 BOOST_CHECK( equal( p.data().begin(), p.data().end(), data ));
155 BOOST_AUTO_UNIT_TEST(RadiotapPacket_packet_ath9k)
157 /* radiotap packet from ath9k with atheros card*/
158 unsigned char data[] = {
159 0x00, 0x00, 0x20, 0x00, 0x6f, 0x48, 0x00, 0x00, 0x87, 0xbb, 0x91, 0x7c, 0x3b, 0x00, 0x00, 0x00,
160 0x00, 0x04, 0x85, 0x09, 0x80, 0x04, 0xb2, 0xa1, 0x00, 0x00, 0x00, 0x00, 0xd5, 0x1a, 0xf7, 0x94
162 senf::RadiotapPacket p (senf::RadiotapPacket::create(data));
164 /* mandatory fields*/
165 BOOST_CHECK_EQUAL( p->version(), 0u);
166 BOOST_CHECK_EQUAL( p->length(), 32u);
168 BOOST_CHECK_EQUAL( p->dbmAntennaSignal(), -78);
169 BOOST_CHECK_EQUAL( p->dbmAntennaNoise(), -95);
170 BOOST_CHECK_EQUAL( p->fcs(), 0xd51af794);
171 BOOST_CHECK_EQUAL( p->antenna(), 0u);