[Madwifi-cvs] madwifi/net80211 ieee80211.c,1.1.4.1,1.1.4.2 ieee80211_dot1x.c,1.1.2.3,1.1.2.4 ieee802
Status: Beta
Brought to you by:
otaku
From: <sam...@us...> - 2004-02-27 21:28:42
|
Update of /cvsroot/madwifi/madwifi/net80211 In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv13176 Modified Files: Tag: WPA ieee80211.c ieee80211_dot1x.c ieee80211_var.h Log Message: must locate an ieee80211com instance based on the detination address, not the received device; this fixes EAPOL when bridging as the frames are received from the bridge device Index: ieee80211.c =================================================================== RCS file: /cvsroot/madwifi/madwifi/net80211/Attic/ieee80211.c,v retrieving revision 1.1.4.1 retrieving revision 1.1.4.2 diff -C2 -d -r1.1.4.1 -r1.1.4.2 *** ieee80211.c 24 Feb 2004 23:33:21 -0000 1.1.4.1 --- ieee80211.c 27 Feb 2004 21:11:53 -0000 1.1.4.2 *************** *** 368,372 **** --- 368,387 ---- } + /* + * Find an instance by it's mac address. + */ struct ieee80211com * + ieee80211_find_vap(const u_int8_t mac[IEEE80211_ADDR_LEN]) + { + struct ieee80211com *ic; + + /* XXX lock */ + SLIST_FOREACH(ic, &ieee80211_list, ic_next) + if (IEEE80211_ADDR_EQ(mac, ic->ic_myaddr)) + return ic; + return NULL; + } + + static struct ieee80211com * ieee80211_find_instance(struct net_device *dev) { Index: ieee80211_dot1x.c =================================================================== RCS file: /cvsroot/madwifi/madwifi/net80211/Attic/ieee80211_dot1x.c,v retrieving revision 1.1.2.3 retrieving revision 1.1.2.4 diff -C2 -d -r1.1.2.3 -r1.1.2.4 *** ieee80211_dot1x.c 27 Feb 2004 18:37:48 -0000 1.1.2.3 --- ieee80211_dot1x.c 27 Feb 2004 21:11:53 -0000 1.1.2.4 *************** *** 281,285 **** */ /* NB: must release reference */ ! ic = ieee80211_find_instance(skb->dev); if (ic == NULL) { eapolstats.eps_noinstance++; --- 281,285 ---- */ /* NB: must release reference */ ! ic = ieee80211_find_vap(skb->mac.ethernet->h_dest); if (ic == NULL) { eapolstats.eps_noinstance++; *************** *** 1418,1421 **** --- 1418,1422 ---- skb->dev = dev; skb->protocol = __constant_htons(ETH_P_EAPOL); + skb->mac.raw = skb->nh.raw = skb->data; if (dev->hard_header && dev->hard_header(skb, dev, ETH_P_EAPOL, en->en_node->ni_macaddr, dev->dev_addr, skb->len) < 0) Index: ieee80211_var.h =================================================================== RCS file: /cvsroot/madwifi/madwifi/net80211/Attic/ieee80211_var.h,v retrieving revision 1.1.4.2 retrieving revision 1.1.4.3 diff -C2 -d -r1.1.4.2 -r1.1.4.3 *** ieee80211_var.h 27 Feb 2004 16:51:03 -0000 1.1.4.2 --- ieee80211_var.h 27 Feb 2004 21:11:53 -0000 1.1.4.3 *************** *** 323,327 **** void ieee80211_ifdetach(struct ieee80211com *); void ieee80211_media_init(struct ieee80211com *, ifm_change_cb_t, ifm_stat_cb_t); ! struct ieee80211com *ieee80211_find_instance(struct net_device *); int ieee80211_media_change(struct net_device *); void ieee80211_media_status(struct net_device *, struct ifmediareq *); --- 323,327 ---- void ieee80211_ifdetach(struct ieee80211com *); void ieee80211_media_init(struct ieee80211com *, ifm_change_cb_t, ifm_stat_cb_t); ! struct ieee80211com *ieee80211_find_vap(const u_int8_t mac[IEEE80211_ADDR_LEN]); int ieee80211_media_change(struct net_device *); void ieee80211_media_status(struct net_device *, struct ifmediareq *); |