]> xenbits.xensource.com Git - people/julieng/freebsd.git/commitdiff
otus(4) - use the local node alloc function so there's space for statistics.
authoradrian <adrian@FreeBSD.org>
Mon, 19 Oct 2015 01:21:29 +0000 (01:21 +0000)
committeradrian <adrian@FreeBSD.org>
Mon, 19 Oct 2015 01:21:29 +0000 (01:21 +0000)
* Use the correct malloc type for node allocation - M_80211_NODE - so
  the default node free method in net80211 will work correctly.
* Fix otus_node_alloc() to suit FreeBSD's net80211.
* .. and actually call otus_node_alloc() so there's space for the
  per-node tx statistics.  Otherwise, well, it will be scribbling over
  random memory.

Tested:

* AR9170, STA mode

sys/dev/otus/if_otus.c

index 1f0df91b82d31525f9521499799fb3a31edf80ac..8756419747e8160d5f8e09853896b1ae1e7404a2 100644 (file)
@@ -164,7 +164,8 @@ int         otus_cmd(struct otus_softc *, uint8_t, const void *, int,
                    void *, int);
 void           otus_write(struct otus_softc *, uint32_t, uint32_t);
 int            otus_write_barrier(struct otus_softc *);
-struct         ieee80211_node *otus_node_alloc(struct ieee80211com *);
+static struct  ieee80211_node *otus_node_alloc(struct ieee80211vap *vap,
+                   const uint8_t mac[IEEE80211_ADDR_LEN]);
 int            otus_media_change(struct ifnet *);
 int            otus_read_eeprom(struct otus_softc *);
 void           otus_newassoc(struct ieee80211_node *, int);
@@ -814,6 +815,7 @@ otus_attachhook(struct otus_softc *sc)
        ic->ic_ampdu_enable = otus_ampdu_enable;
        ic->ic_wme.wme_update = otus_wme_update;
        ic->ic_newassoc = otus_newassoc;
+       ic->ic_node_alloc = otus_node_alloc;
 
 #ifdef notyet
        ic->ic_set_key = otus_set_key;
@@ -1387,10 +1389,12 @@ otus_write_barrier(struct otus_softc *sc)
        return error;
 }
 
-struct ieee80211_node *
-otus_node_alloc(struct ieee80211com *ic)
+static struct ieee80211_node *
+otus_node_alloc(struct ieee80211vap *vap, const uint8_t mac[IEEE80211_ADDR_LEN])
 {
-       return malloc(sizeof (struct otus_node), M_DEVBUF, M_NOWAIT | M_ZERO);
+
+       return malloc(sizeof (struct otus_node), M_80211_NODE,
+           M_NOWAIT | M_ZERO);
 }
 
 #if 0