]> xenbits.xensource.com Git - people/julieng/freebsd.git/commitdiff
wpi(4): do not override iv_recv_mgmt() in non-adhoc modes.
authoradrian <adrian@FreeBSD.org>
Sun, 11 Oct 2015 01:50:54 +0000 (01:50 +0000)
committeradrian <adrian@FreeBSD.org>
Sun, 11 Oct 2015 01:50:54 +0000 (01:50 +0000)
Tested:

* Tested with Intel 3945BG, IBSS and STA modes

Submitted by: <s3erios@gmail.com>
Differential Revision: https://reviews.freebsd.org/D3764

sys/dev/wpi/if_wpi.c

index dacee7d6056a3c86e4b1b9eda7da82935674b83e..f4bcc017249ec1f82c9eef5f0573add8b6007d79 100644 (file)
@@ -176,7 +176,7 @@ static int  wpi_read_eeprom_group(struct wpi_softc *, uint8_t);
 static struct ieee80211_node *wpi_node_alloc(struct ieee80211vap *,
                    const uint8_t mac[IEEE80211_ADDR_LEN]);
 static void    wpi_node_free(struct ieee80211_node *);
-static void    wpi_recv_mgmt(struct ieee80211_node *, struct mbuf *, int,
+static void    wpi_ibss_recv_mgmt(struct ieee80211_node *, struct mbuf *, int,
                    const struct ieee80211_rx_stats *,
                    int, int);
 static void    wpi_restore_node(void *, struct ieee80211_node *);
@@ -640,8 +640,10 @@ wpi_vap_create(struct ieee80211com *ic, const char name[IFNAMSIZ], int unit,
        /* Override with driver methods. */
        vap->iv_key_set = wpi_key_set;
        vap->iv_key_delete = wpi_key_delete;
-       wvp->wv_recv_mgmt = vap->iv_recv_mgmt;
-       vap->iv_recv_mgmt = wpi_recv_mgmt;
+       if (opmode == IEEE80211_M_IBSS) {
+               wvp->wv_recv_mgmt = vap->iv_recv_mgmt;
+               vap->iv_recv_mgmt = wpi_ibss_recv_mgmt;
+       }
        wvp->wv_newstate = vap->iv_newstate;
        vap->iv_newstate = wpi_newstate;
        vap->iv_update_beacon = wpi_update_beacon;
@@ -1664,7 +1666,7 @@ wpi_check_bss_filter(struct wpi_softc *sc)
 }
 
 static void
-wpi_recv_mgmt(struct ieee80211_node *ni, struct mbuf *m, int subtype,
+wpi_ibss_recv_mgmt(struct ieee80211_node *ni, struct mbuf *m, int subtype,
     const struct ieee80211_rx_stats *rxs,
     int rssi, int nf)
 {
@@ -1675,8 +1677,7 @@ wpi_recv_mgmt(struct ieee80211_node *ni, struct mbuf *m, int subtype,
 
        wvp->wv_recv_mgmt(ni, m, subtype, rxs, rssi, nf);
 
-       if (vap->iv_opmode == IEEE80211_M_IBSS &&
-           vap->iv_state == IEEE80211_S_RUN &&
+       if (vap->iv_state == IEEE80211_S_RUN &&
            (subtype == IEEE80211_FC0_SUBTYPE_BEACON ||
            subtype == IEEE80211_FC0_SUBTYPE_PROBE_RESP)) {
                ni_tstamp = le64toh(ni->ni_tstamp.tsf);