CALL for TEST [HOSTAP] run(4) ralink usb wireless
PseudoCylon
moonlightakkiy at yahoo.ca
Thu Jun 17 10:01:49 UTC 2010
----- Original Message ----
>> From: Ganbold <ganbold at gmail.com>
>> To: PseudoCylon <moonlightakkiy at yahoo.ca>
>> Cc: freebsd-current at freebsd.org; Ganbold Tsagaankhuu <ganbold at mobicom.mn>
>> Sent: Wed, June 16, 2010 6:33:47 AM
>> Subject: Re: CALL for TEST [HOSTAP] run(4) ralink usb wireless
>>
>> AK-san,
>
>PseudoCylon wrote:
>>>>
>>>
>
>Strange, looks like this time works as expected, but sometimes it
>doesn't work.
>
>In some cases it doesn't work and you can find complete tcpdump output
> from very beginning to the modem hang:
>
Hello,
Are following true?
When manually load/reload hostapd, works
When loaded by rc.conf, doesn't work
If so, please try attached patch. (patch to if_run.c only) Or, here is a patched file.
http://gitorious.org/run/run/blobs/raw/cmdq_fix/dev/usb/wlan/if_run.c
When auto-loading, the driver is brought up and down a few times. It might be the cause. So, when you test, please reboot rspro and let rc.conf handle init process rather than manually start driver/hostapd. And
#arp -d -a
on rspro, freebsd laptop. and macbook would help for testing. (If it works on mac) So, that clients have to send arp request. If macbook receives "who-has 192.168.1.50" arp request packets, it should work. If macbook supports
# tcpdump -vv -xxx -i wlan0 'arp'
and see if macbook gets this.
19:34:30.469720 ARP, Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.50 tell 192.168.1.1, length 46
0x0000: ffff ffff ffff 0030 5462 3d24 0806 0001
0x0010: 0800 0604 0001 0030 5462 3d24 c0a8 0101
0x0020: 0000 0000 0000 c0a8 0132 0000 0000 0000
0x0030: 0000 0000 0000 0000 0000 0000
AK
-- begin patch --
diff --git a/dev/usb/wlan/if_run.c b/dev/usb/wlan/if_run.c
index e4fc8d2..f302246 100644
--- a/dev/usb/wlan/if_run.c
+++ b/dev/usb/wlan/if_run.c
@@ -17,7 +17,7 @@
*/
#include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/dev/usb/wlan/if_run.c,v 1.11 2010/06/14 23:01:50 jkim Exp $");
+__FBSDID("$FreeBSD$");
/*-
* Ralink Technology RT2700U/RT2800U/RT3000U chipset driver.
@@ -830,9 +830,6 @@ run_vap_create(struct ieee80211com *ic,
if(sc->rvp_cnt++ == 0)
ic->ic_opmode = opmode;
-if(opmode == IEEE80211_M_HOSTAP)
-sc->cmdq_run = RUN_CMDQ_GO;
-
DPRINTF("rvp_id=%d bmap=%x rvp_cnt=%d\n",
rvp->rvp_id, sc->rvp_bmap, sc->rvp_cnt);
@@ -894,7 +891,9 @@ run_cmdq_cb(void *arg, int pending)
for(i = sc->cmdq_exec; sc->cmdq[i].func && pending;
i = sc->cmdq_exec, pending--){
DPRINTFN(6, "cmdq_exec=%d pending=%d\n", i, pending);
-if(sc->cmdq_run == RUN_CMDQ_GO){
+if(sc->cmdq_run == RUN_CMDQ_GO ||
+ (sc->cmdq_key_set == RUN_CMDQ_GO &&
+ sc->cmdq[i].func == run_key_set_cb)){
/*
* If arg0 is NULL, callback func needs more
* than one arg. So, pass ptr to cmdq struct.
@@ -4798,7 +4797,7 @@ run_stop(void *arg)
ifp->if_drv_flags &= ~(IFF_DRV_RUNNING | IFF_DRV_OACTIVE);
sc->ratectl_run = RUN_RATECTL_OFF;
-sc->cmdq_run = sc->cmdq_key_set;
+sc->cmdq_run = RUN_CMDQ_ABORT;
RUN_UNLOCK(sc);
-- end patch --
More information about the freebsd-current
mailing list