> /* drop all data frame if we are not associated */ > if ((!iwl3945_is_associated(priv) || > ((priv->iw_mode == IEEE80211_IF_TYPE_STA) && !priv->assoc_id)) && > - ((fc & IEEE80211_FCTL_FTYPE) == IEEE80211_FTYPE_DATA)) { > + ((fc & IEEE80211_FCTL_FTYPE) == IEEE80211_FTYPE_DATA) && priv->vif) { > IWL_DEBUG_DROP("Dropping - !iwl3945_is_associated\n"); > goto drop_unlock; > } That code is completely bogus anyway IMO, it should just be removed. > /* Find (or create) index into station table for destination station */ > sta_id = iwl3945_get_sta_id(priv, hdr); > if (sta_id == IWL_INVALID_STATION) { > DECLARE_MAC_BUF(mac); > > - IWL_DEBUG_DROP("Dropping - INVALID STATION: %s\n", > - print_mac(mac, hdr->addr1)); > - goto drop; > + if (priv->vif) { > + IWL_DEBUG_DROP("Dropping - INVALID STATION: %s\n", > + print_mac(mac, hdr->addr1)); > + goto drop; > + } > + sta_id = priv->hw_setting.bcast_sta_id; > } Same here, why drop a frame if there's no station for it, that just means you can't do hw encryption which, well, cannot happen anyway since mac80211 would tell you about the station for hw crypto. > - if (priv->iw_mode == IEEE80211_IF_TYPE_MNTR) { > + if (priv->iw_mode == IEEE80211_IF_TYPE_MNTR && 0) { > IWL_DEBUG_MAC80211("leave - monitor\n"); > return -1; > } That's the code I was complaining about. Just kill it if it works then. > /* drop all data frame if we are not associated */ > if (((fc & IEEE80211_FCTL_FTYPE) == IEEE80211_FTYPE_DATA) && > - (!iwl_is_associated(priv) || > + priv->vif && (!iwl_is_associated(priv) || > ((priv->iw_mode == IEEE80211_IF_TYPE_STA) && !priv->assoc_id) || > !priv->assoc_station_added)) { > IWL_DEBUG_DROP("Dropping - !iwl_is_associated\n"); > goto drop_unlock; > } Same code, other driver. What are you doing poking with the 802.11 frames you're supposed to transmit anyway? I wish you guys at Intel would trust mac80211 and not try to work around it all the time. johannes
Attachment:
signature.asc
Description: This is a digitally signed message part