--- madwifi-0.9.4/ath/if_ath.c 2008-02-13 12:13:10.000000000 +0700 +++ madwifi-0.9.4-patched/ath/if_ath.c 2008-10-10 13:36:13.000000000 +0700 @@ -2341,6 +2341,7 @@ ath_tx_startraw(struct net_device *dev, struct ath_buf *bf, struct sk_buff *skb) { struct ath_softc *sc = dev->priv; + struct ieee80211com *ic = &sc->sc_ic; struct ath_hal *ah = sc->sc_ah; struct ieee80211_phy_params *ph = (struct ieee80211_phy_params *) (skb->cb + sizeof(struct ieee80211_cb)); const HAL_RATE_TABLE *rt; @@ -2357,7 +2358,8 @@ struct ieee80211_frame *wh; wh = (struct ieee80211_frame *) skb->data; - try0 = ph->try0; +// try0 = ph->try0; + try0 = (ic->ic_opmode == IEEE80211_M_MONITOR) ? 1 : ph->try0; rt = sc->sc_currates; txrate = dot11_to_ratecode(sc, rt, ph->rate0); power = ph->power > 60 ? 60 : ph->power; @@ -2385,8 +2387,9 @@ rt = sc->sc_currates; KASSERT(rt != NULL, ("no rate table, mode %u", sc->sc_curmode)); - - if (IEEE80211_IS_MULTICAST(wh->i_addr1)) { + if (IEEE80211_IS_MULTICAST(wh->i_addr1) || ((ic->ic_opmode == + IEEE80211_M_MONITOR) && (skb->data[1]&3) != 0x01) ) { + flags |= HAL_TXDESC_NOACK; /* no ack on broad/multicast */ sc->sc_stats.ast_tx_noack++; try0 = 1; @@ -2394,7 +2397,6 @@ atype = HAL_PKT_TYPE_NORMAL; /* default */ txq = sc->sc_ac2q[skb->priority & 0x3]; - flags |= HAL_TXDESC_INTREQ; antenna = sc->sc_txantenna; @@ -3302,6 +3304,7 @@ { struct net_device *dev = vap->iv_ic->ic_dev; struct ath_softc *sc = dev->priv; + struct ieee80211com *ic = &sc->sc_ic; struct ath_hal *ah = sc->sc_ah; const struct ieee80211_cipher *cip = k->wk_cipher; struct ieee80211_node *ni;