On Thu, 2007-03-29 at 12:14 +0100, Andy Green wrote: > >> + static const u8 radiotap_entry_sizes[] = { > >> + 8, /* IEEE80211_RADIOTAP_TSFT */ > >> + 1, /* IEEE80211_RADIOTAP_FLAGS */ > > [...] > > > > I'd prefer C99 style for this. > > Shocked that stuff from as late as 1999 is allowed. I normally use // > myself, I was making a special effort. Oh, dang, that was ambiguous. I was thinking static const u8 radiotap_entry_sizes[] = { [IEEE80211_RADIOTAP_TSFT] = 8, ... > Yes to cover more usage cases setting more things is needed. The game > seems to be to set the elements of the control struct from the radiotap > header. For clear discussion here is the list of things that can be set > in control, first the ones we allow control of with this patch > > int tx_rate; /* Transmit rate, given as the hw specific value for the > * rate (from struct ieee80211_rate) */ > u8 power_level; /* per-packet transmit power level, in dBm */ > u8 antenna_sel_tx; /* 0 = default/diversity, 1 = Ant0, 2 = Ant1 */ > > > and the ones we might possibly want to fiddle with > > int rts_cts_rate; /* Transmit rate for RTS/CTS frame, given as the hw > * specific value for the rate (from > * struct ieee80211_rate) */ > u32 flags; /* tx control flags defined > * above */ > u8 retry_limit; /* 1 = only first attempt, 2 = one retry, .. */ > s8 key_idx; /* -1 = do not encrypt, >= 0 keyidx from > * hw->set_key() */ > u8 icv_len; /* length of the ICV/MIC field in octets */ > u8 iv_len; /* length of the IV field in octets */ > u8 tkip_key[16]; /* generated phase2/phase1 key for hw TKIP */ > u8 queue; /* hardware queue to use for this frame; > * 0 = highest, hw->queues-1 = lowest */ > u8 sw_retry_attempt; /* number of times hw has tried to > * transmit frame (not incl. hw retries) */ > int alt_retry_rate; /* retry rate for the last retries, given as the > * hw specific value for the rate (from > * struct ieee80211_rate). To be used to limit > * packet dropping when probing higher rates, if hw > * supports multiple retry rates. -1 = not used */ > > the flags are these > > #define IEEE80211_TXCTL_REQ_TX_STATUS (1<<0)/* request TX status > callback for > * this frame */ > #define IEEE80211_TXCTL_DO_NOT_ENCRYPT (1<<1) /* send this frame without > * encryption; e.g., for EAPOL > * frames */ > #define IEEE80211_TXCTL_USE_RTS_CTS (1<<2) /* use RTS-CTS before sending > * frame */ > #define IEEE80211_TXCTL_USE_CTS_PROTECT (1<<3) /* use CTS protection for the > * frame (e.g., for combined > * 802.11g / 802.11b networks) */ > #define IEEE80211_TXCTL_NO_ACK (1<<4) /* tell the low level not to > * wait for an ack */ > #define IEEE80211_TXCTL_RATE_CTRL_PROBE (1<<5) > #define IEEE80211_TXCTL_CLEAR_DST_MASK (1<<6) > #define IEEE80211_TXCTL_REQUEUE (1<<7) > #define IEEE80211_TXCTL_FIRST_FRAGMENT (1<<8) /* this is a first fragment of > * the frame */ > #define IEEE80211_TXCTL_TKIP_NEW_PHASE1_KEY (1<<9) > > I guess the method is to work out what is useful to control and to > define a minimal set of new radiotap arg indexes to cover them, and > propose it to the radiotap folks. Yeah, not really necessary right from the start anyway. It's doable which is/was my biggest concern. > The idea here is to synthesize an rx packet later after the tx has > happened, reflecting the tx status back to userspace that way (if he > elects to listen out for them)? Yeah. Michael Wu says we don't need the magic cookie though. johannes
Attachment:
signature.asc
Description: This is a digitally signed message part