summaryrefslogtreecommitdiff
authormax <max>2003-02-12 20:49:39 (UTC)
committer max <max>2003-02-12 20:49:39 (UTC)
commitdc326e87d4a958ee49210fff9d03967f8a183242 (patch) (unidiff)
tree618a8c9757ad4ed6108963ba06dedd30d8c41588
parent421f7d634a3b5d343834cfa1410d674ff78cf5b8 (diff)
downloadopie-dc326e87d4a958ee49210fff9d03967f8a183242.zip
opie-dc326e87d4a958ee49210fff9d03967f8a183242.tar.gz
opie-dc326e87d4a958ee49210fff9d03967f8a183242.tar.bz2
fix const char
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--noncore/net/wellenreiter/libwellenreiter/source/cardmode.cc8
1 files changed, 4 insertions, 4 deletions
diff --git a/noncore/net/wellenreiter/libwellenreiter/source/cardmode.cc b/noncore/net/wellenreiter/libwellenreiter/source/cardmode.cc
index cf50d8c..626b28c 100644
--- a/noncore/net/wellenreiter/libwellenreiter/source/cardmode.cc
+++ b/noncore/net/wellenreiter/libwellenreiter/source/cardmode.cc
@@ -1,312 +1,312 @@
1/* 1/*
2 * Set card modes for sniffing 2 * Set card modes for sniffing
3 * 3 *
4 * $Id$ 4 * $Id$
5 */ 5 */
6 6
7#include "cardmode.hh" 7#include "cardmode.hh"
8#include "wl_log.hh" 8#include "wl_log.hh"
9 9
10/* main card into monitor function */ 10/* main card into monitor function */
11int card_into_monitormode (pcap_t **orighandle, const char *device, int cardtype) 11int card_into_monitormode (pcap_t **orighandle, const char *device, int cardtype)
12{ 12{
13 char CiscoRFMON[35] = "/proc/driver/aironet/"; 13 char CiscoRFMON[35] = "/proc/driver/aironet/";
14 FILE *CISCO_CONFIG_FILE; 14 FILE *CISCO_CONFIG_FILE;
15 15
16 /* Checks if we have a device to sniff on */ 16 /* Checks if we have a device to sniff on */
17 if(device == NULL) 17 if(device == NULL)
18 { 18 {
19 wl_logerr("No device given"); 19 wl_logerr("No device given");
20 return 0; 20 return 0;
21 } 21 }
22 22
23 /* Setting the promiscous and up flag to the interface */ 23 /* Setting the promiscous and up flag to the interface */
24 if (!card_set_promisc_up(device)) 24 if (!card_set_promisc_up(device))
25 { 25 {
26 wl_logerr("Cannot set interface to promisc mode"); 26 wl_logerr("Cannot set interface to promisc mode");
27 return 0; 27 return 0;
28 } 28 }
29 wl_loginfo("Interface set to promisc mode"); 29 wl_loginfo("Interface set to promisc mode");
30 30
31 /* Check the cardtype and executes the commands to go into monitor mode */ 31 /* Check the cardtype and executes the commands to go into monitor mode */
32 if (cardtype == CARD_TYPE_CISCO) 32 if (cardtype == CARD_TYPE_CISCO)
33 { 33 {
34 /* bring the sniffer into rfmon mode */ 34 /* bring the sniffer into rfmon mode */
35 snprintf(CiscoRFMON, sizeof(CiscoRFMON) - 1, DEFAULT_PATH, device); 35 snprintf(CiscoRFMON, sizeof(CiscoRFMON) - 1, DEFAULT_PATH, device);
36 if((CISCO_CONFIG_FILE = fopen(CiscoRFMON,"w")) == NULL) 36 if((CISCO_CONFIG_FILE = fopen(CiscoRFMON,"w")) == NULL)
37 { 37 {
38 wl_logerr("Cannot open config file: %s", strerror(errno)); 38 wl_logerr("Cannot open config file: %s", strerror(errno));
39 return 0; 39 return 0;
40 } 40 }
41 fputs ("Mode: r",CISCO_CONFIG_FILE); 41 fputs ("Mode: r",CISCO_CONFIG_FILE);
42 fputs ("Mode: y",CISCO_CONFIG_FILE); 42 fputs ("Mode: y",CISCO_CONFIG_FILE);
43 fputs ("XmitPower: 1",CISCO_CONFIG_FILE); 43 fputs ("XmitPower: 1",CISCO_CONFIG_FILE);
44 fclose(CISCO_CONFIG_FILE); 44 fclose(CISCO_CONFIG_FILE);
45 } 45 }
46 else if (cardtype == CARD_TYPE_NG) 46 else if (cardtype == CARD_TYPE_NG)
47 { 47 {
48 char wlanngcmd[80]; 48 char wlanngcmd[80];
49 snprintf(wlanngcmd, sizeof(wlanngcmd) - 1, "$(which wlanctl-ng) %s lnxreq_wlansniff channel=%d enable=true", device, 1); 49 snprintf(wlanngcmd, sizeof(wlanngcmd) - 1, "$(which wlanctl-ng) %s lnxreq_wlansniff channel=%d enable=true", device, 1);
50 if (system(wlanngcmd) != 0) 50 if (system(wlanngcmd) != 0)
51 { 51 {
52 wl_logerr("Could not set %s in raw mode, check cardtype", device); 52 wl_logerr("Could not set %s in raw mode, check cardtype", device);
53 return 0; 53 return 0;
54 } 54 }
55 } 55 }
56 else if (cardtype == CARD_TYPE_HOSTAP) 56 else if (cardtype == CARD_TYPE_HOSTAP)
57 { 57 {
58 int skfd; 58 int skfd;
59 skfd = socket(AF_INET, SOCK_STREAM, 0); 59 skfd = socket(AF_INET, SOCK_STREAM, 0);
60 struct iwreq wrq; 60 struct iwreq wrq;
61 wrq.u.mode = IW_MODE_MONITOR; 61 wrq.u.mode = IW_MODE_MONITOR;
62 62
63 if(iw_set_ext(skfd,device,SIOCSIWMODE,&wrq)<0) 63 if(iw_set_ext(skfd,(char *) device,SIOCSIWMODE,&wrq)<0)
64 { 64 {
65 wl_logerr("Could not set hostap card %s to raw mode, check cardtype", device); 65 wl_logerr("Could not set hostap card %s to raw mode, check cardtype", device);
66 return 0; 66 return 0;
67 } 67 }
68 else 68 else
69 { 69 {
70 wl_loginfo("Successfully set hostap card %s into raw mode",device); 70 wl_loginfo("Successfully set hostap card %s into raw mode",device);
71 return 1; 71 return 1;
72 } 72 }
73 return 1; 73 return 1;
74 } 74 }
75 else if (cardtype == CARD_TYPE_ORINOCCO ) 75 else if (cardtype == CARD_TYPE_ORINOCCO )
76 { 76 {
77 if (!card_set_channel (device, 1, CARD_TYPE_ORINOCCO)) 77 if (!card_set_channel (device, 1, CARD_TYPE_ORINOCCO))
78 { 78 {
79 wl_logerr("Could not set %s in raw mode, check cardtype", device); 79 wl_logerr("Could not set %s in raw mode, check cardtype", device);
80 return 0; 80 return 0;
81 } 81 }
82 else 82 else
83 { 83 {
84 wl_loginfo("Successfully set %s into raw mode",device); 84 wl_loginfo("Successfully set %s into raw mode",device);
85 } 85 }
86 } 86 }
87 87
88 /* Setting the promiscous and up flag to the interface */ 88 /* Setting the promiscous and up flag to the interface */
89 if (!card_check_rfmon_datalink(device)) 89 if (!card_check_rfmon_datalink(device))
90 { 90 {
91 wl_logerr("Cannot set interface to rfmon mode"); 91 wl_logerr("Cannot set interface to rfmon mode");
92 return 0; 92 return 0;
93 } 93 }
94 else 94 else
95 { 95 {
96 wl_loginfo("Interface set to rfmon mode"); 96 wl_loginfo("Interface set to rfmon mode");
97 } 97 }
98 return 1; 98 return 1;
99} 99}
100 100
101/* Check card is in the rfmon mode */ 101/* Check card is in the rfmon mode */
102int card_check_rfmon_datalink (const char *device) 102int card_check_rfmon_datalink (const char *device)
103{ 103{
104 int datalinktype=0; 104 int datalinktype=0;
105 pcap_t *phandle; 105 pcap_t *phandle;
106 phandle = pcap_open_live(device, 65,0,0,NULL); 106 phandle = pcap_open_live((char *)device, 65,0,0,NULL);
107 datalinktype = pcap_datalink (phandle); 107 datalinktype = pcap_datalink (phandle);
108 pcap_close(phandle); 108 pcap_close(phandle);
109 109
110 if (datalinktype != DLT_IEEE802_11) /* Rawmode is IEEE802_11 */ 110 if (datalinktype != DLT_IEEE802_11) /* Rawmode is IEEE802_11 */
111 { 111 {
112 return 0; 112 return 0;
113 } 113 }
114 else 114 else
115 { 115 {
116 wl_loginfo("Your successfully listen on %s in 802.11 raw mode", device); 116 wl_loginfo("Your successfully listen on %s in 802.11 raw mode", device);
117 return 1; 117 return 1;
118 } 118 }
119} 119}
120 120
121/* Set card into promisc mode */ 121/* Set card into promisc mode */
122int card_set_promisc_up (const char *device) 122int card_set_promisc_up (const char *device)
123{ 123{
124 int err; 124 int err;
125 /* First generate a socket to use with iocalls */ 125 /* First generate a socket to use with iocalls */
126 int fd = socket(AF_INET, SOCK_DGRAM, 0); 126 int fd = socket(AF_INET, SOCK_DGRAM, 0);
127 if (fd < 0) 127 if (fd < 0)
128 { 128 {
129 /* In case of an error */ 129 /* In case of an error */
130 perror("socket"); 130 perror("socket");
131 return 0; 131 return 0;
132 } 132 }
133 133
134 /* Fill an empty an interface structure with the right flags (UP and Promsic) */ 134 /* Fill an empty an interface structure with the right flags (UP and Promsic) */
135 struct ifreq ifr; 135 struct ifreq ifr;
136 strncpy(ifr.ifr_name, device,10); 136 strncpy(ifr.ifr_name, device,10);
137 ifr.ifr_flags = IFF_UP + IFF_PROMISC; 137 ifr.ifr_flags = IFF_UP + IFF_PROMISC;
138 err = ioctl(fd, SIOCSIFFLAGS, &ifr); 138 err = ioctl(fd, SIOCSIFFLAGS, &ifr);
139 if (err < 0) 139 if (err < 0)
140 { 140 {
141 perror("Could not access the interface, "); 141 perror("Could not access the interface, ");
142 close(fd); 142 close(fd);
143 return 0; 143 return 0;
144 } 144 }
145 145
146 /* Get the informations back from the interface to check if the flags are correct */ 146 /* Get the informations back from the interface to check if the flags are correct */
147 strncpy(ifr.ifr_name, device,10); 147 strncpy(ifr.ifr_name, device,10);
148 err = ioctl(fd, SIOCGIFFLAGS, &ifr); 148 err = ioctl(fd, SIOCGIFFLAGS, &ifr);
149 if (err < 0) 149 if (err < 0)
150 { 150 {
151 perror("Could not access the interface, "); 151 perror("Could not access the interface, ");
152 close(fd); 152 close(fd);
153 return 0; 153 return 0;
154 } 154 }
155 155
156 if(ifr.ifr_flags && IFF_UP) 156 if(ifr.ifr_flags && IFF_UP)
157 { 157 {
158 close(fd); 158 close(fd);
159 return 1; 159 return 1;
160 } 160 }
161 else 161 else
162 { 162 {
163 wl_logerr("Could not set promisc flag on %d", device); 163 wl_logerr("Could not set promisc flag on %d", device);
164 close(fd); 164 close(fd);
165 return 0; 165 return 0;
166 } 166 }
167} 167}
168 168
169/* Set channel (Wireless frequency) of the device */ 169/* Set channel (Wireless frequency) of the device */
170int card_set_channel (const char *device, int channel, int cardtype) 170int card_set_channel (const char *device, int channel, int cardtype)
171{ 171{
172 if (cardtype == CARD_TYPE_CISCO || cardtype == CARD_TYPE_NG) 172 if (cardtype == CARD_TYPE_CISCO || cardtype == CARD_TYPE_NG)
173 { 173 {
174 /* Cisco and wlan-ng drivers don't need channelswitching */ 174 /* Cisco and wlan-ng drivers don't need channelswitching */
175 return 1; 175 return 1;
176 } 176 }
177 /* If it is a lucent orinocco card */ 177 /* If it is a lucent orinocco card */
178 else if (cardtype == CARD_TYPE_ORINOCCO) 178 else if (cardtype == CARD_TYPE_ORINOCCO)
179 { 179 {
180 int fd; 180 int fd;
181 //Wireless tools structure for the iocalls 181 //Wireless tools structure for the iocalls
182 struct iwreq ireq; 182 struct iwreq ireq;
183 int *ptr; 183 int *ptr;
184 /* Socket needed to use the iocall to */ 184 /* Socket needed to use the iocall to */
185 fd = socket(AF_INET, SOCK_STREAM, 0); 185 fd = socket(AF_INET, SOCK_STREAM, 0);
186 186
187 if ( fd == -1 ) { 187 if ( fd == -1 ) {
188 return -1; 188 return -1;
189 } 189 }
190 190
191 ptr = (int *) ireq.u.name; 191 ptr = (int *) ireq.u.name;
192 // This is the monitor mode for 802.11 non-prism header 192 // This is the monitor mode for 802.11 non-prism header
193 ptr[0] = 2; 193 ptr[0] = 2;
194 ptr[1] = channel; 194 ptr[1] = channel;
195 strcpy(ireq.ifr_ifrn.ifrn_name, device); 195 strcpy(ireq.ifr_ifrn.ifrn_name, device);
196 if (ioctl( fd, SIOCIWFIRSTPRIV + 0x8, &ireq)==0) 196 if (ioctl( fd, SIOCIWFIRSTPRIV + 0x8, &ireq)==0)
197 { 197 {
198 /* All was fine... */ 198 /* All was fine... */
199 close(fd); 199 close(fd);
200 wl_loginfo("Set channel %d on interface %s",channel, device); 200 wl_loginfo("Set channel %d on interface %s",channel, device);
201 return 1; 201 return 1;
202 } 202 }
203 else 203 else
204 { 204 {
205 /* iocall does not work */ 205 /* iocall does not work */
206 close(fd); 206 close(fd);
207 wl_logerr("Could not set channel %d on %s, check cardtype",channel, device); 207 wl_logerr("Could not set channel %d on %s, check cardtype",channel, device);
208 return 0; 208 return 0;
209 } 209 }
210 } 210 }
211 /* when it is an hostap card you need another iocall for channel switching */ 211 /* when it is an hostap card you need another iocall for channel switching */
212 else if (cardtype == CARD_TYPE_HOSTAP) 212 else if (cardtype == CARD_TYPE_HOSTAP)
213 { 213 {
214 int skfd; 214 int skfd;
215 skfd = socket(AF_INET, SOCK_STREAM, 0); 215 skfd = socket(AF_INET, SOCK_STREAM, 0);
216 struct iwreq wrq; 216 struct iwreq wrq;
217 iw_float2freq((double) channel, &wrq.u.freq); 217 iw_float2freq((double) channel, &wrq.u.freq);
218 218
219 if(iw_set_ext(skfd,device,SIOCSIWFREQ,&wrq)<0) 219 if(iw_set_ext(skfd,(char *) device,SIOCSIWFREQ,&wrq)<0)
220 { 220 {
221 wl_logerr("Could not set hostap card %s to channel %d", device, channel); 221 wl_logerr("Could not set hostap card %s to channel %d", device, channel);
222 return 0; 222 return 0;
223 } 223 }
224 else 224 else
225 { 225 {
226 wl_loginfo("Successfully set hostap card %s to channel %d", device, channel); 226 wl_loginfo("Successfully set hostap card %s to channel %d", device, channel);
227 return 1; 227 return 1;
228 } 228 }
229 } 229 }
230 /* For undefined situations */ 230 /* For undefined situations */
231 return 0; 231 return 0;
232} 232}
233 233
234 234
235int card_detect_channels (char * device) 235int card_detect_channels (char * device)
236{ 236{
237 int skfd; 237 int skfd;
238 skfd = socket(AF_INET, SOCK_STREAM, 0); 238 skfd = socket(AF_INET, SOCK_STREAM, 0);
239 struct iw_rangerange; 239 struct iw_rangerange;
240 /* Get list of frequencies / channels */ 240 /* Get list of frequencies / channels */
241 printf ("\n hostap card get the frequencies"); 241 printf ("\n hostap card get the frequencies");
242 /* Get list of frequencies / channels */ 242 /* Get list of frequencies / channels */
243 if(iw_get_range_info(skfd, device, &range) < 0) 243 if(iw_get_range_info(skfd, device, &range) < 0)
244 { /* We are failsave if something went wrong, asume only 11 channels */ 244 { /* We are failsave if something went wrong, asume only 11 channels */
245 return 11; 245 return 11;
246 } 246 }
247 else 247 else
248 { 248 {
249 if(range.num_frequency > 0) 249 if(range.num_frequency > 0)
250 { 250 {
251 return range.num_frequency; 251 return range.num_frequency;
252 } 252 }
253 else 253 else
254 { /* We are failsave asume only 11 channels */ 254 { /* We are failsave asume only 11 channels */
255 return 11; 255 return 11;
256 } 256 }
257 } 257 }
258 258
259} /* End of card_detect_channels */ 259} /* End of card_detect_channels */
260 260
261int iw_get_range_info(int skfd, const char * ifname, iw_range * range) 261int iw_get_range_info(int skfd, const char * ifname, iw_range * range)
262{ 262{
263 struct iwreq wrq2; 263 struct iwreq wrq2;
264 char buffer[sizeof(iw_range) * 2];/* Large enough */ 264 char buffer[sizeof(iw_range) * 2];/* Large enough */
265 265
266 /* Cleanup */ 266 /* Cleanup */
267 memset(buffer, 0, sizeof(buffer)); 267 memset(buffer, 0, sizeof(buffer));
268 wrq2.u.data.pointer = (caddr_t) buffer; 268 wrq2.u.data.pointer = (caddr_t) buffer;
269 wrq2.u.data.length = sizeof(buffer); 269 wrq2.u.data.length = sizeof(buffer);
270 wrq2.u.data.flags = 0; 270 wrq2.u.data.flags = 0;
271 271
272 if(iw_get_ext(skfd, ifname, SIOCGIWRANGE, &wrq2) < 0) 272 if(iw_get_ext(skfd, (char *)ifname, SIOCGIWRANGE, &wrq2) < 0)
273 { 273 {
274 wl_logerr("Could not get the range from the interface"); 274 wl_logerr("Could not get the range from the interface");
275 return(-1); 275 return(-1);
276 } 276 }
277 else 277 else
278 { 278 {
279 /* Copy stuff at the right place, ignore extra */ 279 /* Copy stuff at the right place, ignore extra */
280 memcpy((char *) range, buffer, sizeof(iw_range)); 280 memcpy((char *) range, buffer, sizeof(iw_range));
281 return 0; 281 return 0;
282 } 282 }
283} 283}
284 284
285/*------------------------------------------------------------------*/ 285/*------------------------------------------------------------------*/
286/* 286/*
287 * Convert our internal representation of frequencies to a floating point. 287 * Convert our internal representation of frequencies to a floating point.
288 */ 288 */
289double iw_freq2float(iw_freq * in) 289double iw_freq2float(iw_freq * in)
290{ 290{
291 int i; 291 int i;
292 double res = (double) in->m; 292 double res = (double) in->m;
293 for(i = 0; i < in->e; i++) 293 for(i = 0; i < in->e; i++)
294 res *= 10; 294 res *= 10;
295 return(res); 295 return(res);
296} 296}
297 297
298 298
299 void iw_float2freq(double in, iw_freq *out) 299 void iw_float2freq(double in, iw_freq *out)
300{ 300{
301 /* Version without libm : slower */ 301 /* Version without libm : slower */
302 out->e = 0; 302 out->e = 0;
303 while(in > 1e9) 303 while(in > 1e9)
304 { 304 {
305 in /= 10; 305 in /= 10;
306 out->e++; 306 out->e++;
307 } 307 }
308 out->m = (long) in; 308 out->m = (long) in;
309} 309}
310 310
311 311
312 312