Date: Tue, 24 Jun 2003 17:21:06 +0930 From: Benjamin Close <cisbjc@cs.unisa.edu.au> To: freebsd-mobile@freebsd.org Subject: Re: bsd-airtools and 5.1-REL Message-ID: <3EF802EA.8060308@cs.unisa.edu.au> In-Reply-To: <200306221647.41942.cbiffle@safety.net> References: <03e301c33768$ae140560$0400a8c0@orion.local> <200306221647.41942.cbiffle@safety.net>
next in thread | previous in thread | raw e-mail | index | archive | help
This is a multi-part message in MIME format. --------------010706090805000305080903 Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit Cliff L. Biffle wrote: >On Friday 20 June 2003 01:15 pm, Marcin Kot wrote: > > >>Has anyone been able to get bsd-airtools to work in 5.1-release? Each time >>i try dstumbler it outputs this error: >>'error: unable to ioctl device socket: Input/output error'. I'm using a >>orinoco wavelan silver wireless card. >> >> > >The interface to the wi driver has changed. A few ioctls, etc. This is a >result of pulling the 802.11 code out of the wi driver and into a separate >802.11 networks layer. > >I and a few others on the current- list wrote preliminary patches to get >dstumbler working, but none of us could get the full functionality. Though, >admittedly, none of us really gave it our all.... Another fellow said he'd >gotten the program to work completely, though his patches had no effect for >me, etc. > > That other fellow would be me. I've been hacking around at it in my spare time and have almost got it fully working (over looked something last time). The attached patch gets it working and displaying ap's although they aren't always valid. For anyone with more spare time that me, there's a bug in wistat.c:wi_parse_scan_ap just can't figure out where. Those using -current can still use dstumbler without the patches just run: dstumbler wi0 -s although this may not be as effective as dstumbler polls the card in 'is there an ap mode' rather than asking the card for the AP's it sees. Cheers, Benjamin -- 3D Research Associate / System Administrator +61 8 8302 3669 School of Computer and Information Science Room D1-07, ML Campus University of South Australia Mawson Lakes Blvd. Benjamin.Close@cs.unisa.edu.au South Australia, 5095 F00D C83D 5F7E 5561 DF91 B74D E602 CAA3 4842 B5B4 --------------010706090805000305080903 Content-Type: text/plain; name="bsd-airtools-dstumbler.diff" Content-Transfer-Encoding: 7bit Content-Disposition: inline; filename="bsd-airtools-dstumbler.diff" diff -ur /usr/ports/net/bsd-airtools/work/bsd-airtools/dstumbler/Makefile ./Makefile --- /usr/ports/net/bsd-airtools/work/bsd-airtools/dstumbler/Makefile Tue Jun 24 17:14:17 2003 +++ ./Makefile Tue Jun 24 15:02:42 2003 @@ -1,5 +1,5 @@ CC = gcc -CFLAGS = -Wall -I/usr/local/include +CFLAGS = -Wall -I/usr/local/include -ggdb TARGET = dstumbler LDFLAGS = -L/usr/local/lib -lncurses -lpcap PREFIX = /usr/local diff -ur /usr/ports/net/bsd-airtools/work/bsd-airtools/dstumbler/dstumbler.h ./dstumbler.h --- /usr/ports/net/bsd-airtools/work/bsd-airtools/dstumbler/dstumbler.h Tue Jun 24 17:14:17 2003 +++ ./dstumbler.h Tue Jun 24 16:00:00 2003 @@ -48,6 +48,7 @@ #include <sys/termios.h> #include <dev/wi/if_wavelan_ieee.h> +#include <net/if_ieee80211.h> #ifdef __OpenBSD__ #include <curses.h> @@ -237,7 +238,9 @@ #ifdef __FreeBSD__ #define htole16(x) (x) #define le16toh(x) (x) +#if __FreeBSD_version > 500112 #define O_SYNC O_FSYNC +#endif #else #ifdef __OpenBSD__ #define le16toh(x) letoh16(x) diff -ur /usr/ports/net/bsd-airtools/work/bsd-airtools/dstumbler/wistat.c ./wistat.c --- /usr/ports/net/bsd-airtools/work/bsd-airtools/dstumbler/wistat.c Sat Jan 12 01:35:43 2002 +++ ./wistat.c Tue Jun 24 17:12:30 2003 @@ -119,13 +119,12 @@ int wi_parse_scan_ap(const char *iface, struct aps_s *aps, int num) { - static int scanbuf_len; - static u_char scanbuf[1596]; + static int ap_count = 0; + static struct wi_apinfo *ap_info; - int i, offset; + struct wi_apinfo *w; struct wi_req wreq; struct wi_scan_p2_hdr *res_h; - struct wi_scan_res *res; if(nodevice || monmode || !scanmode) return -1; @@ -147,41 +146,33 @@ if(res_h->wi_reason == 0) return -1; - offset = 4; } - else - offset = 0; - - memcpy((char *)scanbuf, (char *)wreq.wi_val + offset, - (wreq.wi_len * 2) - offset); - scanbuf_len = ((wreq.wi_len * 2) - offset) / - (prism2 ? WI_PRISM2_RES_SIZE : WI_WAVELAN_RES_SIZE); + ap_count = *(int *)wreq.wi_val; + ap_info = (struct wi_apinfo *)(((char *)&wreq.wi_val) + sizeof(int)); setscanreq(iface); } - if(num >= scanbuf_len) + if(num >= ap_count) return -1; - res = (struct wi_scan_res *)((char *)scanbuf + - ((prism2 ? WI_PRISM2_RES_SIZE : WI_WAVELAN_RES_SIZE) * num)); - - strncpy(aps->ssid, res->wi_ssid, le16toh(res->wi_ssid_len)); - aps->ssid[le16toh(res->wi_ssid_len)] = '\0'; + w = ap_info + num; - aps->chan = le16toh(res->wi_chan); - aps->quality[2] = MAX(le16toh(res->wi_noise), 27); - aps->quality[1] = MAX(le16toh(res->wi_signal), 27); + strncpy(aps->ssid, w->name, le16toh(w->namelen)); + aps->ssid[le16toh(w->namelen)] = '\0'; + aps->chan = le16toh(w->channel); + aps->quality[2] = MAX(le16toh(w->noise), 27); + aps->quality[1] = MAX(le16toh(w->signal), 27); aps->quality[0] = aps->quality[1] - aps->quality[2]; - memcpy(aps->bssid, res->wi_bssid, MACSIZE); - aps->interval = le16toh(res->wi_interval); + memcpy(aps->bssid, w->bssid, MACSIZE); + aps->interval = le16toh(w->interval); - if(le16toh(res->wi_capinfo) & WI_CAPINFO_ESS) + if(le16toh(w->capinfo) & IEEE80211_CAPINFO_ESS) aps->adhoc = 2; - if(le16toh(res->wi_capinfo) & WI_CAPINFO_IBSS) + if(le16toh(w->capinfo) & WI_CAPINFO_IBSS) aps->adhoc = 1; - if(le16toh(res->wi_capinfo) & WI_CAPINFO_PRIV) + if(le16toh(w->capinfo) & IEEE80211_CAPINFO_PRIVACY) aps->weped = 1; else aps->weped = 2; @@ -192,15 +183,17 @@ */ if(prism2) { - for(i = 0; res->wi_srates[i] != 0; i++) - aps->srate = MAX(aps->srate, (res->wi_srates[i] & WI_VAR_SRATES_MASK)); + /** FIXME + for(i = 0; w->rate[i] != 0; i++) + aps->srate = MAX(aps->srate, (w->rate[i] & WI_VAR_SRATES_MASK)); + */ } /* * if we've reached the end of the list of aps, return a 0 so it won't call * us for more aps.. otherwise, keep on going. */ - return(num >= scanbuf_len - 1 ? 0 : 1); + return (num >= ap_count-1 ? 0 : 1); } /* @@ -298,7 +291,9 @@ wreq.wi_val[0] = htole16(*((int *)mem)); break; case WI_RID_OWN_SSID: - wreq.wi_len = MIN((strlen(mem) + 1) / 2, len); + // FIXME: + //wreq.wi_len = MIN((strlen(mem) + 1) / 2, len); + wreq.wi_len = 18; wreq.wi_val[0] = htole16(strlen(mem)); memcpy((char *)&wreq.wi_val[1], mem, strlen(mem)); break; @@ -314,13 +309,14 @@ break; case WI_RID_SCAN_REQ: wreq.wi_len = (prism2 ? 3 : 1); - wreq.wi_type = WI_RID_SCAN_REQ; + wreq.wi_type =(prism2 ? WI_RID_SCAN_REQ : WI_RID_SCAN_APS ); if(prism2) { wreq.wi_val[0] = htole16(0x3FFF); /* set to scan all 14 channels */ wreq.wi_val[1] = htole16(0x000F); /* scan on all 4 rates */ } + break; default: break; --------------010706090805000305080903--
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?3EF802EA.8060308>