NetBSD-Bugs archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

kern/43090: Rum Driver Won't Detect Loss of Access Point



>Number:         43090
>Category:       kern
>Synopsis:       Rum Driver Won't Detect Loss of Access Point
>Confidential:   no
>Severity:       serious
>Priority:       medium
>Responsible:    kern-bug-people
>State:          open
>Class:          sw-bug
>Submitter-Id:   net
>Arrival-Date:   Wed Mar 31 20:40:00 +0000 2010
>Originator:     Eric Naud
>Release:        5.0.2
>Organization:
QNX Software Systems
>Environment:
NetBSD 5.0.2
>Description:
Rum based devices appear to lack the ability to notice if their access point 
has been powered down or gone out of range.

Without the ability to monitor the network status the link is always up until a 
manual channel scan is initiated. 

Roaming may not work until this issue is address. Typically losing a link to 
your AP should provide the impetus to scan for another AP. This never occurs 
because the driver thinks the links is always active.
>How-To-Repeat:
1. Plug in a rum/usb based network dongle
2. ifconfig rum0 ssid "TESTNET" -nwkey
3. ifconfig rum0 up
4. Wait for scanning to complete.
5. ifconfig to verify bssid and network status
6. Unplug the access point
7. Run ifconfig again and notice how the network status is still active
8. Run ifconfig rum0 list scan to update node table and lock onto another AP.
>Fix:
? if.diff
? if_rum_bsd.diff
Index: if_rum.c
===================================================================
RCS file: /cvsroot/src/sys/dev/usb/if_rum.c,v
retrieving revision 1.23
diff -r1.23 if_rum.c
25d24
< 
205a205
> Static void           rum_linkmon(void *);
362a363
>       usb_callout_init(sc->sc_link_mon);
493a495
>       usb_uncallout(sc->sc_link_mon, rum_linkmon, sc);
747a751
>               usb_callout(sc->sc_link_mon, hz*3, rum_linkmon, sc);
761c765
<       usb_uncallout(sc->sc_amrr_ch, rum_amrr_timeout, sc);
---
>       usb_uncallout(sc->sc_link_mon, , NULL);
2288a2293,2300
> 
> void rum_linkmon(void *arg) 
> {
>       struct rum_softc *sc = arg;
>       ieee80211_beacon_miss(&sc->sc_ic);
> printf("rum_linkmon\n");
>       usb_callout(sc->sc_link_mon, hz*3, rum_linkmon, sc);
> }
Index: if_rumvar.h
===================================================================
RCS file: /cvsroot/src/sys/dev/usb/if_rumvar.h,v
retrieving revision 1.4
diff -r1.4 if_rumvar.h
112a113
>       usb_callout_t                   sc_link_mon;



Home | Main Index | Thread Index | Old Index