Skip site navigation (1)Skip section navigation (2)
Date:      Sat, 23 Feb 2002 23:15:56 -0800
From:      Thomas Skibo <skibo@pacbell.net>
To:        "M. Warner Losh" <imp@village.org>, fujita@soum.co.jp
Cc:        mitchy@er.ams.eng.osaka-u.ac.jp, mobile@FreeBSD.ORG, brooks@one-eyed-alien.net
Subject:   Re: Linksys WMP11 support
Message-ID:  <3C78932C.27319015@pacbell.net>
References:  <20020205133602.A6294@Odin.AC.HMC.Edu> <20020206095856D.mitchy@er.ams.eng.osaka-u.ac.jp> <20020224.084619.74696422.fujita@soum.co.jp> <20020223.213124.62371755.imp@village.org>

next in thread | previous in thread | raw e-mail | index | archive | help

"M. Warner Losh" wrote:
> 
> 
> I've heard all kinds of reports for Prism 2 cards not working with 128
> bit WEP.  Maybe we need to do this for all PRISM 2 cards?
> 

Yup.  I think they all benefit.  I tried FUJITA Kazutoshi's changes
on three different prism2 interfaces (a Linksys WMP-11, a D-Link DWL-650,
and a Linksys WPC-11 v2.5) and now they are all talking 104-bit WEP.
My FreeBSD machines now talk to my XP machine in 104-bit mode which
they never did before.

I think the breakthrough is setting the key length on ALL the keys
to the same value.

Thanks for tracking that down, Fujita.



Here's the changes as I'm using them:

*** if_wi.c     2002/02/16 03:52:16     1.6
--- if_wi.c     2002/02/24 06:37:58
***************
*** 1155,1174 ****
                        ltv = &p2ltv;
                        break;
                case WI_RID_DEFLT_CRYPT_KEYS:
                    {
                        int error;
                        struct wi_ltv_str       ws;
                        struct wi_ltv_keys      *wk =
                            (struct wi_ltv_keys *)ltv;
  
                        for (i = 0; i < 4; i++) {
!                               ws.wi_len = 4;
                                ws.wi_type = WI_RID_P2_CRYPT_KEY0 + i;
                                memcpy(ws.wi_str,
!                                   &wk->wi_keys[i].wi_keydat, 5);
!                               ws.wi_str[5] = '\0';
                                error = wi_write_record(sc,
                                    (struct wi_ltv_gen *)&ws);
                                if (error)
                                        return error;
                        }
--- 1162,1186 ----
                        ltv = &p2ltv;
                        break;
                case WI_RID_DEFLT_CRYPT_KEYS:
                    {
                        int error;
+                       int keylen;
                        struct wi_ltv_str       ws;
                        struct wi_ltv_keys      *wk =
                            (struct wi_ltv_keys *)ltv;
  
+                       keylen = wk->wi_keys[ sc->wi_tx_key ].wi_keylen;
+ 
                        for (i = 0; i < 4; i++) {
! 
!                               bzero(&ws, sizeof(ws));
!                               ws.wi_len = (keylen>5) ? 8:4;
                                ws.wi_type = WI_RID_P2_CRYPT_KEY0 + i;
                                memcpy(ws.wi_str,
!                                      &wk->wi_keys[i].wi_keydat, keylen);
! 
                                error = wi_write_record(sc,
                                    (struct wi_ltv_gen *)&ws);
                                if (error)
                                        return error;
                        }

-- 
------------------------------------------------------------------------
Thomas Skibo						skibo@pacbell.net

To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe freebsd-mobile" in the body of the message




Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?3C78932C.27319015>