wicontrol(8) sync + cleanup

看板DFBSD_submit作者時間21年前 (2004/07/28 03:01), 編輯推噓0(000)
留言0則, 0人參與, 最新討論串1/1
--W/nzBZO5zC0uMSeA Content-Type: text/plain; charset=us-ascii Content-Disposition: inline Hi all, the attached driver syncs wicontrol(8) with current modulo some seemingly unused extensions. Please test :) Joerg --W/nzBZO5zC0uMSeA Content-Type: text/plain; charset=us-ascii Content-Disposition: attachment; filename="wicontrol.diff" Index: Makefile =================================================================== RCS file: /home/joerg/wd/repo/dragonflybsd/src/usr.sbin/wicontrol/Makefile,v retrieving revision 1.2 diff -u -r1.2 Makefile --- Makefile 17 Jun 2003 04:30:04 -0000 1.2 +++ Makefile 27 Jul 2004 10:13:09 -0000 @@ -1,8 +1,9 @@ # $FreeBSD: src/usr.sbin/wicontrol/Makefile,v 1.3.2.1 2001/04/25 12:11:11 ru Exp $ # $DragonFly: src/usr.sbin/wicontrol/Makefile,v 1.2 2003/06/17 04:30:04 dillon Exp $ + PROG= wicontrol MAN= wicontrol.8 -CFLAGS+= -Wall -DWICACHE +WARNS= 6 .include <bsd.prog.mk> Index: wicontrol.8 =================================================================== RCS file: /home/joerg/wd/repo/dragonflybsd/src/usr.sbin/wicontrol/wicontrol.8,v retrieving revision 1.2 diff -u -r1.2 wicontrol.8 --- wicontrol.8 17 Jun 2003 04:30:04 -0000 1.2 +++ wicontrol.8 27 Jul 2004 10:13:01 -0000 @@ -92,10 +92,6 @@ .Ar iface Fl S Ar max_sleep_duration .Nm .Op Fl i -.Ar iface Fl Z -(zero signal cache) -.Nm -.Op Fl i .Ar iface Fl C (display signal cache) .Nm @@ -404,10 +400,6 @@ .Ar max_sleep_interval is specified in milliseconds. The default is 100. -.It Oo Fl i Oc Ar iface Fl Z -Clear the signal strength cache maintained internally by the -.Xr wi 4 -driver. .It Oo Fl i Oc Ar iface Fl C Display the cached signal strength information maintained by the .Xr wi 4 Index: wicontrol.c =================================================================== RCS file: /home/joerg/wd/repo/dragonflybsd/src/usr.sbin/wicontrol/wicontrol.c,v retrieving revision 1.3 diff -u -r1.3 wicontrol.c --- wicontrol.c 8 Aug 2003 04:18:49 -0000 1.3 +++ wicontrol.c 27 Jul 2004 10:12:16 -0000 @@ -29,13 +29,10 @@ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF * THE POSSIBILITY OF SUCH DAMAGE. * - * @(#) Copyright (c) 1997, 1998, 1999 Bill Paul. All rights reserved. - * $FreeBSD: src/usr.sbin/wicontrol/wicontrol.c,v 1.9.2.7 2002/08/03 07:24:17 imp Exp $ - * $DragonFly: src/usr.sbin/wicontrol/wicontrol.c,v 1.3 2003/08/08 04:18:49 dillon Exp $ + * $FreeBSD: src/usr.sbin/wicontrol/wicontrol.c,v 1.37 2003/09/29 06:32:11 imp Exp $ + * $DragonFly$ */ -#include <sys/types.h> -#include <sys/cdefs.h> #include <sys/param.h> #include <sys/socket.h> #include <sys/ioctl.h> @@ -45,10 +42,9 @@ #include <net/if_var.h> #include <net/ethernet.h> -#include <net/if_ieee80211.h> -#include <dev/netif/wi/if_wavelan_ieee.h> -#include <dev/netif/wi/wi_hostap.h> -#include <dev/netif/wi/if_wireg.h> +#include <netproto/802_11/ieee80211.h> +#include <netproto/802_11/ieee80211_ioctl.h> +#include <netproto/802_11/if_wavelan_ieee.h> #include <stdio.h> #include <string.h> @@ -58,7 +54,8 @@ #include <errno.h> #include <err.h> -static void wi_getval(const char *, struct wi_req *); +static int wi_getval(const char *, struct wi_req *); +static int wi_getvalmaybe(const char *, struct wi_req *); static void wi_setval(const char *, struct wi_req *); static void wi_printstr(struct wi_req *); static void wi_setstr(const char *, int, char *); @@ -68,6 +65,7 @@ static void wi_printwords(struct wi_req *); static void wi_printbool(struct wi_req *); static void wi_printhex(struct wi_req *); +static void wi_printaps(struct wi_req *); static void wi_dumpinfo(const char *); static void wi_dumpstats(const char *); static void wi_setkeys(const char *, char *, int); @@ -75,54 +73,17 @@ static void wi_printaplist(const char *); static int wi_hex2int(char); static void wi_str2key(char *, struct wi_key *); -#ifdef WICACHE -static void wi_zerocache(const char *); static void wi_readcache(const char *); -#endif static void usage(const char *); +static int listaps; +static int quiet; -int listaps; - -/* - * Print a value a la the %b format of the kernel's printf - * (ripped screaming from ifconfig/ifconfig.c) - */ -void -printb(s, v, bits) - char *s; - char *bits; - unsigned short v; -{ - int i, any = 0; - char c; - - if (bits && *bits == 8) - printf("%s=%o", s, v); - else - printf("%s=%x", s, v); - bits++; - if (bits) { - putchar('<'); - while ((i = *bits++)) { - if (v & (1 << (i-1))) { - if (any) - putchar(','); - any = 1; - for (; (c = *bits) > 32; bits++) - putchar(c); - } else - for (; *bits > 32; bits++) - ; - } - putchar('>'); - } -} - -static void -wi_getval(const char *iface, struct wi_req *wreq) +static int +_wi_getval(const char *iface, struct wi_req *wreq) { struct ifreq ifr; int s; + int retval; bzero((char *)&ifr, sizeof(ifr)); @@ -130,16 +91,34 @@ ifr.ifr_data = (caddr_t)wreq; s = socket(AF_INET, SOCK_DGRAM, 0); - if (s == -1) err(1, "socket"); + retval = ioctl(s, SIOCGWAVELAN, &ifr); + close(s); - if (ioctl(s, SIOCGWAVELAN, &ifr) == -1) - err(1, "SIOCGWAVELAN"); + return (retval); +} - close(s); +static int +wi_getval(const char *iface, struct wi_req *wreq) +{ + if (_wi_getval(iface, wreq) == -1) { + if (errno != EINPROGRESS) + err(1, "SIOCGWAVELAN"); + return (-1); + } + return (0); +} - return; +static int +wi_getvalmaybe(const char *iface, struct wi_req *wreq) +{ + if (_wi_getval(iface, wreq) == -1) { + if (errno != EINPROGRESS && errno != EINVAL) + err(1, "SIOCGWAVELAN"); + return (-1); + } + return (0); } static void @@ -318,20 +297,25 @@ struct wi_req wreq; struct wi_ltv_keys *keys; struct wi_key *k; + int has_wep; bzero((char *)&wreq, sizeof(wreq)); wreq.wi_len = WI_MAX_DATALEN; wreq.wi_type = WI_RID_WEP_AVAIL; - wi_getval(iface, &wreq); - if (wreq.wi_val[0] == 0) + if (wi_getval(iface, &wreq) == 0) + has_wep = wreq.wi_val[0]; + else + has_wep = 0; + if (!has_wep) errx(1, "no WEP option available on this card"); bzero((char *)&wreq, sizeof(wreq)); wreq.wi_len = WI_MAX_DATALEN; wreq.wi_type = WI_RID_DEFLT_CRYPT_KEYS; - wi_getval(iface, &wreq); + if (wi_getval(iface, &wreq) == -1) + errx(1, "Cannot get default key index"); keys = (struct wi_ltv_keys *)&wreq; keylen = strlen(key); @@ -410,6 +394,32 @@ return; } +static void +wi_printswords(struct wi_req *wreq) +{ + int i; + + printf("[ "); + for (i = 0; i < wreq->wi_len - 1; i++) + printf("%d ", ((int16_t *) wreq->wi_val)[i]); + printf("]"); + + return; +} + +static void +wi_printhexwords(struct wi_req *wreq) +{ + int i; + + printf("[ "); + for (i = 0; i < wreq->wi_len - 1; i++) + printf("%x ", wreq->wi_val[i]); + printf("]"); + + return; +} + void wi_printbool(struct wi_req *wreq) { @@ -443,19 +453,22 @@ void wi_printaplist(const char *iface) { - int prism2, len, i = 0, j; + int prism2, len, i = 0, j, r; struct wi_req wreq; struct wi_scan_p2_hdr *wi_p2_h; struct wi_scan_res *res; - printf("Available APs:\n"); + if (!quiet) + printf("Available APs:\n"); /* first determine if this is a prism2 card or not */ wreq.wi_len = WI_MAX_DATALEN; wreq.wi_type = WI_RID_PRISM2; - wi_getval(iface, &wreq); - prism2 = wreq.wi_val[0]; + if (wi_getval(iface, &wreq) == 0) + prism2 = wreq.wi_val[0]; + else + prism2 = 0; /* send out a scan request */ wreq.wi_len = prism2 ? 3 : 1; @@ -468,17 +481,17 @@ wi_setval(iface, &wreq); - /* - * sleep for 100 milliseconds so there's enough time for the card to - * respond... prism2's take a little longer. - */ - usleep(prism2 ? 500000 : 100000); + do { + /* + * sleep for 100 milliseconds so there's enough time for the card to + * respond... prism2's take a little longer. + */ + usleep(prism2 ? 500000 : 100000); - /* get the scan results */ - wreq.wi_len = WI_MAX_DATALEN; - wreq.wi_type = WI_RID_SCAN_RES; - - wi_getval(iface, &wreq); + /* get the scan results */ + wreq.wi_len = WI_MAX_DATALEN; + wreq.wi_type = WI_RID_SCAN_RES; + } while (wi_getval(iface, &wreq) == -1 && errno == EINPROGRESS); if (prism2) { wi_p2_h = (struct wi_scan_p2_hdr *)wreq.wi_val; @@ -492,49 +505,62 @@ len = prism2 ? WI_PRISM2_RES_SIZE : WI_WAVELAN_RES_SIZE; + if (!quiet) { + int nstations = ((wreq.wi_len * 2) - i) / len; + printf("%d station%s:\n", nstations, nstations == 1 ? "" : "s"); + printf("%-16.16s BSSID Chan SN S N Intrvl Capinfo\n", "SSID"); + } for (; i < (wreq.wi_len * 2) - len; i += len) { res = (struct wi_scan_res *)((char *)wreq.wi_val + i); res->wi_ssid[res->wi_ssid_len] = '\0'; - printf(" %-8s [ %02x:%02x:%02x:%02x:%02x:%02x ] [ %-2d ] " - "[ %d %d %d ] %-3d ", res->wi_ssid, + printf("%-16.16s [ %02x:%02x:%02x:%02x:%02x:%02x ] [ %-2d ] " + "[ %2d %2d %2d ] %3d ", res->wi_ssid, res->wi_bssid[0], res->wi_bssid[1], res->wi_bssid[2], res->wi_bssid[3], res->wi_bssid[4], res->wi_bssid[5], res->wi_chan, res->wi_signal - res->wi_noise, res->wi_signal, res->wi_noise, res->wi_interval); - if (res->wi_capinfo) { + if (!quiet && res->wi_capinfo) { printf("[ "); if (res->wi_capinfo & WI_CAPINFO_ESS) printf("ess "); if (res->wi_capinfo & WI_CAPINFO_IBSS) printf("ibss "); + if (res->wi_capinfo & IEEE80211_CAPINFO_CF_POLLABLE) + printf("cfp "); + if (res->wi_capinfo & IEEE80211_CAPINFO_CF_POLLREQ) + printf("cfpr "); if (res->wi_capinfo & WI_CAPINFO_PRIV) printf("priv "); + if (res->wi_capinfo & IEEE80211_CAPINFO_SHORT_PREAMBLE) + printf("shpr "); + if (res->wi_capinfo & IEEE80211_CAPINFO_PBCC) + printf("pbcc "); + if (res->wi_capinfo & IEEE80211_CAPINFO_CHNL_AGILITY) + printf("chna "); + if (res->wi_capinfo & IEEE80211_CAPINFO_SHORT_SLOTTIME) + printf("shst "); + if (res->wi_capinfo & IEEE80211_CAPINFO_DSSSOFDM) + printf("ofdm "); printf("] "); } - if (prism2) { - printf("\n [ "); - for (j = 0; res->wi_srates[j] != 0; j++) { - res->wi_srates[j] = res->wi_srates[j] & - WI_VAR_SRATES_MASK; - printf("%d.%d ", res->wi_srates[j] / 2, - (res->wi_srates[j] % 2) * 5); + if (prism2 && res->wi_srates[0] != 0) { + printf("\n%16s [ ", ""); + for (j = 0; j < 10 && res->wi_srates[j] != 0; j++) { + r = res->wi_srates[j] & IEEE80211_RATE_VAL; + if (r & 1) + printf("%d.%d", r / 2, (r % 2) * 5); + else + printf("%d", r / 2); + printf("%s ", res->wi_srates[j] & IEEE80211_RATE_BASIC ? "b" : ""); } - printf("] "); - - printf("* %2.1f *", res->wi_rate == 0xa ? 1 : - (res->wi_rate == 0x14 ? 2 : - (res->wi_rate == 0x37 ? 5.5 : - (res->wi_rate == 0x6e ? 11 : 0)))); + printf("]"); } - putchar('\n'); } - - return; } #define WI_STRING 0x01 @@ -542,6 +568,9 @@ #define WI_WORDS 0x03 #define WI_HEXBYTES 0x04 #define WI_KEYSTRUCT 0x05 +#define WI_SWORDS 0x06 +#define WI_HEXWORDS 0x07 +#define WI_REGDOMS 0x08 struct wi_table { int wi_code; @@ -556,10 +585,11 @@ { WI_RID_CURRENT_SSID, WI_STRING, "Current netname (SSID):\t\t\t" }, { WI_RID_DESIRED_SSID, WI_STRING, "Desired netname (SSID):\t\t\t" }, { WI_RID_CURRENT_BSSID, WI_HEXBYTES, "Current BSSID:\t\t\t\t" }, - { WI_RID_CHANNEL_LIST, WI_WORDS, "Channel list:\t\t\t\t" }, + { WI_RID_CHANNEL_LIST, WI_HEXWORDS, "Channel list:\t\t\t\t" }, { WI_RID_OWN_CHNL, WI_WORDS, "IBSS channel:\t\t\t\t" }, { WI_RID_CURRENT_CHAN, WI_WORDS, "Current channel:\t\t\t" }, { WI_RID_COMMS_QUALITY, WI_WORDS, "Comms quality/signal/noise:\t\t" }, + { WI_RID_DBM_COMMS_QUAL, WI_SWORDS, "dBm Coms Quality:\t\t\t" }, { WI_RID_PROMISC, WI_BOOL, "Promiscuous mode:\t\t\t" }, { WI_RID_PROCFRAME, WI_BOOL, "Process 802.11b Frame:\t\t\t" }, { WI_RID_PRISM2, WI_WORDS, "Intersil-Prism2 based card:\t\t" }, @@ -572,6 +602,16 @@ { WI_RID_SYSTEM_SCALE, WI_WORDS, "Access point density:\t\t\t" }, { WI_RID_PM_ENABLED, WI_WORDS, "Power Mgmt (1=on, 0=off):\t\t" }, { WI_RID_MAX_SLEEP, WI_WORDS, "Max sleep time:\t\t\t\t" }, + { WI_RID_PRI_IDENTITY, WI_WORDS, "PRI Identity:\t\t\t\t" }, + { WI_RID_STA_IDENTITY, WI_WORDS, "STA Identity:\t\t\t\t" } , + { WI_RID_CARD_ID, WI_HEXWORDS, "Card ID register:\t\t\t" }, + { WI_RID_TEMP_TYPE, WI_WORDS, "Temperature Range:\t\t\t" }, +#ifdef WI_EXTRA_INFO + { WI_RID_PRI_SUP_RANGE, WI_WORDS, "PRI Sup Range:\t\t\t\t" }, + { WI_RID_CIF_ACT_RANGE, WI_WORDS, "CFI Act Sup Range:\t\t\t" }, + { WI_RID_STA_SUP_RANGE, WI_WORDS, "STA Sup Range:\t\t\t\t" } , + { WI_RID_MFI_ACT_RANGE, WI_WORDS, "MFI Act Sup Range:\t\t\t" } , +#endif { 0, 0, NULL } }; @@ -594,8 +634,10 @@ wreq.wi_len = WI_MAX_DATALEN; wreq.wi_type = WI_RID_WEP_AVAIL; - wi_getval(iface, &wreq); - has_wep = wreq.wi_val[0]; + if (wi_getval(iface, &wreq) == 0) + has_wep = wreq.wi_val[0]; + else + has_wep = 0; w = wi_table; @@ -605,7 +647,8 @@ wreq.wi_len = WI_MAX_DATALEN; wreq.wi_type = w[i].wi_code; - wi_getval(iface, &wreq); + if (wi_getvalmaybe(iface, &wreq) == -1) + continue; printf("%s", w[i].wi_str); switch(w[i].wi_type) { case WI_STRING: @@ -614,6 +657,12 @@ case WI_WORDS: wi_printwords(&wreq); break; + case WI_SWORDS: + wi_printswords(&wreq); + break; + case WI_HEXWORDS: + wi_printhexwords(&wreq); + break; case WI_BOOL: wi_printbool(&wreq); break; @@ -634,7 +683,8 @@ wreq.wi_len = WI_MAX_DATALEN; wreq.wi_type = w[i].wi_code; - wi_getval(iface, &wreq); + if (wi_getval(iface, &wreq) == -1) + continue; printf("%s", w[i].wi_str); switch(w[i].wi_type) { case WI_STRING: @@ -680,7 +730,8 @@ wreq.wi_len = WI_MAX_DATALEN; wreq.wi_type = WI_RID_IFACE_STATS; - wi_getval(iface, &wreq); + if (wi_getval(iface, &wreq) == -1) + errx(1, "Cannot get interface stats"); c = (struct wi_counters *)&wreq.wi_val; @@ -734,6 +785,7 @@ fprintf(stderr, "usage: %s -i iface\n", p); fprintf(stderr, "\t%s -i iface -o\n", p); fprintf(stderr, "\t%s -i iface -l\n", p); + fprintf(stderr, "\t%s -i iface -L\n", p); fprintf(stderr, "\t%s -i iface -t tx rate\n", p); fprintf(stderr, "\t%s -i iface -n network name\n", p); fprintf(stderr, "\t%s -i iface -s station name\n", p); @@ -760,49 +812,51 @@ } static void -wi_dumpstations(const char *iface) +wi_printaps(struct wi_req *wreq) { - struct hostap_getall reqall; - struct hostap_sta stas[WIHAP_MAX_STATIONS]; - struct ifreq ifr; - int i, s; - - bzero(&ifr, sizeof(ifr)); - strlcpy(ifr.ifr_name, iface, sizeof(ifr.ifr_name)); - ifr.ifr_data = (caddr_t) & reqall; - bzero(&reqall, sizeof(reqall)); - reqall.size = sizeof(stas); - reqall.addr = stas; - bzero(&stas, sizeof(stas)); - - s = socket(AF_INET, SOCK_DGRAM, 0); - if (s == -1) - err(1, "socket"); + struct wi_apinfo *w; + int i, j, nstations; - if (ioctl(s, SIOCHOSTAP_GETALL, &ifr) < 0) - err(1, "SIOCHOSTAP_GETALL"); - - printf("%d station%s:\n", reqall.nstations, reqall.nstations>1?"s":""); - for (i = 0; i < reqall.nstations; i++) { - struct hostap_sta *info = &stas[i]; - - printf("%02x:%02x:%02x:%02x:%02x:%02x asid=%04x", - info->addr[0], info->addr[1], info->addr[2], - info->addr[3], info->addr[4], info->addr[5], - info->asid - 0xc001); - printb(", flags", info->flags, HOSTAP_FLAGS_BITS); - printb(", caps", info->capinfo, IEEE80211_CAPINFO_BITS); - printb(", rates", info->rates, WI_RATES_BITS); - if (info->sig_info) - printf(", sig=%d/%d", - info->sig_info >> 8, info->sig_info & 0xff); - putchar('\n'); + nstations = *(int *)wreq->wi_val; + printf("%d station%s:\n", nstations, nstations == 1 ? "" : "s"); + w = (struct wi_apinfo *)(((char *)&wreq->wi_val) + sizeof(int)); + for ( i = 0; i < nstations; i++, w++) { + printf("ap[%d]:\n", i); + if (w->scanreason) { + static const char *scanm[] = { + "Host initiated", + "Firmware initiated", + "Inquiry request from host" + }; + printf("\tScanReason:\t\t\t[ %s ]\n", + scanm[w->scanreason - 1]); + } + printf("\tnetname (SSID):\t\t\t[ "); + for (j = 0; j < w->namelen; j++) { + printf("%c", w->name[j]); + } + printf(" ]\n"); + printf("\tBSSID:\t\t\t\t[ %02x:%02x:%02x:%02x:%02x:%02x ]\n", + w->bssid[0]&0xff, w->bssid[1]&0xff, + w->bssid[2]&0xff, w->bssid[3]&0xff, + w->bssid[4]&0xff, w->bssid[5]&0xff); + printf("\tChannel:\t\t\t[ %d ]\n", w->channel); + printf("\tQuality/Signal/Noise [signal]:\t[ %d / %d / %d ]\n" + "\t [dBm]:\t[ %d / %d / %d ]\n", + w->quality, w->signal, w->noise, + w->quality, w->signal - 149, w->noise - 149); + printf("\tBSS Beacon Interval [msec]:\t[ %d ]\n", w->interval); + printf("\tCapinfo:\t\t\t[ "); + if (w->capinfo & IEEE80211_CAPINFO_ESS) + printf("ESS "); + if (w->capinfo & IEEE80211_CAPINFO_PRIVACY) + printf("WEP "); + printf("]\n"); } } -#ifdef WICACHE static void -wi_zerocache(const char *iface) +wi_dumpstations(const char *iface) { struct wi_req wreq; @@ -810,10 +864,12 @@ errx(1, "must specify interface name"); bzero((char *)&wreq, sizeof(wreq)); - wreq.wi_len = 0; - wreq.wi_type = WI_RID_ZERO_CACHE; + wreq.wi_len = WI_MAX_DATALEN; + wreq.wi_type = WI_RID_READ_APS; - wi_getval(iface, &wreq); + if (wi_getval(iface, &wreq) == -1) + errx(1, "Cannot get stations"); + wi_printaps(&wreq); } static void @@ -831,8 +887,8 @@ bzero((char *)&wreq, sizeof(wreq)); wreq.wi_len = WI_MAX_DATALEN; wreq.wi_type = WI_RID_READ_CACHE; - - wi_getval(iface, &wreq); + if (wi_getval(iface, &wreq) == -1) + errx(1, "Cannot read signal cache"); wi_sigitems = (int *) &wreq.wi_val; pt = ((char *) &wreq.wi_val); @@ -861,7 +917,13 @@ return; } -#endif + +static void +dep(const char *flag, const char *opt) +{ + warnx("warning: flag %s deprecated, migrate to ifconfig %s", flag, + opt); +} int main(int argc, char *argv[]) @@ -890,22 +952,10 @@ opterr = 1; while((ch = getopt(argc, argv, - "a:hoc:d:e:f:i:k:lp:r:q:t:n:s:m:v:F:LP:S:T:ZC")) != -1) { + "a:c:d:e:f:hi:k:lm:n:op:q:r:s:t:v:CF:LP:QS:T")) != -1) { switch(ch) { - case 'Z': -#ifdef WICACHE - wi_zerocache(iface); -#else - printf("WICACHE not available\n"); -#endif - exit(0); - break; case 'C': -#ifdef WICACHE wi_readcache(iface); -#else - printf("WICACHE not available\n"); -#endif exit(0); break; case 'o': @@ -913,6 +963,7 @@ exit(0); break; case 'c': + dep("c", "mediaopt"); wi_setword(iface, WI_RID_CREATE_IBSS, atoi(optarg)); exit(0); break; @@ -921,10 +972,12 @@ exit(0); break; case 'e': + dep("e", "wepmode"); wi_setword(iface, WI_RID_ENCRYPTION, atoi(optarg)); exit(0); break; case 'f': + dep("f", "channel"); wi_setword(iface, WI_RID_OWN_CHNL, atoi(optarg)); exit(0); break; @@ -933,16 +986,18 @@ exit(0); break; case 'k': + dep("k", "wepkey"); key = optarg; break; case 'L': - listaps = 1; + listaps++; break; case 'l': wi_dumpstations(iface); exit(0); break; case 'p': + dep("p", "mediaopt"); wi_setword(iface, WI_RID_PORTTYPE, atoi(optarg)); exit(0); break; @@ -951,14 +1006,17 @@ exit(0); break; case 't': + dep("t", "mediaopt"); wi_setword(iface, WI_RID_TX_RATE, atoi(optarg)); exit(0); break; case 'n': + dep("n", "ssid"); wi_setstr(iface, WI_RID_DESIRED_SSID, optarg); exit(0); break; case 's': + dep("s", "stationname"); wi_setstr(iface, WI_RID_NODENAME, optarg); exit(0); break; @@ -966,20 +1024,27 @@ wi_sethex(iface, WI_RID_MAC_NODE, optarg); exit(0); break; + case 'Q': + quiet = 1; + break; case 'q': + dep("q", "ssid"); wi_setstr(iface, WI_RID_OWN_SSID, optarg); exit(0); break; case 'S': + dep("S", "powersleep"); wi_setword(iface, WI_RID_MAX_SLEEP, atoi(optarg)); exit(0); break; case 'T': + dep("T", "weptxkey"); wi_setword(iface, WI_RID_TX_CRYPT_KEY, atoi(optarg) - 1); exit(0); break; case 'P': + dep("P", "powersave"); wi_setword(iface, WI_RID_PM_ENABLED, atoi(optarg)); exit(0); break; @@ -1006,6 +1071,11 @@ exit(0); } + if (listaps > 1) { + wi_printaplist(iface); + exit(0); + } + wi_dumpinfo(iface); exit(0); --W/nzBZO5zC0uMSeA--
文章代碼(AID): #111gQH00 (DFBSD_submit)