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"
28 #include <senf/Packets/Packets.hh>
29 #include <senf/Packets/DefaultBundle/LlcSnapPacket.hh>
31 #include <senf/Utils/auto_unit_test.hh>
32 #include <boost/test/test_tools.hpp>
34 ///////////////////////////////cc.p////////////////////////////////////////
35 /* test parser with a data frame */
36 BOOST_AUTO_UNIT_TEST(WLANPacket_dataFrame_packet)
38 unsigned char data[] = {
39 0x88, 0x01, 0x00, 0x00, 0x00, 0x1a, //header
40 0x4d, 0x3e, 0xc7, 0x5c, 0x00, 0x0b, 0x6b, 0x57,
41 0x06, 0xb0, 0x00, 0x18, 0x4d, 0x6e, 0x78, 0x48,
42 0x30, 0x00, 0x01, 0x00,
43 0xaa, 0xaa, 0x03, 0x00, 0x00, 0x00, 0x08, 0x00, //llc header
46 senf::WLANPacket_DataFrame p (senf::WLANPacket_DataFrame::create(data));
48 BOOST_CHECK_EQUAL( p->version(), 0u );
49 BOOST_CHECK_EQUAL( p->type(), 2u );
50 BOOST_CHECK_EQUAL( p->subtype(), 8u );
51 BOOST_CHECK_EQUAL( p->toDS(), true );
52 BOOST_CHECK_EQUAL( p->fromDS(), false );
53 BOOST_CHECK_EQUAL( p->moreFrag(), false );
54 BOOST_CHECK_EQUAL( p->retry(), false );
55 BOOST_CHECK_EQUAL( p->pwrMgt(), false );
56 BOOST_CHECK_EQUAL( p->moreData(), false );
57 BOOST_CHECK_EQUAL( p->protectedFrame(), false );
58 BOOST_CHECK_EQUAL( p->order(), false );
60 BOOST_CHECK_EQUAL( p->duration(), 0u );
62 BOOST_CHECK_EQUAL( p->destinationAddress().value(),
63 senf::MACAddress::from_string("00:18:4d:6e:78:48") );
64 BOOST_CHECK_EQUAL( p->sourceAddress().value(),
65 senf::MACAddress::from_string("00:0b:6b:57:06:b0") );
66 BOOST_CHECK_EQUAL (p->bssid().value(),
67 senf::MACAddress::from_string("00:1a:4d:3e:c7:5c") );
69 BOOST_CHECK_EQUAL( p->bssid().value(),
70 p->receiverAddress().value() );
71 BOOST_CHECK_EQUAL( p->transmitterAddress().value(),
72 p->sourceAddress().value() );
74 BOOST_CHECK_EQUAL( p->sequenceNumber(), 3u );
75 BOOST_CHECK_EQUAL( p->fragmentNumber(), 0u );
77 std::ostringstream oss (std::ostringstream::out);
78 SENF_CHECK_NO_THROW( p.dump(oss) );
80 BOOST_REQUIRE( p.next(senf::nothrow) );
81 BOOST_CHECK( p.next().is<senf::LlcSnapPacket>() );
85 /* test parser with creating a data frame*/
86 BOOST_AUTO_UNIT_TEST(WLANPacket_dataFrame_create)
88 senf::WLANPacket_DataFrame p (senf::WLANPacket_DataFrame::create());
90 SENF_CHECK_NO_THROW( p->bssid() = senf::MACAddress::from_string("00:1a:4d:3e:c7:5c") );
91 BOOST_CHECK_EQUAL( p->type(), 2u );
95 /* test parser with a beacon frame */
96 BOOST_AUTO_UNIT_TEST(WLANPacket_beaconFrame_packet)
98 unsigned char data[] = {
99 0x80, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff,
100 0xff, 0xff, 0x00, 0x1a, 0x4d, 0x3e, 0xc7, 0x5c,
101 0x00, 0x1a, 0x4d, 0x3e, 0xc7, 0x5c, 0xe0, 0x12,
102 0x38, 0xa0, 0x86, 0x01, 0x00, 0x00, 0x00, 0x00,
103 0x64, 0x00, 0x01, 0x05, 0x00, 0x05, 0x62, 0x6f,
104 0x78, 0x43, 0x31, 0x01, 0x08, 0x8c, 0x12, 0x98,
105 0x24, 0xb0, 0x48, 0x60, 0x6c, 0x03, 0x01, 0x40,
106 0x05, 0x04, 0x00, 0x01, 0x00, 0x00, 0x07, 0x2a,
107 0x4e, 0x41, 0x49, 0x24, 0x01, 0x11, 0x28, 0x01,
108 0x11, 0x2c, 0x01, 0x11, 0x30, 0x01, 0x11, 0x34,
109 0x01, 0x17, 0x38, 0x01, 0x17, 0x3c, 0x01, 0x17,
110 0x40, 0x01, 0x17, 0x95, 0x01, 0x1e, 0x99, 0x01,
111 0x1e, 0x9d, 0x01, 0x1e, 0xa1, 0x01, 0x1e, 0xa5,
112 0x01, 0x1e, 0x20, 0x01, 0x00, 0xdd, 0x18, 0x00,
113 0x50, 0xf2, 0x02, 0x01, 0x01, 0x81, 0x00, 0x02,
114 0xa3, 0x40, 0x00, 0x27, 0xa4, 0x00, 0x00, 0x42,
115 0x43, 0x5e, 0x00, 0x62, 0x32, 0x2f, 0x00, 0xa0,
116 0x00, 0xdd, 0x09, 0x00, 0x03, 0x7f, 0x01, 0x01,
117 0x00, 0x24, 0xff, 0x7f,
120 senf::WLANPacket_MgtFrame p (senf::WLANPacket_MgtFrame::create(data));
122 BOOST_CHECK_EQUAL( p->version(), 0u );
123 BOOST_CHECK_EQUAL( p->type(), 0u );
124 BOOST_CHECK_EQUAL( p->subtype(), 8u );
125 BOOST_CHECK_EQUAL( p->toDS(), false );
126 BOOST_CHECK_EQUAL( p->fromDS(), false );
127 BOOST_CHECK_EQUAL( p->moreFrag(), false );
128 BOOST_CHECK_EQUAL( p->retry(), false );
129 BOOST_CHECK_EQUAL( p->pwrMgt(), false );
130 BOOST_CHECK_EQUAL( p->moreData(), false );
131 BOOST_CHECK_EQUAL( p->protectedFrame(), false );
132 BOOST_CHECK_EQUAL( p->order(), false );
133 BOOST_CHECK_EQUAL( p->duration(), 0u );
135 BOOST_CHECK_EQUAL( p->destinationAddress().value(),
136 senf::MACAddress::from_string("ff:ff:ff:ff:ff:ff") );
137 BOOST_CHECK_EQUAL( p->sourceAddress().value(),
138 senf::MACAddress::from_string("00:1a:4d:3e:c7:5c") );
139 BOOST_CHECK_EQUAL( p->bssid().value(),
140 senf::MACAddress::from_string("00:1a:4d:3e:c7:5c") );
142 BOOST_CHECK_EQUAL( p->sequenceNumber(), 302u );
143 BOOST_CHECK_EQUAL( p->fragmentNumber(), 0u );
147 /* test parser with creating a beacon frame*/
148 BOOST_AUTO_UNIT_TEST(WLANPacket_mgtFrame_create)
150 senf::WLANPacket_MgtFrame p (senf::WLANPacket_MgtFrame::create());
153 p->destinationAddress() = senf::MACAddress::from_string("ff:ff:ff:ff:ff:ff")
156 p->sourceAddress() = senf::MACAddress::from_string("00:1a:4d:3e:c7:5c")
159 p->bssid() = senf::MACAddress::from_string("00:1a:4d:3e:c7:5c")
162 BOOST_CHECK_EQUAL( p->type(), 0u );
166 /* test parser with an ACK frame*/
167 BOOST_AUTO_UNIT_TEST(WLANPacket_ctrlFrame_packet)
169 unsigned char data[] = {
170 0xd4, 0x00, 0x00, 0x00,
171 0x00, 0x0b, 0x6b, 0x57, 0x06, 0xb0,
172 0x4f, 0xda, // What is this ?
175 senf::WLANPacket_CtrlFrame p (senf::WLANPacket_CtrlFrame::create(data));
177 BOOST_CHECK_EQUAL( p->version(), 0u );
178 BOOST_CHECK_EQUAL( p->type(), 1u );
179 BOOST_CHECK_EQUAL( p->subtype(), 13u );
180 BOOST_CHECK_EQUAL( p->toDS(), false );
181 BOOST_CHECK_EQUAL( p->fromDS(), false );
182 BOOST_CHECK_EQUAL( p->moreFrag(), false );
183 BOOST_CHECK_EQUAL( p->retry(), false );
184 BOOST_CHECK_EQUAL( p->pwrMgt(), false );
185 BOOST_CHECK_EQUAL( p->moreData(), false );
186 BOOST_CHECK_EQUAL( p->protectedFrame(), false );
187 BOOST_CHECK_EQUAL( p->order(), false );
189 BOOST_CHECK_EQUAL( p->duration(), 0u );
191 BOOST_CHECK_EQUAL( p->receiverAddress().value(),
192 senf::MACAddress::from_string("00:0b:6b:57:06:b0") );
195 /* test parser with creating an ACK frame*/
196 BOOST_AUTO_UNIT_TEST(WLANPacket_ctrlFrame_create)
198 senf::WLANPacket_CtrlFrame p (senf::WLANPacket_CtrlFrame::create()) ;
199 p->receiverAddress() = senf::MACAddress::from_string("00:1a:4d:3e:c7:5c");
201 BOOST_CHECK_EQUAL( p->type(), 1u);
202 BOOST_CHECK_EQUAL( p->subtype(), 13u);
209 // c-file-style: "senf"
210 // indent-tabs-mode: nil
211 // ispell-local-dictionary: "american"
212 // compile-command: "scons -u test"
213 // comment-column: 40