From owner-freebsd-hackers@FreeBSD.ORG Fri Mar 26 16:39:41 2004 Return-Path: Delivered-To: freebsd-hackers@freebsd.org Received: from mx1.FreeBSD.org (mx1.freebsd.org [216.136.204.125]) by hub.freebsd.org (Postfix) with ESMTP id EF3DF16A4CE for ; Fri, 26 Mar 2004 16:39:41 -0800 (PST) Received: from skutsje.san.webweaving.org (skutsje.san.webweaving.org [209.132.96.45]) by mx1.FreeBSD.org (Postfix) with ESMTP id C277443D39 for ; Fri, 26 Mar 2004 16:39:39 -0800 (PST) (envelope-from dirkx@webweaving.org) Received: from [10.11.0.203] (fia193-115-100.dsl.hccnet.nl [80.100.115.193]) (authenticated bits=0)i2R0XLEJ061588 (version=TLSv1/SSLv3 cipher=RC4-SHA bits=128 verify=NO); Fri, 26 Mar 2004 16:33:25 -0800 (PST) (envelope-from dirkx@webweaving.org) In-Reply-To: <20040326181713.32971952@zZzZ.segfaulted.com> References: <39FE23FA-7F75-11D8-8F99-000A95CDA38A@webweaving.org> <20040326181713.32971952@zZzZ.segfaulted.com> Mime-Version: 1.0 (Apple Message framework v613) Content-Type: text/plain; charset=US-ASCII; format=flowed Message-Id: <37AF87AA-7F87-11D8-8F99-000A95CDA38A@webweaving.org> Content-Transfer-Encoding: 7bit From: Dirk-Willem van Gulik Date: Sat, 27 Mar 2004 01:39:33 +0100 To: Suleiman Souhlal X-Mailer: Apple Mail (2.613) cc: freebsd-hackers@freebsd.org Subject: Re: events when (de)associating or when cable is (un)plugged X-BeenThere: freebsd-hackers@freebsd.org X-Mailman-Version: 2.1.1 Precedence: list List-Id: Technical Discussions relating to FreeBSD List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 27 Mar 2004 00:39:42 -0000 On Mar 27, 2004, at 12:17 AM, Suleiman Souhlal wrote: >> Looking for suggestions on a 'clean' and generic way to allow for >> notifications when a 802.11 association is made or lost, or when >> a ethernet cable is (un)plugged. I.e.akin to the events 'usbd(8) get >> when you sit on /dev/usb. This is for 5.2.1 or beyond. > > I am not too sure about 802.11, but to detect when the ethernet cable > is > (un)plugged, you can use kqueue(2) with the EVFILT_NETDEV filter. Ok - that looks like a good match - so I guess it would make sense then to make the #define of: #define ieee80211_new_state(_ic, _nstate, _arg) \ (((_ic)->ic_newstate)((_ic), (_nstate), (_arg))) into something a bit more like a function: extern int ieee80211_new_state(struct ieee80211com *, enum ieee80211_state , int); and then make the latter do something like void ieee80211_new_state(struct ieee80211com * ic, enum ieee80211_state nstate , int arg) { /* Callback into the real driver */ int err = (ic->ic_newstate)(ic, nstate, arg); #ifdef IEEE80211_DEBUG printf("Transition to state %x(%d) %s\n",nstate,arg, err ? "Failed" : "ok"); #endif /* DEBUG */ if (right args == some-assoc-change) KNOTE(ic->ifp->if_klist, arg ? NOTE_LINKDOWN : NOTE_LINKUP); /* ?? locking ?? */ } Thanks - hacking away. Dw