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 WLANPacket unit tests */
27 #include "WLANPacket.hh"
29 #include <senf/Utils/auto_unit_test.hh>
30 #include <boost/test/test_tools.hpp>
32 ///////////////////////////////cc.p////////////////////////////////////////
33 /* test parser with a data frame */
34 SENF_AUTO_UNIT_TEST(WLANPacket_dataFrame_packet)
36 unsigned char data[] = {
37 0x88, 0x01, 0x00, 0x00, 0x00, 0x1a, //header
38 0x4d, 0x3e, 0xc7, 0x5c, 0x00, 0x0b, 0x6b, 0x57,
39 0x06, 0xb0, 0x00, 0x18, 0x4d, 0x6e, 0x78, 0x48,
40 0x30, 0x00, 0x01, 0x00,
41 0xaa, 0xaa, 0x03, 0x00, 0x00, 0x00, 0x08, 0x00, //llc header
44 senf::WLANPacket_DataFrame p (senf::WLANPacket_DataFrame::create(data));
46 BOOST_CHECK_EQUAL( p->version(), 0u );
47 BOOST_CHECK_EQUAL( p->type(), 2u );
48 BOOST_CHECK_EQUAL( p->subtype(), 8u );
49 BOOST_CHECK_EQUAL( p->toDS(), true );
50 BOOST_CHECK_EQUAL( p->fromDS(), false );
51 BOOST_CHECK_EQUAL( p->moreFrag(), false );
52 BOOST_CHECK_EQUAL( p->retry(), false );
53 BOOST_CHECK_EQUAL( p->pwrMgt(), false );
54 BOOST_CHECK_EQUAL( p->moreData(), false );
55 BOOST_CHECK_EQUAL( p->protectedFrame(), false );
56 BOOST_CHECK_EQUAL( p->order(), false );
58 BOOST_CHECK_EQUAL( p->duration(), 0u );
60 BOOST_CHECK_EQUAL( p->destinationAddress().value(),
61 senf::MACAddress::from_string("00:18:4d:6e:78:48") );
62 BOOST_CHECK_EQUAL( p->sourceAddress().value(),
63 senf::MACAddress::from_string("00:0b:6b:57:06:b0") );
64 BOOST_CHECK_EQUAL (p->bssid().value(),
65 senf::MACAddress::from_string("00:1a:4d:3e:c7:5c") );
67 BOOST_CHECK_EQUAL( p->bssid().value(),
68 p->receiverAddress().value() );
69 BOOST_CHECK_EQUAL( p->transmitterAddress().value(),
70 p->sourceAddress().value() );
72 BOOST_CHECK_EQUAL( p->sequenceNumber(), 3u );
73 BOOST_CHECK_EQUAL( p->fragmentNumber(), 0u );
75 std::ostringstream oss (std::ostringstream::out);
76 SENF_CHECK_NO_THROW( p.dump(oss) );
78 BOOST_REQUIRE( p.next(senf::nothrow) );
79 BOOST_CHECK( p.next().is<senf::LlcSnapPacket>() );
83 /* test parser with creating a data frame*/
84 SENF_AUTO_UNIT_TEST(WLANPacket_dataFrame_create)
86 senf::WLANPacket_DataFrame p (senf::WLANPacket_DataFrame::create());
88 SENF_CHECK_NO_THROW( p->bssid() = senf::MACAddress::from_string("00:1a:4d:3e:c7:5c") );
89 SENF_CHECK_NO_THROW(p->sequenceNumber(4095u));
91 BOOST_CHECK_EQUAL( p->type(), 2u );
92 BOOST_CHECK_EQUAL( p->sequenceNumber(), 4095u );
96 /* test parser with a beacon frame */
97 SENF_AUTO_UNIT_TEST(WLANPacket_beaconFrame_packet)
99 unsigned char data[] = {
100 0x80, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff,
101 0xff, 0xff, 0x00, 0x1a, 0x4d, 0x3e, 0xc7, 0x5c,
102 0x00, 0x1a, 0x4d, 0x3e, 0xc7, 0x5c, 0xe0, 0x12,
103 0x38, 0xa0, 0x86, 0x01, 0x00, 0x00, 0x00, 0x00,
104 0x64, 0x00, 0x01, 0x05, 0x00, 0x05, 0x62, 0x6f,
105 0x78, 0x43, 0x31, 0x01, 0x08, 0x8c, 0x12, 0x98,
106 0x24, 0xb0, 0x48, 0x60, 0x6c, 0x03, 0x01, 0x40,
107 0x05, 0x04, 0x00, 0x01, 0x00, 0x00, 0x07, 0x2a,
108 0x4e, 0x41, 0x49, 0x24, 0x01, 0x11, 0x28, 0x01,
109 0x11, 0x2c, 0x01, 0x11, 0x30, 0x01, 0x11, 0x34,
110 0x01, 0x17, 0x38, 0x01, 0x17, 0x3c, 0x01, 0x17,
111 0x40, 0x01, 0x17, 0x95, 0x01, 0x1e, 0x99, 0x01,
112 0x1e, 0x9d, 0x01, 0x1e, 0xa1, 0x01, 0x1e, 0xa5,
113 0x01, 0x1e, 0x20, 0x01, 0x00, 0xdd, 0x18, 0x00,
114 0x50, 0xf2, 0x02, 0x01, 0x01, 0x81, 0x00, 0x02,
115 0xa3, 0x40, 0x00, 0x27, 0xa4, 0x00, 0x00, 0x42,
116 0x43, 0x5e, 0x00, 0x62, 0x32, 0x2f, 0x00, 0xa0,
117 0x00, 0xdd, 0x09, 0x00, 0x03, 0x7f, 0x01, 0x01,
118 0x00, 0x24, 0xff, 0x7f,
121 senf::WLANPacket_MgtFrame p (senf::WLANPacket_MgtFrame::create(data));
123 BOOST_CHECK_EQUAL( p->version(), 0u );
124 BOOST_CHECK_EQUAL( p->type(), 0u );
125 BOOST_CHECK_EQUAL( p->subtype(), 8u );
126 BOOST_CHECK_EQUAL( p->toDS(), false );
127 BOOST_CHECK_EQUAL( p->fromDS(), false );
128 BOOST_CHECK_EQUAL( p->moreFrag(), false );
129 BOOST_CHECK_EQUAL( p->retry(), false );
130 BOOST_CHECK_EQUAL( p->pwrMgt(), false );
131 BOOST_CHECK_EQUAL( p->moreData(), false );
132 BOOST_CHECK_EQUAL( p->protectedFrame(), false );
133 BOOST_CHECK_EQUAL( p->order(), false );
134 BOOST_CHECK_EQUAL( p->duration(), 0u );
136 BOOST_CHECK_EQUAL( p->destinationAddress().value(),
137 senf::MACAddress::from_string("ff:ff:ff:ff:ff:ff") );
138 BOOST_CHECK_EQUAL( p->sourceAddress().value(),
139 senf::MACAddress::from_string("00:1a:4d:3e:c7:5c") );
140 BOOST_CHECK_EQUAL( p->bssid().value(),
141 senf::MACAddress::from_string("00:1a:4d:3e:c7:5c") );
143 BOOST_CHECK_EQUAL( p->sequenceNumber(), 302u );
144 BOOST_CHECK_EQUAL( p->fragmentNumber(), 0u );
148 /* test parser with creating a beacon frame*/
149 SENF_AUTO_UNIT_TEST(WLANPacket_mgtFrame_create)
151 senf::WLANPacket_MgtFrame p (senf::WLANPacket_MgtFrame::create());
154 p->destinationAddress() = senf::MACAddress::from_string("ff:ff:ff:ff:ff:ff")
157 p->sourceAddress() = senf::MACAddress::from_string("00:1a:4d:3e:c7:5c")
160 p->bssid() = senf::MACAddress::from_string("00:1a:4d:3e:c7:5c")
163 p->sequenceNumber(555u);
167 std::cout << p->sequenceNumber() << "\n";
168 BOOST_CHECK_EQUAL( p->type(), 0u );
169 BOOST_CHECK_EQUAL( p->sequenceNumber(), 555u );
173 /* test parser with an ACK frame*/
174 SENF_AUTO_UNIT_TEST(WLANPacket_ctrlFrame_packet)
176 unsigned char data[] = {
177 0xd4, 0x00, 0x00, 0x00,
178 0x00, 0x0b, 0x6b, 0x57, 0x06, 0xb0,
179 0x4f, 0xda, // What is this ?
182 senf::WLANPacket_CtrlFrame p (senf::WLANPacket_CtrlFrame::create(data));
184 BOOST_CHECK_EQUAL( p->version(), 0u );
185 BOOST_CHECK_EQUAL( p->type(), 1u );
186 BOOST_CHECK_EQUAL( p->subtype(), 13u );
187 BOOST_CHECK_EQUAL( p->toDS(), false );
188 BOOST_CHECK_EQUAL( p->fromDS(), false );
189 BOOST_CHECK_EQUAL( p->moreFrag(), false );
190 BOOST_CHECK_EQUAL( p->retry(), false );
191 BOOST_CHECK_EQUAL( p->pwrMgt(), false );
192 BOOST_CHECK_EQUAL( p->moreData(), false );
193 BOOST_CHECK_EQUAL( p->protectedFrame(), false );
194 BOOST_CHECK_EQUAL( p->order(), false );
196 BOOST_CHECK_EQUAL( p->duration(), 0u );
198 BOOST_CHECK_EQUAL( p->receiverAddress().value(),
199 senf::MACAddress::from_string("00:0b:6b:57:06:b0") );
202 /* test parser with creating an ACK frame*/
203 SENF_AUTO_UNIT_TEST(WLANPacket_ctrlFrame_create)
205 senf::WLANPacket_CtrlFrame p (senf::WLANPacket_CtrlFrame::create()) ;
206 p->receiverAddress() = senf::MACAddress::from_string("00:1a:4d:3e:c7:5c");
209 BOOST_CHECK_EQUAL( p->type(), 1u);
210 BOOST_CHECK_EQUAL( p->subtype(), 13u);
213 ///////////////////////////////cc.e////////////////////////////////////////
219 // c-file-style: "senf"
220 // indent-tabs-mode: nil
221 // ispell-local-dictionary: "american"
222 // compile-command: "scons -u test"
223 // comment-column: 40