diff -u -r /usr/src.orig/src/sys/dev/wi/if_wavelan_ieee.h /usr/src/sys/dev/wi/if_wavelan_ieee.h --- /usr/src.orig/src/sys/dev/wi/if_wavelan_ieee.h Thu Jan 15 10:45:30 2004 +++ /usr/src/sys/dev/wi/if_wavelan_ieee.h Thu Jan 15 11:08:23 2004 @@ -238,6 +238,7 @@ #define WI_RID_CNFAUTHMODE 0xFC2A #define WI_RID_ROAMING_MODE 0xFC2D #define WI_RID_OWN_BEACON_INT 0xFC33 /* beacon xmit time for BSS creation */ +#define WI_RID_CNFENHSEC 0xFC43 /* firmware 1.6.3 or above needed */ #define WI_RID_CNF_DBM_ADJUST 0xFC46 #define WI_RID_DBM_ADJUST 0xFC46 /* RSSI - WI_RID_DBM_ADJUST ~ dBm */ #define WI_RID_BASIC_RATE 0xFCB3 Only in /usr/src/sys/dev/wi: if_wavelan_ieee.h.orig diff -u -r /usr/src.orig/src/sys/dev/wi/if_wi.c /usr/src/sys/dev/wi/if_wi.c --- /usr/src.orig/src/sys/dev/wi/if_wi.c Thu Jan 15 10:45:30 2004 +++ /usr/src/sys/dev/wi/if_wi.c Thu Jan 15 11:17:11 2004 @@ -402,6 +402,8 @@ */ if (sc->sc_sta_firmware_ver >= 803) ic->ic_caps |= IEEE80211_C_HOSTAP; + if (sc->sc_sta_firmware_ver >= 10603) + sc->sc_flags |= WI_FLAGS_HAS_ENHSEC; sc->sc_ibss_port = htole16(0); sc->sc_min_rssi = WI_PRISM_MIN_RSSI; @@ -704,6 +706,8 @@ wi_write_val(sc, WI_RID_RTS_THRESH, ic->ic_rtsthreshold); if (sc->sc_flags & WI_FLAGS_HAS_FRAGTHR) wi_write_val(sc, WI_RID_FRAG_THRESH, ic->ic_fragthreshold); + if (sc->sc_flags & WI_FLAGS_HAS_ENHSEC) + wi_write_val(sc, WI_RID_CNFENHSEC, sc->sc_enhsec); /* driver specific 802.11 configuration */ if (sc->sc_flags & WI_FLAGS_HAS_SYSSCALE) @@ -1865,6 +1869,16 @@ case WI_RID_TX_RATE: return ieee80211_cfgget(ifp, cmd, data); + case WI_RID_CNFENHSEC: + if (sc->sc_enabled && (sc->sc_flags & WI_FLAGS_HAS_ENHSEC)) { + error = wi_read_rid(sc, wreq.wi_type, wreq.wi_val, + &len); + break; + } + wreq.wi_val[0] = htole16(sc->sc_enhsec); + len = sizeof(u_int16_t); + break; + case WI_RID_MICROWAVE_OVEN: if (sc->sc_enabled && (sc->sc_flags & WI_FLAGS_HAS_MOR)) { error = wi_read_rid(sc, wreq.wi_type, wreq.wi_val, @@ -2085,6 +2099,7 @@ memcpy(sc->sc_nodename, &wreq.wi_val[1], sc->sc_nodelen); break; + case WI_RID_CNFENHSEC: case WI_RID_MICROWAVE_OVEN: case WI_RID_ROAMING_MODE: case WI_RID_SYSTEM_SCALE: @@ -2101,6 +2116,9 @@ if (wreq.wi_type == WI_RID_FRAG_THRESH && (sc->sc_flags & WI_FLAGS_HAS_FRAGTHR) == 0) break; + if (wreq.wi_type == WI_RID_CNFENHSEC && + (sc->sc_flags & WI_FLAGS_HAS_ENHSEC) == 0) + break; /* FALLTHROUGH */ case WI_RID_RTS_THRESH: case WI_RID_CNFAUTHMODE: @@ -2132,6 +2150,9 @@ break; case WI_RID_MAX_DATALEN: sc->sc_max_datalen = le16toh(wreq.wi_val[0]); + break; + case WI_RID_CNFENHSEC: + sc->sc_enhsec = le16toh(wreq.wi_val[0]); break; } break; diff -u -r /usr/src.orig/src/sys/dev/wi/if_wivar.h /usr/src/sys/dev/wi/if_wivar.h --- /usr/src.orig/src/sys/dev/wi/if_wivar.h Thu Jan 15 10:45:30 2004 +++ /usr/src/sys/dev/wi/if_wivar.h Thu Jan 15 11:08:10 2004 @@ -57,6 +57,7 @@ #define WI_RID_P2_CRYPT_KEY3 0xFC27 #define WI_RID_P2_ENCRYPTION 0xFC28 #define WI_RID_ROAMING_MODE 0xFC2D +#define WI_RID_CNFENHSEC 0xFC43 /* firmware 1.6.3 or above needed */ #define WI_RID_CUR_TX_RATE 0xFD44 /* current TX rate */ struct wi_softc { @@ -118,6 +119,7 @@ u_int16_t sc_roaming_mode; u_int16_t sc_microwave_oven; u_int16_t sc_authtype; + u_int16_t sc_enhsec; int sc_nodelen; char sc_nodename[IEEE80211_NWID_LEN]; @@ -193,6 +195,7 @@ #define WI_FLAGS_BUG_AUTOINC 0x0100 #define WI_FLAGS_HAS_FRAGTHR 0x0200 #define WI_FLAGS_HAS_DBMADJUST 0x0400 +#define WI_FLAGS_HAS_ENHSEC 0x0800 struct wi_card_ident { u_int16_t card_id; diff -u -r /usr/src.orig/src/usr.sbin/wicontrol/wicontrol.8 /usr/src/usr.sbin/wicontrol/wicontrol.8 --- /usr/src.orig/src/usr.sbin/wicontrol/wicontrol.8 Thu Jan 15 10:41:42 2004 +++ /usr/src/usr.sbin/wicontrol/wicontrol.8 Thu Jan 15 11:04:27 2004 @@ -80,6 +80,10 @@ .Ar iface Fl e Cm 0 | 1 .Nm .Op Fl i +.Ar iface Fl E Cm 0 | 1 | 2 | 3 +(Enhanced SSID security) +.Nm +.Op Fl i .Ar iface Fl k Ar key .Op Fl v Cm 1 | 2 | 3 | 4 .Nm @@ -202,6 +206,16 @@ The signal quality values is produced by subtracting the noise level from the signal strength (i.e. less noise and better signal yields better signal quality). +.It Oo Fl i Oc Ar iface Fl E 0 | 1 | 2 | 3 +This option NEEDS prism2,2.5,3 f/w >= 1.6.3 +This option sets the SSID broadcast in beacon frames on/off. It also enables/disables clients with a "" SSID to connect. Hostap mode is needed. +.Bl -column ".Em option" ".Em what it does" -offset ident +.Em "option what it does" +.It Cm 0 Ta "Both options disabled" +.It Cm 1 Ta "Hide SSID in beacon frames" +.It Cm 2 Ta "Ignore clients with a blank SSID" +.It Cm 3 Ta "1 and 2 combined" +.El .El .Sh DEPRECATED AND OBSOLETE OPTIONS The diff -u -r /usr/src.orig/src/usr.sbin/wicontrol/wicontrol.c /usr/src/usr.sbin/wicontrol/wicontrol.c --- /usr/src.orig/src/usr.sbin/wicontrol/wicontrol.c Thu Jan 15 10:41:42 2004 +++ /usr/src/usr.sbin/wicontrol/wicontrol.c Thu Jan 15 11:09:12 2004 @@ -710,6 +710,7 @@ { WI_RID_CARD_ID, WI_HEXWORDS, "Card ID register:\t\t\t" }, { WI_RID_REG_DOMAINS, WI_REGDOMS, "Regulatory Domains:\t\t\t" }, { WI_RID_TEMP_TYPE, WI_WORDS, "Temperature Range:\t\t\t" }, + { WI_RID_CNFENHSEC, WI_WORDS, "Enhanced SSID Security:\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" }, @@ -910,6 +911,7 @@ fprintf(stderr, "\t%s -i iface -P 0|1\n", p); fprintf(stderr, "\t%s -i iface -S max sleep duration\n", p); fprintf(stderr, "\t%s -i iface -T 1|2|3|4\n", p); + fprintf(stderr, "\t%s -i iface -E 0|1|2|3\n" ,p); #ifdef WICACHE fprintf(stderr, "\t%s -i iface -Z zero out signal cache\n", p); fprintf(stderr, "\t%s -i iface -C print signal cache\n", p); @@ -1097,7 +1099,7 @@ opterr = 1; while((ch = getopt(argc, argv, - "a:c:d:e:f:hi:k:lm:n:op:q:r:s:t:v:CF:LP:QS:T:Z")) != -1) { + "a:c:d:e:E:f:hi:k:lm:n:op:q:r:s:t:v:CF:LP:QS:T:Z")) != -1) { switch(ch) { case 'Z': #ifdef WICACHE @@ -1133,6 +1135,13 @@ wi_setword(iface, WI_RID_ENCRYPTION, atoi(optarg)); exit(0); break; + case 'E': + if (atoi(optarg) >= 0 && atoi(optarg) <=3) { + wi_setword(iface, WI_RID_CNFENHSEC, atoi(optarg)); + } + else fprintf(stderr, "invalid option\n"); + exit(0); + break; case 'f': dep("f", "channel"); wi_setword(iface, WI_RID_OWN_CHNL, atoi(optarg));