svn commit: r280079 - head/sys/dev/wpi

Adrian Chadd adrian at FreeBSD.org
Sun Mar 15 20:46:25 UTC 2015


Author: adrian
Date: Sun Mar 15 20:46:24 2015
New Revision: 280079
URL: https://svnweb.freebsd.org/changeset/base/280079

Log:
  Move IBSS assocation processing to wpi_newassoc().
  
  PR:		kern/197143
  Submitted by:	Andriy Voskoboinyk <s3erios at gmail.com>

Modified:
  head/sys/dev/wpi/if_wpi.c

Modified: head/sys/dev/wpi/if_wpi.c
==============================================================================
--- head/sys/dev/wpi/if_wpi.c	Sun Mar 15 20:45:43 2015	(r280078)
+++ head/sys/dev/wpi/if_wpi.c	Sun Mar 15 20:46:24 2015	(r280079)
@@ -228,6 +228,7 @@ static int	wpi_scan(struct wpi_softc *, 
 static int	wpi_auth(struct wpi_softc *, struct ieee80211vap *);
 static void	wpi_update_beacon(struct ieee80211vap *, int);
 static int	wpi_setup_beacon(struct wpi_softc *, struct ieee80211_node *);
+static void	wpi_newassoc(struct ieee80211_node *, int);
 static int	wpi_run(struct wpi_softc *, struct ieee80211vap *);
 static int	wpi_key_alloc(struct ieee80211vap *, struct ieee80211_key *,
 		    ieee80211_keyix *, ieee80211_keyix *);
@@ -500,6 +501,7 @@ wpi_attach(device_t dev)
 	ic->ic_wme.wme_update = wpi_updateedca;
 	ic->ic_update_promisc = wpi_update_promisc;
 	ic->ic_update_mcast = wpi_update_mcast;
+	ic->ic_newassoc = wpi_newassoc;
 	ic->ic_scan_start = wpi_scan_start;
 	ic->ic_scan_end = wpi_scan_end;
 	ic->ic_set_channel = wpi_set_channel;
@@ -2563,20 +2565,6 @@ wpi_tx_data(struct wpi_softc *sc, struct
 	if (ismcast || type != IEEE80211_FC0_TYPE_DATA)
 		tx.id = WPI_ID_BROADCAST;
 	else {
-		if (wn->id == WPI_ID_UNDEFINED &&
-		    (vap->iv_opmode == IEEE80211_M_IBSS ||
-		    vap->iv_opmode == IEEE80211_M_AHDEMO)) {
-			WPI_NT_LOCK(sc);
-			error = wpi_add_ibss_node(sc, ni);
-			WPI_NT_UNLOCK(sc);
-			if (error != 0) {
-				device_printf(sc->sc_dev,
-				    "%s: could not add IBSS node, error %d\n",
-				    __func__, error);
-				goto fail;
-			}
-		}
-
 		if (wn->id == WPI_ID_UNDEFINED) {
 			device_printf(sc->sc_dev,
 			    "%s: undefined node id\n", __func__);
@@ -4019,6 +4007,28 @@ wpi_update_beacon(struct ieee80211vap *v
 	WPI_UNLOCK(sc);
 }
 
+static void
+wpi_newassoc(struct ieee80211_node *ni, int isnew)
+{
+	struct ieee80211vap *vap = ni->ni_vap;
+	struct wpi_softc *sc = ni->ni_ic->ic_ifp->if_softc;
+	struct wpi_node *wn = WPI_NODE(ni);
+	int error;
+
+	WPI_NT_LOCK(sc);
+
+	DPRINTF(sc, WPI_DEBUG_TRACE, TRACE_STR_DOING, __func__);
+
+	if (vap->iv_opmode != IEEE80211_M_STA && wn->id == WPI_ID_UNDEFINED) {
+		if ((error = wpi_add_ibss_node(sc, ni)) != 0) {
+			device_printf(sc->sc_dev,
+			    "%s: could not add IBSS node, error %d\n",
+			    __func__, error);
+		}
+	}
+	WPI_NT_UNLOCK(sc);
+}
+
 static int
 wpi_run(struct wpi_softc *sc, struct ieee80211vap *vap)
 {


More information about the svn-src-all mailing list