really reuse the dns-tunnel
[oweals/gnunet.git] / src / transport / plugin_transport_wlan.h
1 /*
2  This file is part of GNUnet
3  (C) 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 Christian Grothoff (and other contributing authors)
4
5  GNUnet is free software; you can redistribute it and/or modify
6  it under the terms of the GNU General Public License as published
7  by the Free Software Foundation; either version 3, or (at your
8  option) any later version.
9
10  GNUnet is distributed in the hope that it will be useful, but
11  WITHOUT ANY WARRANTY; without even the implied warranty of
12  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
13  General Public License for more details.
14
15  You should have received a copy of the GNU General Public License
16  along with GNUnet; see the file COPYING.  If not, write to the
17  Free Software Foundation, Inc., 59 Temple Place - Suite 330,
18  Boston, MA 02111-1307, USA.
19  */
20
21 /**
22  * @file transport/plugin_transport_wlan.h
23  * @brief header for transport plugin and the helper for wlan
24  * @author David Brodski
25  */
26
27 #ifndef PLUGIN_TRANSPORT_WLAN
28 #define PLUGIN_TRANSPORT_WLAN
29
30 #include <stdint.h>
31 #include "gnunet_common.h"
32
33 struct MacAddress
34 {
35   u_int8_t mac[6];
36 };
37
38 struct Wlan_Helper_Control_Message
39 {
40   struct GNUNET_MessageHeader hdr;
41   struct MacAddress mac;
42 };
43
44
45 /**
46  * Header for messages which need fragmentation
47  */
48 struct WlanHeader
49 {
50
51   struct GNUNET_MessageHeader header;
52
53   /**
54    * checksum/error correction
55    */
56   uint32_t crc GNUNET_PACKED;
57
58   /**
59    * To whom are we talking to (set to our identity
60    * if we are still waiting for the welcome message)
61    */
62   struct GNUNET_PeerIdentity target;
63
64   /**
65    *  Where the packet came from
66    */
67   struct GNUNET_PeerIdentity source;
68
69 // followed by payload
70
71 };
72
73 /* Wlan IEEE80211 header default */
74 //Informations (in German) http://www.umtslink.at/content/WLAN_macheader-196.html
75 static const uint8_t u8aIeeeHeader[] =
76   { 0x08, 0x01, // Frame Control 0x08= 00001000 -> | b1,2 = 0 -> Version 0;
77       //      b3,4 = 10 -> Data; b5-8 = 0 -> Normal Data
78       //        0x01 = 00000001 -> | b1 = 1 to DS; b2 = 0 not from DS;
79       0x00, 0x00, // Duration/ID
80       0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, // mac1 - in this case receiver
81       0x13, 0x22, 0x33, 0x44, 0x55, 0x66, // mac2 - in this case sender
82       0x13, 0x22, 0x33, 0x44, 0x55, 0x66, // mac3 - in this case bssid
83       0x10, 0x86, //Sequence Control
84     };
85
86 // gnunet bssid
87 static const struct MacAddress mac_bssid =
88   {
89     { 0x13, 0x22, 0x33, 0x44, 0x55, 0x66 } };
90
91 // broadcast mac
92 static const struct MacAddress bc_all_mac =
93   {
94     { 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF } };
95
96 /* this is the template radiotap header we send packets out with */
97
98 static const uint8_t u8aRadiotapHeader[] =
99   { 0x00, 0x00, // <-- radiotap version
100       0x19, 0x00, // <- radiotap header length
101       0x6f, 0x08, 0x00, 0x00, // <-- bitmap
102       0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // <-- timestamp
103       0x00, // <-- flags (Offset +0x10)
104       0x6c, // <-- rate (0ffset +0x11)
105       0x71, 0x09, 0xc0, 0x00, // <-- channel
106       0xde, // <-- antsignal
107       0x00, // <-- antnoise
108       0x01, // <-- antenna
109     };
110
111 struct Radiotap_Send
112 {
113   /**
114    * wlan send rate
115    */
116   uint8_t rate;
117
118   /**
119    * antenna
120    */
121   uint8_t antenna;
122
123   /**
124    * Transmit power expressed as unitless distance from max power set at factory calibration.
125    * 0 is max power. Monotonically nondecreasing with lower power levels.
126    */
127
128   uint16_t tx_power;
129 };
130
131 // bit field defines for ri_present
132
133 #define has_noise 1
134 #define has_power 2
135 #define has_channel 4
136
137 /**
138  * struct to represent infos gathered form the radiotap fields
139  */
140
141 struct Radiotap_rx
142 {
143   uint32_t ri_present;
144   uint64_t ri_mactime;
145   int32_t ri_power;
146   int32_t ri_noise;
147   uint32_t ri_channel;
148   uint32_t ri_freq;
149   uint32_t ri_rate;
150   uint32_t ri_antenna;
151 };
152
153 /**
154  * Radiotap Header
155  */
156 struct RadiotapHeader
157 {
158   /**
159    * radiotap version
160    */
161   u_int8_t version;
162
163   u_int8_t pad_version;
164
165   /**
166    * radiotap header length
167    */
168   uint16_t length GNUNET_PACKED;
169
170   /**
171    * bitmap, fields present
172    */
173   uint32_t bitmap GNUNET_PACKED;
174
175   /**
176    * timestamp
177    */
178   uint64_t timestamp GNUNET_PACKED;
179
180   /**
181    * radiotap flags
182    */
183   uint8_t flags;
184
185   /**
186    * wlan send rate
187    */
188   uint8_t rate;
189
190   // FIXME: unaligned here, is this OK?
191   /**
192    * Wlan channel
193    */
194   uint32_t channel GNUNET_PACKED;
195
196   /**
197    * antsignal
198    */
199   uint8_t antsignal;
200
201   /**
202    * antnoise
203    */
204   uint8_t antnoise;
205
206   /**
207    * antenna
208    */
209   uint8_t antenna;
210 };
211
212 #endif