72f6093e439a2aadaea9592de05a15e8e8db836c
[senf.git] / Packets / 80211Bundle / RadiotapPacket.test.cc
1 // $Id: $
2 //
3 // Copyright (C) 2006
4 // Fraunhofer Institute for Open Communication Systems (FOKUS)
5 // Competence Center NETwork research (NET), St. Augustin, GERMANY
6 //     Christian Niephaus <christian.niephaus@fokus.fraunhofer.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 #include <senf/Utils/hexdump.hh>
31
32 BOOST_AUTO_UNIT_TEST(RadiotapPacket_packet)
33 {
34     /* used madwifi 0.9.4 */
35     unsigned char data[] = {    0x00 ,0x00 ,0x1a ,0x00, 0x6f, 0x18, 0x00, 0x00,
36                                                                 0x02, 0xe6, 0x8a, 0xdf, 0x12, 0x00,     0x00, 0x00,
37                                                                 0x12, 0x0c, 0xc8, 0x14, 0x40, 0x01, 0xc3, 0xa0,
38                                                                 0x02, 0x23
39                                                         };
40     senf::RadiotapPacket p (senf::RadiotapPacket::create(data));
41
42     /* mandatory fields*/
43     BOOST_CHECK_EQUAL( p->version(), 0u);
44     BOOST_CHECK_EQUAL( p->length(), 26u);
45
46     /* present flags */
47     BOOST_CHECK_EQUAL( p->tsftPresent(), true);
48     BOOST_CHECK_EQUAL( p->flagsPresent(), true);
49     BOOST_CHECK_EQUAL( p->extendedBitmaskPresent(), false);
50     BOOST_CHECK_EQUAL( p->ratePresent(), true);
51     BOOST_CHECK_EQUAL( p->channelPresent(), true);
52     BOOST_CHECK_EQUAL( p->fhssPresent(), false);
53     BOOST_CHECK_EQUAL( p->dbmAntennaSignalPresent(), true);
54     BOOST_CHECK_EQUAL( p->dbmAntennaNoisePresent(), true);
55     BOOST_CHECK_EQUAL( p->lockQualityPresent(), false);
56     BOOST_CHECK_EQUAL( p->txAttenuationPresent(), false);
57     BOOST_CHECK_EQUAL( p->dbmTxAttenuationPresent(), false);
58     BOOST_CHECK_EQUAL( p->dbTxAttenuationPresent(), false);
59     BOOST_CHECK_EQUAL( p->antennaPresent(), true);
60     BOOST_CHECK_EQUAL( p->dbAntennaSignalPresent(), true);
61     BOOST_CHECK_EQUAL( p->dbAntennaNoisePresent(), false);
62
63     /* data flieds */
64     BOOST_CHECK_EQUAL( p->tsft(), 81059833346uLL);
65     BOOST_CHECK_EQUAL( p->rate(), 12u);
66     BOOST_CHECK_EQUAL( p->channelOptions().freq(), 5320u);
67     BOOST_CHECK_EQUAL( p->dbmAntennaSignal(), -61);
68     BOOST_CHECK_EQUAL( p->dbmAntennaNoise(), -96);
69     BOOST_CHECK_EQUAL( p->antenna(), 2u);
70     BOOST_CHECK_EQUAL( p->dbAntennaSignal(), 35u);
71
72     /* flags */
73     BOOST_CHECK_EQUAL( p->flags().cfp(), false);
74     BOOST_CHECK_EQUAL( p->flags().shortPreamble(), true);
75     BOOST_CHECK_EQUAL( p->flags().wep(), false);
76     BOOST_CHECK_EQUAL( p->flags().fragmentation(), false);
77     BOOST_CHECK_EQUAL( p->flags().fcsPresent(), true);
78     BOOST_CHECK_EQUAL( p->flags().padding(), false);
79     BOOST_CHECK_EQUAL( p->flags().badFCS(), false);
80     BOOST_CHECK_EQUAL( p->flags().shortGI(), false);
81
82     /* channel flags */
83     BOOST_CHECK_EQUAL( p->channelOptions().ofdm(), true);
84     BOOST_CHECK_EQUAL( p->channelOptions().turbo(), false);
85     BOOST_CHECK_EQUAL( p->channelOptions().cck(), false);
86     BOOST_CHECK_EQUAL( p->channelOptions().flag5ghz(), true);
87     BOOST_CHECK_EQUAL( p->channelOptions().passive(), false);
88     BOOST_CHECK_EQUAL( p->channelOptions().cckOfdm(), false);
89     BOOST_CHECK_EQUAL( p->channelOptions().gfsk(), false);
90     BOOST_CHECK_EQUAL( p->channelOptions().gsm(), false);
91     BOOST_CHECK_EQUAL( p->channelOptions().staticTurbo(), false);
92     BOOST_CHECK_EQUAL( p->channelOptions().halfRateChannel(), false);
93     BOOST_CHECK_EQUAL( p->channelOptions().quarterRateChannel(), false);
94 }
95
96 BOOST_AUTO_UNIT_TEST(RadiotapPacket_create)
97 {
98     unsigned char data[] = {    0x00 ,0x00 ,0x1a ,0x00, 0x6f, 0x18, 0x00, 0x00,
99                                 0x02, 0xe6, 0x8a, 0xdf, 0x12, 0x00, 0x00, 0x00,
100                                 0x12, 0x0c, 0xc8, 0x14, 0x40, 0x01, 0xc3, 0xa0,
101                                 0x02, 0x23
102                             };
103
104     senf::RadiotapPacket p (senf::RadiotapPacket::create());
105
106     SENF_CHECK_NO_THROW(p->init_tsft());
107     SENF_CHECK_NO_THROW(p->tsft()=81059833346uLL);
108
109     SENF_CHECK_NO_THROW(p->init_rate());
110     SENF_CHECK_NO_THROW(p->rate()=12u);
111     SENF_CHECK_NO_THROW(p->init_dbmAntennaSignal());
112     SENF_CHECK_NO_THROW(p->dbmAntennaSignal()=-61);
113     SENF_CHECK_NO_THROW(p->init_dbmAntennaNoise());
114     SENF_CHECK_NO_THROW(p->dbmAntennaNoise()=-96);
115     SENF_CHECK_NO_THROW(p->init_antenna());
116     SENF_CHECK_NO_THROW(p->antenna()=2u);
117     SENF_CHECK_NO_THROW(p->init_dbAntennaSignal());
118     SENF_CHECK_NO_THROW(p->dbAntennaSignal()=35);
119
120     SENF_CHECK_NO_THROW(p->init_flags());
121     SENF_CHECK_NO_THROW(p->flags().cfp()=false);
122     SENF_CHECK_NO_THROW(p->flags().shortPreamble()=true);
123     SENF_CHECK_NO_THROW(p->flags().wep()=false);
124     SENF_CHECK_NO_THROW(p->flags().fragmentation()=false);
125     SENF_CHECK_NO_THROW(p->flags().fcsPresent()=true);
126     SENF_CHECK_NO_THROW(p->flags().padding()=false);
127     SENF_CHECK_NO_THROW(p->flags().badFCS()=false);
128     SENF_CHECK_NO_THROW(p->flags().shortGI()=false);
129
130     SENF_CHECK_NO_THROW(p->init_channelOptions());
131     SENF_CHECK_NO_THROW(p->channelOptions().freq()=5320u)
132     SENF_CHECK_NO_THROW(p->channelOptions().ofdm()=true);
133     SENF_CHECK_NO_THROW(p->channelOptions().turbo()=false);
134     SENF_CHECK_NO_THROW(p->channelOptions().cck()=false);
135     SENF_CHECK_NO_THROW(p->channelOptions().flag5ghz()=true);
136     SENF_CHECK_NO_THROW(p->channelOptions().passive()=false);
137     SENF_CHECK_NO_THROW(p->channelOptions().cckOfdm()=false);
138     SENF_CHECK_NO_THROW(p->channelOptions().gfsk()=false);
139     SENF_CHECK_NO_THROW(p->channelOptions().gsm()=false);
140     SENF_CHECK_NO_THROW(p->channelOptions().staticTurbo()=false);
141     SENF_CHECK_NO_THROW(p->channelOptions().halfRateChannel()=false);
142     SENF_CHECK_NO_THROW(p->channelOptions().quarterRateChannel()=false);
143
144     p.finalizeAll();
145
146     BOOST_CHECK_EQUAL( p->length(), 26u );
147     BOOST_CHECK( equal( p.data().begin(), p.data().end(), data ));
148
149 }
150
151