summaryrefslogtreecommitdiff
path: root/noncore
Side-by-side diff
Diffstat (limited to 'noncore') (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
@@ -71,14 +71,42 @@ int card_into_monitormode (pcap_t **orighandle, const char *device, int cardtype
{
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))
{