David - how long does the data flow need to be stopped when radar is detected? If it's a short time it would be better to buffer the data frames, if the connection can be disabled for a long time then dropping them might be better.
There is one other application where data frames should be buffered - in a client while roaming between 2 APs. The best way to implement this will be to extend the 802.11 qdisc. Currently there are 4 queues, representing the 4 EDCA access categories. Only the top AC (AC_VO) is used for sending management frames. I would recommend we split the qdisc, so that there are 2 software queues attached to this AC - one for management frames and 802.1x, and another for data frames. This way if we want to stop data (either for radar, or because we are mid BSS transition) we can simply stop all the queues except the AC_VO management queue. Simon -----Original Message----- From: [EMAIL PROTECTED] [mailto:[EMAIL PROTECTED] On Behalf Of Johannes Berg Sent: Wednesday, August 23, 2006 12:25 AM To: David Kimdon Cc: netdev@vger.kernel.org; John W. Linville; Jiri Benc Subject: Re: [patch 5/5] d80211: add ioctl to stop data frame tx On Tue, 2006-08-22 at 10:34 -0700, David Kimdon wrote: > This ioctl is used when radar is delected on a channel. Data frames > must stop but management frames must be allowed to continue for some > time to communicate the channel switch to stations. Which does lead to the question: How are you detecting radar in userspace in the first place?? > + if (unlikely(local->stop_data_frame_tx)) { > + struct ieee80211_hdr *hdr = (struct ieee80211_hdr *) skb->data; > + u16 fc = le16_to_cpu(hdr->frame_control); > + if ((fc & IEEE80211_FCTL_FTYPE) == IEEE80211_FTYPE_DATA) { > + dev_kfree_skb(skb); > + return 0; > + } > + } Should that really drop dataframes dead on the floor? And wouldn't it make sense stop the networking layer from injecting more data into the stack when stop_data_frame_tx is enabled? > +static int ieee80211_ioctl_set_stop_data_frame_tx(struct net_device *dev, > + int val) { > + struct ieee80211_local *local = dev->ieee80211_ptr; > + local->stop_data_frame_tx = val; > + return 0; > +} Again, whitespace damaged. Yes, I know it's hard to code in there with any smart editor that thinks it knows what to do based on the surroundings because those may also contain whitespace... > + ret = ieee80211_ioctl_set_stop_data_frame_tx(dev, > + value); Ditto. johannes - To unsubscribe from this list: send the line "unsubscribe netdev" in the body of a message to [EMAIL PROTECTED] More majordomo info at http://vger.kernel.org/majordomo-info.html - To unsubscribe from this list: send the line "unsubscribe netdev" in the body of a message to [EMAIL PROTECTED] More majordomo info at http://vger.kernel.org/majordomo-info.html