summaryrefslogtreecommitdiff
authormax <max>2003-02-16 20:05:29 (UTC)
committer max <max>2003-02-16 20:05:29 (UTC)
commit0a64464dc16e6167402590ea8c30d9d56d9e5c3f (patch) (side-by-side diff)
tree9206bddf8c8815ae35d549adb7eec132e9f38203
parent6c22cd2b118a10fe860c429b5ea012aaf0b99c22 (diff)
downloadopie-0a64464dc16e6167402590ea8c30d9d56d9e5c3f.zip
opie-0a64464dc16e6167402590ea8c30d9d56d9e5c3f.tar.gz
opie-0a64464dc16e6167402590ea8c30d9d56d9e5c3f.tar.bz2
Fixed hostap driver < wireless extension 14
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--noncore/net/wellenreiter/libwellenreiter/source/cardmode.cc2
1 files changed, 1 insertions, 1 deletions
diff --git a/noncore/net/wellenreiter/libwellenreiter/source/cardmode.cc b/noncore/net/wellenreiter/libwellenreiter/source/cardmode.cc
index a57645b..d385df4 100644
--- a/noncore/net/wellenreiter/libwellenreiter/source/cardmode.cc
+++ b/noncore/net/wellenreiter/libwellenreiter/source/cardmode.cc
@@ -45,97 +45,97 @@ int card_into_monitormode (pcap_t **orighandle, const char *device, int cardtype
}
else if (cardtype == CARD_TYPE_NG)
{
char wlanngcmd[80];
snprintf(wlanngcmd, sizeof(wlanngcmd) - 1, "$(which wlanctl-ng) %s lnxreq_wlansniff channel=%d enable=true", device, 1);
if (system(wlanngcmd) != 0)
{
wl_logerr("Could not set %s in raw mode, check cardtype", device);
return 0;
}
}
else if (cardtype == CARD_TYPE_HOSTAP)
{
#if WIRELESS_EXT > 14
// IW_MODE_MONITOR was implemented in Wireless Extensions Version 15
int skfd;
skfd = socket(AF_INET, SOCK_STREAM, 0);
struct iwreq wrq;
wrq.u.mode = IW_MODE_MONITOR;
if(iw_set_ext(skfd,(char *) device,SIOCSIWMODE,&wrq)<0)
{
wl_logerr("Could not set hostap card %s to raw mode, check cardtype", device);
return 0;
}
else
{
wl_loginfo("Successfully set hostap card %s into raw mode",device);
return 1;
}
return 1;
#else
// Wireless Extensions < Version 15 need iwpriv commandos for monitoring
int fd;
//Wireless tools structure for the iocalls
struct iwreq ireq;
int *ptr;
/* Socket needed to use the iocall to */
fd = socket(AF_INET, SOCK_STREAM, 0);
if ( fd == -1 ) {
return -1;
}
ptr = (int *) ireq.u.name;
// This is the monitor mode for 802.11 non-prism header
ptr[0] = 2;
strcpy(ireq.ifr_ifrn.ifrn_name, device);
- if (ioctl( fd, SIOCIWFIRSTPRIV + 4, &ireq)==0)
+ if (ioctl( fd, SIOCDEVPRIVATE, &ireq)==0)
{
/* All was fine... */
close(fd);
wl_loginfo("Set hostap card %s into monitormode",device);
return 1;
}
else
{
/* iocall does not work */
close(fd);
wl_logerr("Could not set hostap card %s into monitormode, check cardtype",device);
return 0;
}
#endif
}
else if (cardtype == CARD_TYPE_ORINOCCO )
{
if (!card_set_channel (device, 1, CARD_TYPE_ORINOCCO))
{
wl_logerr("Could not set %s in raw mode, check cardtype", device);
return 0;
}
else
{
wl_loginfo("Successfully set %s into raw mode",device);
}
}
/* Setting the promiscous and up flag to the interface */
if (!card_check_rfmon_datalink(device))
{
wl_logerr("Cannot set interface to rfmon mode");
return 0;
}
else
{
wl_loginfo("Interface set to rfmon mode");
}
return 1;
}
/* Check card is in the rfmon mode */
int card_check_rfmon_datalink (const char *device)
{
int datalinktype=0;
pcap_t *phandle;
phandle = pcap_open_live((char *)device, 65,0,0,NULL);
datalinktype = pcap_datalink (phandle);