Vitalik Nikolyenko a écrit : > Hi! Injecting cooked frames in monitor mode (default ath5k in 2.6.32) > does not > preserve sequence numbers even though IEEE80211_TX_CTL_ASSIGN_SEQ is > not set. > I'm not sure if this has been fixed in newer releases and if so, > please ignore > me. The patch is attached below. > > --- linux-2.6.32/drivers/net/wireless/ath/ath5k/base.c 2009-12-03 > 14:51:21.000000000 +1100 > +++ linux/drivers/net/wireless/ath/ath5k/base.c 2010-01-12 > 12:12:06.000000000 +1100 > @@ -1236,6 +1236,7 @@ > u16 cts_rate = 0; > u16 duration = 0; > u8 rc_flags; > + u32 staid; > > flags = AR5K_TXDESC_INTREQ | AR5K_TXDESC_CLRDMASK; > > @@ -1248,6 +1249,19 @@ > if (info->flags & IEEE80211_TX_CTL_NO_ACK) > flags |= AR5K_TXDESC_NOACK; > > + /* Don't assign sequence numbers when > + * IEEE80211_TX_CTL_ASSIGN_SEQ is not set > + * (required for monitor mode) > + */ > + if (!(info->flags & IEEE80211_TX_CTL_ASSIGN_SEQ)) { > + staid = ath5k_hw_reg_read(ah, AR5K_STA_ID1); > + > + if (!(staid & AR5K_STA_ID1_PRESERVE_SEQ_NUM)) { > + staid |= AR5K_STA_ID1_PRESERVE_SEQ_NUM; > + ath5k_hw_reg_write(ah, staid, AR5K_STA_ID1); > + } > + } > + > rc_flags = info->control.rates[0].flags; > hw_rate = (rc_flags & IEEE80211_TX_RC_USE_SHORT_PREAMBLE) ? > rate->hw_value_short : rate->hw_value; > Hello Vitalik,
That's interesting. I tried to achieve the same thing. I found that in monitor mode, some fields are modified by mac80211 as well. So do you try to preserve what mac80211 has computed or what was originally written in the injected frame from your user application? Regards, Benoit _______________________________________________ ath5k-devel mailing list ath5k-devel@lists.ath5k.org https://lists.ath5k.org/mailman/listinfo/ath5k-devel