summaryrefslogtreecommitdiff
authormickeyl <mickeyl>2003-02-12 22:38:17 (UTC)
committer mickeyl <mickeyl>2003-02-12 22:38:17 (UTC)
commit4c0fca7a9a99be7b6aad58e93f7a2d99f74b236c (patch) (unidiff)
tree13201d8d8d5d832c0b3ab17ffdfe732261609a89
parentdc326e87d4a958ee49210fff9d03967f8a183242 (diff)
downloadopie-4c0fca7a9a99be7b6aad58e93f7a2d99f74b236c.zip
opie-4c0fca7a9a99be7b6aad58e93f7a2d99f74b236c.tar.gz
opie-4c0fca7a9a99be7b6aad58e93f7a2d99f74b236c.tar.bz2
fix compilation on systems with wireless extensions < V15
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--noncore/net/wellenreiter/libwellenreiter/source/cardmode.cc9
1 files changed, 7 insertions, 2 deletions
diff --git a/noncore/net/wellenreiter/libwellenreiter/source/cardmode.cc b/noncore/net/wellenreiter/libwellenreiter/source/cardmode.cc
index 626b28c..e5a20d6 100644
--- a/noncore/net/wellenreiter/libwellenreiter/source/cardmode.cc
+++ b/noncore/net/wellenreiter/libwellenreiter/source/cardmode.cc
@@ -1,169 +1,174 @@
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#if WIRELESS_EXT < 14
59 skfd = socket(AF_INET, SOCK_STREAM, 0); 59 int skfd;
60 skfd = socket(AF_INET, SOCK_STREAM, 0);
60 struct iwreq wrq; 61 struct iwreq wrq;
61 wrq.u.mode = IW_MODE_MONITOR; 62 wrq.u.mode = IW_MODE_MONITOR;
62 63
63 if(iw_set_ext(skfd,(char *) device,SIOCSIWMODE,&wrq)<0) 64 if(iw_set_ext(skfd,(char *) device,SIOCSIWMODE,&wrq)<0)
64 { 65 {
65 wl_logerr("Could not set hostap card %s to raw mode, check cardtype", device); 66 wl_logerr("Could not set hostap card %s to raw mode, check cardtype", device);
66 return 0; 67 return 0;
67 } 68 }
68 else 69 else
69 { 70 {
70 wl_loginfo("Successfully set hostap card %s into raw mode",device); 71 wl_loginfo("Successfully set hostap card %s into raw mode",device);
71 return 1; 72 return 1;
72 } 73 }
73 return 1; 74 return 1;
75#else
76#warning Hi _MAX_, please use a system call for hostap with wireless extensions < 14
77 // TODO: Implement switching HOSTAP into monitor mode with system call
78#endif
74 } 79 }
75 else if (cardtype == CARD_TYPE_ORINOCCO ) 80 else if (cardtype == CARD_TYPE_ORINOCCO )
76 { 81 {
77 if (!card_set_channel (device, 1, CARD_TYPE_ORINOCCO)) 82 if (!card_set_channel (device, 1, CARD_TYPE_ORINOCCO))
78 { 83 {
79 wl_logerr("Could not set %s in raw mode, check cardtype", device); 84 wl_logerr("Could not set %s in raw mode, check cardtype", device);
80 return 0; 85 return 0;
81 } 86 }
82 else 87 else
83 { 88 {
84 wl_loginfo("Successfully set %s into raw mode",device); 89 wl_loginfo("Successfully set %s into raw mode",device);
85 } 90 }
86 } 91 }
87 92
88 /* Setting the promiscous and up flag to the interface */ 93 /* Setting the promiscous and up flag to the interface */
89 if (!card_check_rfmon_datalink(device)) 94 if (!card_check_rfmon_datalink(device))
90 { 95 {
91 wl_logerr("Cannot set interface to rfmon mode"); 96 wl_logerr("Cannot set interface to rfmon mode");
92 return 0; 97 return 0;
93 } 98 }
94 else 99 else
95 { 100 {
96 wl_loginfo("Interface set to rfmon mode"); 101 wl_loginfo("Interface set to rfmon mode");
97 } 102 }
98 return 1; 103 return 1;
99} 104}
100 105
101/* Check card is in the rfmon mode */ 106/* Check card is in the rfmon mode */
102int card_check_rfmon_datalink (const char *device) 107int card_check_rfmon_datalink (const char *device)
103{ 108{
104 int datalinktype=0; 109 int datalinktype=0;
105 pcap_t *phandle; 110 pcap_t *phandle;
106 phandle = pcap_open_live((char *)device, 65,0,0,NULL); 111 phandle = pcap_open_live((char *)device, 65,0,0,NULL);
107 datalinktype = pcap_datalink (phandle); 112 datalinktype = pcap_datalink (phandle);
108 pcap_close(phandle); 113 pcap_close(phandle);
109 114
110 if (datalinktype != DLT_IEEE802_11) /* Rawmode is IEEE802_11 */ 115 if (datalinktype != DLT_IEEE802_11) /* Rawmode is IEEE802_11 */
111 { 116 {
112 return 0; 117 return 0;
113 } 118 }
114 else 119 else
115 { 120 {
116 wl_loginfo("Your successfully listen on %s in 802.11 raw mode", device); 121 wl_loginfo("Your successfully listen on %s in 802.11 raw mode", device);
117 return 1; 122 return 1;
118 } 123 }
119} 124}
120 125
121/* Set card into promisc mode */ 126/* Set card into promisc mode */
122int card_set_promisc_up (const char *device) 127int card_set_promisc_up (const char *device)
123{ 128{
124 int err; 129 int err;
125 /* First generate a socket to use with iocalls */ 130 /* First generate a socket to use with iocalls */
126 int fd = socket(AF_INET, SOCK_DGRAM, 0); 131 int fd = socket(AF_INET, SOCK_DGRAM, 0);
127 if (fd < 0) 132 if (fd < 0)
128 { 133 {
129 /* In case of an error */ 134 /* In case of an error */
130 perror("socket"); 135 perror("socket");
131 return 0; 136 return 0;
132 } 137 }
133 138
134 /* Fill an empty an interface structure with the right flags (UP and Promsic) */ 139 /* Fill an empty an interface structure with the right flags (UP and Promsic) */
135 struct ifreq ifr; 140 struct ifreq ifr;
136 strncpy(ifr.ifr_name, device,10); 141 strncpy(ifr.ifr_name, device,10);
137 ifr.ifr_flags = IFF_UP + IFF_PROMISC; 142 ifr.ifr_flags = IFF_UP + IFF_PROMISC;
138 err = ioctl(fd, SIOCSIFFLAGS, &ifr); 143 err = ioctl(fd, SIOCSIFFLAGS, &ifr);
139 if (err < 0) 144 if (err < 0)
140 { 145 {
141 perror("Could not access the interface, "); 146 perror("Could not access the interface, ");
142 close(fd); 147 close(fd);
143 return 0; 148 return 0;
144 } 149 }
145 150
146 /* Get the informations back from the interface to check if the flags are correct */ 151 /* Get the informations back from the interface to check if the flags are correct */
147 strncpy(ifr.ifr_name, device,10); 152 strncpy(ifr.ifr_name, device,10);
148 err = ioctl(fd, SIOCGIFFLAGS, &ifr); 153 err = ioctl(fd, SIOCGIFFLAGS, &ifr);
149 if (err < 0) 154 if (err < 0)
150 { 155 {
151 perror("Could not access the interface, "); 156 perror("Could not access the interface, ");
152 close(fd); 157 close(fd);
153 return 0; 158 return 0;
154 } 159 }
155 160
156 if(ifr.ifr_flags && IFF_UP) 161 if(ifr.ifr_flags && IFF_UP)
157 { 162 {
158 close(fd); 163 close(fd);
159 return 1; 164 return 1;
160 } 165 }
161 else 166 else
162 { 167 {
163 wl_logerr("Could not set promisc flag on %d", device); 168 wl_logerr("Could not set promisc flag on %d", device);
164 close(fd); 169 close(fd);
165 return 0; 170 return 0;
166 } 171 }
167} 172}
168 173
169/* Set channel (Wireless frequency) of the device */ 174/* Set channel (Wireless frequency) of the device */