Subject: kern/15498: Intersil Prism2.5 Wireless Lan cannot use 104-bit WEP
To: None <gnats-bugs@gnats.netbsd.org>
From: None <ura@hiru.aoba.yokohama.jp>
List: netbsd-bugs
Date: 02/06/2002 02:53:53
>Number:         15498
>Category:       kern
>Synopsis:       Intersil Prism2.5 Wireless Lan cannot use 104-bit WEP
>Confidential:   no
>Severity:       serious
>Priority:       medium
>Responsible:    kern-bug-people
>State:          open
>Class:          sw-bug
>Submitter-Id:   net
>Arrival-Date:   Tue Feb 05 09:55:00 PST 2002
>Closed-Date:
>Last-Modified:
>Originator:     URA Hiroshi
>Release:        NetBSD 1.5ZA (kernel: 2002/02/01, userland: 2001/01/12)
>Organization:
>Environment:
System: NetBSD fumizuki.hiru.aoba.yokohama.jp 1.5ZA NetBSD 1.5ZA (FUMIZUKI) #64: Tue Feb 5 16:05:23 JST 2002 ura@fumizuki.hiru.aoba.yokohama.jp:/usr/src/sys/arch/i386/compile/FUMIZUKI i386
Architecture: i386
Machine: i386
>Description:

ThinkPad T23 have internal wireless lan using Intersil Prism2.5 chip.
The dmesg says:
	wi0 at pci2 dev 2 function 0: Intersil Prism2.5 Wireless Lan
	wi0: interrupting at irq 11
	wi0: 802.11 address 00:20:e0:89:18:a4
	wi0: using RF:PRISM2.5 MAC:ISL3874A(PCI), Firmware: 1.3 variant 3

The wi without WEP and wi with 40bit-WEP worked fine. But when I
I tried to use wi with 104-bit WEP in the 104bit-WEP environment,
I found that it could not join to the wireless network. 

>How-To-Repeat:
    On the PC that have the Intersil Prism2.5 Wireless Lan, enable
    104-bit WEP and ping to another machine.

>Fix:
    The following patch is workaround. I don't test to use wi
    with 40bit-WEP.

Index: wi.c
===================================================================
RCS file: /cvsroot/netbsd/syssrc/sys/dev/ic/wi.c,v
retrieving revision 1.38
diff -u -u -r1.38 wi.c
--- wi.c	2002/02/01 13:35:41	1.38
+++ wi.c	2002/02/05 17:22:15
@@ -930,12 +930,15 @@
 			struct wi_ltv_keys	*wk = (struct wi_ltv_keys *)ltv;
 			for (i = 0; i < 4; i++) {
 				memset(&ws, 0, sizeof(ws));
-				if(wk->wi_keys[i].wi_keylen <= 5) {
+#if 0
+				if (wk->wi_keys[i].wi_keylen <= 5) {
 					/* 5 Octets WEP Keys */
 					ws.wi_len = 4;
 					memcpy(ws.wi_str, &wk->wi_keys[i].wi_keydat, 5);
 					ws.wi_str[5] = '\0';
-				} else {
+				} else 
+#endif
+				{
 					/* 13 Octets WEP Keys */
 					ws.wi_len = 8;
 					memcpy(ws.wi_str, &wk->wi_keys[i].wi_keydat, 13);
>Release-Note:
>Audit-Trail:
>Unformatted: