NetBSD Problem Report #43090

From www@NetBSD.org  Wed Mar 31 20:35:24 2010
Return-Path: <www@NetBSD.org>
Received: from mail.netbsd.org (mail.netbsd.org [204.152.190.11])
	by www.NetBSD.org (Postfix) with ESMTP id 9D57E63B86C
	for <gnats-bugs@gnats.NetBSD.org>; Wed, 31 Mar 2010 20:35:24 +0000 (UTC)
Message-Id: <20100331203524.3D37B63B11D@www.NetBSD.org>
Date: Wed, 31 Mar 2010 20:35:24 +0000 (UTC)
From: enaud@qnx.com
Reply-To: enaud@qnx.com
To: gnats-bugs@NetBSD.org
Subject: Rum Driver Won't Detect Loss of Access Point
X-Send-Pr-Version: www-1.0

>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;

NetBSD Home
NetBSD PR Database Search

(Contact us) $NetBSD: query-full-pr,v 1.39 2013/11/01 18:47:49 spz Exp $
$NetBSD: gnats_config.sh,v 1.8 2006/05/07 09:23:38 tsutsui Exp $
Copyright © 1994-2007 The NetBSD Foundation, Inc. ALL RIGHTS RESERVED.