From owner-freebsd-hackers@FreeBSD.ORG Fri Mar 26 18:38:27 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 2D9F116A4CE for ; Fri, 26 Mar 2004 18:38:27 -0800 (PST) Received: from skutsje.san.webweaving.org (skutsje.san.webweaving.org [209.132.96.45]) by mx1.FreeBSD.org (Postfix) with ESMTP id B3D8B43D2F for ; Fri, 26 Mar 2004 18:38:26 -0800 (PST) (envelope-from dirkx@asemantics.com) Received: from [10.11.0.203] (fia193-115-100.dsl.hccnet.nl [80.100.115.193]) (authenticated bits=0)i2R2VsEJ069460 (version=TLSv1/SSLv3 cipher=RC4-SHA bits=128 verify=NO); Fri, 26 Mar 2004 18:31:58 -0800 (PST) (envelope-from dirkx@asemantics.com) In-Reply-To: <37AF87AA-7F87-11D8-8F99-000A95CDA38A@webweaving.org> References: <39FE23FA-7F75-11D8-8F99-000A95CDA38A@webweaving.org> <20040326181713.32971952@zZzZ.segfaulted.com> <37AF87AA-7F87-11D8-8F99-000A95CDA38A@webweaving.org> Mime-Version: 1.0 (Apple Message framework v613) Content-Type: text/plain; charset=US-ASCII; format=flowed Message-Id: Content-Transfer-Encoding: 7bit From: Dirk-Willem van Gulik Date: Sat, 27 Mar 2004 03:37:44 +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 02:38:27 -0000 Suleiman, Thanks for all the help - I just hacked up the patch below and took http://green.homeunix.org/~green/linkwatcher.c for testing. I also had to add the LINKUP/DOWN in some non-mii using ethernet cards (as only miibus(4) seems to issue this event). Now experimenting with different types of changes to the link/association on wifi level. Not exactly clear yet on the semantics of a 'lost link' myself; i.e. loss of assoc with -a- basestation; with the basestationS of a given ssid or simply connection loss; or whenever a handover happens, etc. Thanks for the help. Dw. diff -c -r /usr/src/sys/net80211/ieee80211.c /usr/src.new/sys/net80211/ieee80211.c *** /usr/src/sys/net80211/ieee80211.c Mon Sep 15 00:32:18 2003 --- /usr/src.new/sys/net80211/ieee80211.c Wed Mar 17 19:32:48 2004 *************** *** 845,850 **** --- 845,889 ---- #undef N } + /* Event notification channel */ + int + ieee80211_new_state(struct ieee80211com * ic, enum ieee80211_state nstate , int arg) + { + int link = NOTE_LINKINV; + + /* Callback into the real driver */ + int err = (ic->ic_newstate)(ic, nstate, arg); + +#if IEEE80211_DEBUG + printf("Transition to state %x(%d) %s\n",nstate,arg, err ? "Failed" : "ok"); +#endif + + switch(nstate) { + + case IEEE80211_S_SCAN: + case IEEE80211_S_AUTH: + case IEEE80211_S_ASSOC: + link = NOTE_LINKDOWN; + break; + + case IEEE80211_S_RUN: + link = NOTE_LINKUP; + break; + + case IEEE80211_S_INIT: + default: + link = NOTE_LINKINV; + break; + }; + /* XXX rely on ordering and do ((struct ifnet *)ic)->if_klist cast ??? XX */ + KNOTE(&(ic->ic_ac.ac_if.if_klist), link); + + return err; + } + /* * Module glue. * diff -c -r /usr/src/sys/net80211/ieee80211_proto.h /usr/src.new/sys/net80211/ieee80211_proto.h *** /usr/src/sys/net80211/ieee80211_proto.h Wed Aug 20 00:17:03 2003 --- /usr/src.new/sys/net80211/ieee80211_proto.h Wed Mar 17 17:48:13 2004 *************** *** 67,74 **** --- 67,78 ---- extern struct mbuf *ieee80211_decap(struct ifnet *, struct mbuf *); extern u_int8_t *ieee80211_add_rates(u_int8_t *frm, const struct ieee80211_rateset *); + extern int ieee80211_new_state(struct ieee80211com *, enum ieee80211_state , int); + #if 0 #define ieee80211_new_state(_ic, _nstate, _arg) \ (((_ic)->ic_newstate)((_ic), (_nstate), (_arg))) + #endif extern u_int8_t *ieee80211_add_xrates(u_int8_t *frm, const struct ieee80211_rateset *); extern void ieee80211_print_essid(u_int8_t *, int);