summaryrefslogtreecommitdiff
authormax <max>2003-02-13 10:57:19 (UTC)
committer max <max>2003-02-13 10:57:19 (UTC)
commit8402aa0e5c4f55682936a14353ed97611d0e2998 (patch) (side-by-side diff)
treed1c644aefdb49259e8370fd9937fe0d2fe6a95c6
parent0d317f7b6b3efbba86ad6d89c2a512b8f30ed885 (diff)
downloadopie-8402aa0e5c4f55682936a14353ed97611d0e2998.zip
opie-8402aa0e5c4f55682936a14353ed97611d0e2998.tar.gz
opie-8402aa0e5c4f55682936a14353ed97611d0e2998.tar.bz2
Wireless extension < 14
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--noncore/net/wellenreiter/libwellenreiter/source/cardmode.cc32
1 files changed, 30 insertions, 2 deletions
diff --git a/noncore/net/wellenreiter/libwellenreiter/source/cardmode.cc b/noncore/net/wellenreiter/libwellenreiter/source/cardmode.cc
index a512bc5..a57645b 100644
--- a/noncore/net/wellenreiter/libwellenreiter/source/cardmode.cc
+++ b/noncore/net/wellenreiter/libwellenreiter/source/cardmode.cc
@@ -53,50 +53,78 @@ int card_into_monitormode (pcap_t **orighandle, const char *device, int cardtype
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
-#warning Hi _MAX_, please use a system call for hostap with wireless extensions < 15
- // TODO: Implement switching HOSTAP into monitor mode with system call
+ // 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)
+ {
+ /* 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");