replaced some tabs with spaces
[senf.git] / Packets / 80211Bundle / RadiotapPacket.test.cc
1 // $Id$
2 //
3 // Copyright (C) 2008
4 // Fraunhofer Institute for Open Communication Systems (FOKUS)
5 // Competence Center NETwork research (NET), St. Augustin, GERMANY
6 //     Christian Niephaus <cni@berlios.de>
7 //
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.
12 //
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.
17 //
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.
22
23 // Definition of non-inline non-template functions
24
25 // Custom includes
26 #include "../../Packets/Packets.hh"
27 #include "../../Utils/auto_unit_test.hh"
28 #include <boost/test/test_tools.hpp>
29 #include "RadiotapPacket.hh"
30
31
32 BOOST_AUTO_UNIT_TEST(RadiotapPacket_packet)
33 {
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,
39             0x02, 0x23
40     };
41     senf::RadiotapPacket p (senf::RadiotapPacket::create(data));
42
43     /* mandatory fields*/
44     BOOST_CHECK_EQUAL( p->version(), 0u);
45     BOOST_CHECK_EQUAL( p->length(), 26u);
46
47     /* present flags */
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);
63
64     /* data flieds */
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);
72
73     /* flags */
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);
82
83     /* channel flags */
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);
95 }
96
97 BOOST_AUTO_UNIT_TEST(RadiotapPacket_create)
98 {
99     unsigned char data[] = {
100             0x00 ,0x00 ,0x1a ,0x00, 0x6f, 0x18, 0x00, 0x00,
101             0x02, 0xe6, 0x8a, 0xdf, 0x12, 0x00, 0x00, 0x00,
102             0x12, 0x0c, 0xc8, 0x14, 0x40, 0x01, 0xc3, 0xa0,
103             0x02, 0x23
104     };
105
106     senf::RadiotapPacket p (senf::RadiotapPacket::create());
107
108     SENF_CHECK_NO_THROW( p->init_tsft());
109     SENF_CHECK_NO_THROW( p->tsft()=81059833346uLL);
110
111     SENF_CHECK_NO_THROW( p->init_rate());
112     SENF_CHECK_NO_THROW( p->rate() = 12u);
113     SENF_CHECK_NO_THROW( p->init_dbmAntennaSignal());
114     SENF_CHECK_NO_THROW( p->dbmAntennaSignal() = -61);
115     SENF_CHECK_NO_THROW( p->init_dbmAntennaNoise());
116     SENF_CHECK_NO_THROW( p->dbmAntennaNoise() = -96);
117     SENF_CHECK_NO_THROW( p->init_antenna());
118     SENF_CHECK_NO_THROW( p->antenna() = 2u);
119     SENF_CHECK_NO_THROW( p->init_dbAntennaSignal());
120     SENF_CHECK_NO_THROW( p->dbAntennaSignal() = 35);
121
122     SENF_CHECK_NO_THROW( p->init_flags());
123     SENF_CHECK_NO_THROW( p->flags().cfp() = false);
124     SENF_CHECK_NO_THROW( p->flags().shortPreamble() = true);
125     SENF_CHECK_NO_THROW( p->flags().wep() = false);
126     SENF_CHECK_NO_THROW( p->flags().fragmentation() = false);
127     SENF_CHECK_NO_THROW( p->flags().fcsPresent() = true);
128     SENF_CHECK_NO_THROW( p->flags().padding() = false);
129     SENF_CHECK_NO_THROW( p->flags().badFCS() = false);
130     SENF_CHECK_NO_THROW( p->flags().shortGI() = false);
131
132     SENF_CHECK_NO_THROW( p->init_channelOptions());
133     SENF_CHECK_NO_THROW( p->channelOptions().freq() = 5320u)
134     SENF_CHECK_NO_THROW( p->channelOptions().ofdm() = true);
135     SENF_CHECK_NO_THROW( p->channelOptions().turbo() = false);
136     SENF_CHECK_NO_THROW( p->channelOptions().cck() = false);
137     SENF_CHECK_NO_THROW( p->channelOptions().flag5ghz() = true);
138     SENF_CHECK_NO_THROW( p->channelOptions().passive() = false);
139     SENF_CHECK_NO_THROW( p->channelOptions().cckOfdm() = false);
140     SENF_CHECK_NO_THROW( p->channelOptions().gfsk() = false);
141     SENF_CHECK_NO_THROW( p->channelOptions().gsm() = false);
142     SENF_CHECK_NO_THROW( p->channelOptions().staticTurbo() = false);
143     SENF_CHECK_NO_THROW( p->channelOptions().halfRateChannel() = false);
144     SENF_CHECK_NO_THROW( p->channelOptions().quarterRateChannel() = false);
145
146     p.finalizeAll();
147
148     BOOST_CHECK_EQUAL( p->length(), 26u );
149     BOOST_CHECK( equal( p.data().begin(), p.data().end(), data ));
150 }
151
152 BOOST_AUTO_UNIT_TEST(RadiotapPacket_packet_ath9k)
153 {
154     /* radiotap packet from ath9k with atheros card*/
155     unsigned char data[] = {
156             0x00, 0x00, 0x20, 0x00, 0x6f, 0x48, 0x00, 0x00, 0x87, 0xbb, 0x91, 0x7c, 0x3b, 0x00, 0x00, 0x00,
157             0x00, 0x04, 0x85, 0x09, 0x80, 0x04, 0xb2, 0xa1, 0x00, 0x00, 0x00, 0x00, 0xd5, 0x1a, 0xf7, 0x94
158     };
159     senf::RadiotapPacket p (senf::RadiotapPacket::create(data));
160
161     /* mandatory fields*/
162     BOOST_CHECK_EQUAL( p->version(), 0u);
163     BOOST_CHECK_EQUAL( p->length(), 32u);
164
165     BOOST_CHECK_EQUAL( p->dbmAntennaSignal(), -78);
166     BOOST_CHECK_EQUAL( p->dbmAntennaNoise(), -95);
167     BOOST_CHECK_EQUAL( p->fcs(), 0xd51af794);
168     BOOST_CHECK_EQUAL( p->antenna(), 0u);
169
170
171 }
172