Linux wireless drivers development
 help / color / mirror / Atom feed
* [PATCH] mac80211: make noack test available
@ 2009-05-12 20:05 Johannes Berg
  2009-05-12 22:13 ` Gábor Stefanik
  0 siblings, 1 reply; 5+ messages in thread
From: Johannes Berg @ 2009-05-12 20:05 UTC (permalink / raw)
  To: John Linville; +Cc: linux-wireless

There's this internal wifi_wme_noack_test variable that
we use to set the QoS control if set. For one, it is
unlikely that it is set. Secondly, if set it needs to
influence the IEEE80211_TX_CTL_NO_ACK TX control flag,
and finally we should also be able to set it at all, so
make it available in debugfs.

Signed-off-by: Johannes Berg <johannes@sipsolutions.net>
---
 net/mac80211/debugfs.c     |   38 ++++++++++++++++++++++++++++++++++++++
 net/mac80211/ieee80211_i.h |    1 +
 net/mac80211/tx.c          |    5 ++++-
 net/mac80211/wme.c         |    2 +-
 4 files changed, 44 insertions(+), 2 deletions(-)

--- wireless-testing.orig/net/mac80211/tx.c	2009-05-12 21:44:01.000000000 +0200
+++ wireless-testing/net/mac80211/tx.c	2009-05-12 22:03:26.000000000 +0200
@@ -1087,7 +1087,10 @@ __ieee80211_tx_prepare(struct ieee80211_
 		info->flags |= IEEE80211_TX_CTL_NO_ACK;
 	} else {
 		tx->flags |= IEEE80211_TX_UNICAST;
-		info->flags &= ~IEEE80211_TX_CTL_NO_ACK;
+		if (unlikely(local->wifi_wme_noack_test))
+			info->flags |= IEEE80211_TX_CTL_NO_ACK;
+		else
+			info->flags &= ~IEEE80211_TX_CTL_NO_ACK;
 	}
 
 	if (tx->flags & IEEE80211_TX_FRAGMENTED) {
--- wireless-testing.orig/net/mac80211/debugfs.c	2009-05-12 21:45:00.000000000 +0200
+++ wireless-testing/net/mac80211/debugfs.c	2009-05-12 21:48:24.000000000 +0200
@@ -135,6 +135,42 @@ static const struct file_operations rese
 	.open = mac80211_open_file_generic,
 };
 
+static ssize_t noack_read(struct file *file, char __user *user_buf,
+			  size_t count, loff_t *ppos)
+{
+	struct ieee80211_local *local = file->private_data;
+	int res;
+	char buf[10];
+
+	res = scnprintf(buf, sizeof(buf), "%d\n", local->wifi_wme_noack_test);
+
+	return simple_read_from_buffer(user_buf, count, ppos, buf, res);
+}
+
+static ssize_t noack_write(struct file *file,
+			   const char __user *user_buf,
+			   size_t count, loff_t *ppos)
+{
+	struct ieee80211_local *local = file->private_data;
+	char buf[10];
+	size_t len;
+
+	len = min(count, sizeof(buf) - 1);
+	if (copy_from_user(buf, user_buf, len))
+		return -EFAULT;
+	buf[len] = '\0';
+
+	local->wifi_wme_noack_test = !!simple_strtoul(buf, NULL, 0);
+
+	return count;
+}
+
+static const struct file_operations noack_ops = {
+	.read = noack_read,
+	.write = noack_write,
+	.open = mac80211_open_file_generic
+};
+
 /* statistics stuff */
 
 #define DEBUGFS_STATS_FILE(name, buflen, fmt, value...)			\
@@ -275,6 +311,7 @@ void debugfs_hw_add(struct ieee80211_loc
 	DEBUGFS_ADD(wep_iv);
 	DEBUGFS_ADD(tsf);
 	DEBUGFS_ADD_MODE(reset, 0200);
+	DEBUGFS_ADD(noack);
 
 	statsd = debugfs_create_dir("statistics", phyd);
 	local->debugfs.statistics = statsd;
@@ -330,6 +367,7 @@ void debugfs_hw_del(struct ieee80211_loc
 	DEBUGFS_DEL(wep_iv);
 	DEBUGFS_DEL(tsf);
 	DEBUGFS_DEL(reset);
+	DEBUGFS_DEL(noack);
 
 	DEBUGFS_STATS_DEL(transmitted_fragment_count);
 	DEBUGFS_STATS_DEL(multicast_transmitted_frame_count);
--- wireless-testing.orig/net/mac80211/ieee80211_i.h	2009-05-12 21:48:30.000000000 +0200
+++ wireless-testing/net/mac80211/ieee80211_i.h	2009-05-12 21:48:37.000000000 +0200
@@ -766,6 +766,7 @@ struct ieee80211_local {
 		struct dentry *wep_iv;
 		struct dentry *tsf;
 		struct dentry *reset;
+		struct dentry *noack;
 		struct dentry *statistics;
 		struct local_debugfsdentries_statsdentries {
 			struct dentry *transmitted_fragment_count;
--- wireless-testing.orig/net/mac80211/wme.c	2009-05-12 21:43:32.000000000 +0200
+++ wireless-testing/net/mac80211/wme.c	2009-05-12 22:03:37.000000000 +0200
@@ -133,7 +133,7 @@ u16 ieee80211_select_queue(struct net_de
 		u8 *p = ieee80211_get_qos_ctl(hdr);
 		u8 ack_policy = 0;
 		tid = skb->priority & IEEE80211_QOS_CTL_TAG1D_MASK;
-		if (local->wifi_wme_noack_test)
+		if (unlikely(local->wifi_wme_noack_test))
 			ack_policy |= QOS_CONTROL_ACK_POLICY_NOACK <<
 					QOS_CONTROL_ACK_POLICY_SHIFT;
 		/* qos header is 2 bytes, second reserved */



^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [PATCH] mac80211: make noack test available
  2009-05-12 20:05 [PATCH] mac80211: make noack test available Johannes Berg
@ 2009-05-12 22:13 ` Gábor Stefanik
  2009-05-12 22:15   ` Johannes Berg
  0 siblings, 1 reply; 5+ messages in thread
From: Gábor Stefanik @ 2009-05-12 22:13 UTC (permalink / raw)
  To: Johannes Berg; +Cc: John Linville, linux-wireless

On Tue, May 12, 2009 at 10:05 PM, Johannes Berg
<johannes@sipsolutions.net> wrote:
> There's this internal wifi_wme_noack_test variable that
> we use to set the QoS control if set. For one, it is
> unlikely that it is set. Secondly, if set it needs to
> influence the IEEE80211_TX_CTL_NO_ACK TX control flag,
> and finally we should also be able to set it at all, so
> make it available in debugfs.
>
> Signed-off-by: Johannes Berg <johannes@sipsolutions.net>
> ---
> =A0net/mac80211/debugfs.c =A0 =A0 | =A0 38 ++++++++++++++++++++++++++=
++++++++++++
> =A0net/mac80211/ieee80211_i.h | =A0 =A01 +
> =A0net/mac80211/tx.c =A0 =A0 =A0 =A0 =A0| =A0 =A05 ++++-
> =A0net/mac80211/wme.c =A0 =A0 =A0 =A0 | =A0 =A02 +-
> =A04 files changed, 44 insertions(+), 2 deletions(-)
>
> --- wireless-testing.orig/net/mac80211/tx.c =A0 =A0 2009-05-12 21:44:=
01.000000000 +0200
> +++ wireless-testing/net/mac80211/tx.c =A02009-05-12 22:03:26.0000000=
00 +0200
> @@ -1087,7 +1087,10 @@ __ieee80211_tx_prepare(struct ieee80211_
> =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0info->flags |=3D IEEE80211_TX_CTL_NO_A=
CK;
> =A0 =A0 =A0 =A0} else {
> =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0tx->flags |=3D IEEE80211_TX_UNICAST;
> - =A0 =A0 =A0 =A0 =A0 =A0 =A0 info->flags &=3D ~IEEE80211_TX_CTL_NO_A=
CK;
> + =A0 =A0 =A0 =A0 =A0 =A0 =A0 if (unlikely(local->wifi_wme_noack_test=
))
> + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 info->flags |=3D IEEE80=
211_TX_CTL_NO_ACK;
> + =A0 =A0 =A0 =A0 =A0 =A0 =A0 else
> + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 info->flags &=3D ~IEEE8=
0211_TX_CTL_NO_ACK;
> =A0 =A0 =A0 =A0}

While you are at it, why not clean up this code completely? IMHO the
unset-bit operations are useless, given that both TX_UNICAST and
TX_CTL_NO_ACK are initialized to zero at the beginning of
__ieee80211_tx_prepare. This also makes it possible to set
TX_CTL_NO_ACK in a TX handler, which is IMO much nicer (not to mention
that it significantly simplifies the work needed to support Radiotap's
TX flags once they land).

(BTW should we implement the already-stable parts of TX flags now, or
is it a better idea to wait till it is final?)

--G=E1bor

--=20
Vista: [V]iruses, [I]ntruders, [S]pyware, [T]rojans and [A]dware. :-)
--
To unsubscribe from this list: send the line "unsubscribe linux-wireles=
s" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [PATCH] mac80211: make noack test available
  2009-05-12 22:13 ` Gábor Stefanik
@ 2009-05-12 22:15   ` Johannes Berg
  2009-05-12 22:18     ` Gábor Stefanik
  0 siblings, 1 reply; 5+ messages in thread
From: Johannes Berg @ 2009-05-12 22:15 UTC (permalink / raw)
  To: Gábor Stefanik; +Cc: John Linville, linux-wireless

[-- Attachment #1: Type: text/plain, Size: 2234 bytes --]

On Wed, 2009-05-13 at 00:13 +0200, Gábor Stefanik wrote:
> On Tue, May 12, 2009 at 10:05 PM, Johannes Berg
> <johannes@sipsolutions.net> wrote:
> > There's this internal wifi_wme_noack_test variable that
> > we use to set the QoS control if set. For one, it is
> > unlikely that it is set. Secondly, if set it needs to
> > influence the IEEE80211_TX_CTL_NO_ACK TX control flag,
> > and finally we should also be able to set it at all, so
> > make it available in debugfs.
> >
> > Signed-off-by: Johannes Berg <johannes@sipsolutions.net>
> > ---
> >  net/mac80211/debugfs.c     |   38 ++++++++++++++++++++++++++++++++++++++
> >  net/mac80211/ieee80211_i.h |    1 +
> >  net/mac80211/tx.c          |    5 ++++-
> >  net/mac80211/wme.c         |    2 +-
> >  4 files changed, 44 insertions(+), 2 deletions(-)
> >
> > --- wireless-testing.orig/net/mac80211/tx.c     2009-05-12 21:44:01.000000000 +0200
> > +++ wireless-testing/net/mac80211/tx.c  2009-05-12 22:03:26.000000000 +0200
> > @@ -1087,7 +1087,10 @@ __ieee80211_tx_prepare(struct ieee80211_
> >                info->flags |= IEEE80211_TX_CTL_NO_ACK;
> >        } else {
> >                tx->flags |= IEEE80211_TX_UNICAST;
> > -               info->flags &= ~IEEE80211_TX_CTL_NO_ACK;
> > +               if (unlikely(local->wifi_wme_noack_test))
> > +                       info->flags |= IEEE80211_TX_CTL_NO_ACK;
> > +               else
> > +                       info->flags &= ~IEEE80211_TX_CTL_NO_ACK;
> >        }
> 
> While you are at it, why not clean up this code completely? 

Because I'm lazy.

> IMHO the
> unset-bit operations are useless, given that both TX_UNICAST and
> TX_CTL_NO_ACK are initialized to zero at the beginning of
> __ieee80211_tx_prepare. 

Probably. But it works, why change it :)

> This also makes it possible to set
> TX_CTL_NO_ACK in a TX handler, which is IMO much nicer (not to mention
> that it significantly simplifies the work needed to support Radiotap's
> TX flags once they land).

That seems to serve only you ;)

> (BTW should we implement the already-stable parts of TX flags now, or
> is it a better idea to wait till it is final?)

Wait until it's final please.

johannes

[-- Attachment #2: This is a digitally signed message part --]
[-- Type: application/pgp-signature, Size: 801 bytes --]

^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [PATCH] mac80211: make noack test available
  2009-05-12 22:15   ` Johannes Berg
@ 2009-05-12 22:18     ` Gábor Stefanik
  2009-05-12 22:20       ` Johannes Berg
  0 siblings, 1 reply; 5+ messages in thread
From: Gábor Stefanik @ 2009-05-12 22:18 UTC (permalink / raw)
  To: Johannes Berg; +Cc: John Linville, linux-wireless

2009/5/13 Johannes Berg <johannes@sipsolutions.net>:
> On Wed, 2009-05-13 at 00:13 +0200, G=E1bor Stefanik wrote:
>> On Tue, May 12, 2009 at 10:05 PM, Johannes Berg
>> <johannes@sipsolutions.net> wrote:
>> > There's this internal wifi_wme_noack_test variable that
>> > we use to set the QoS control if set. For one, it is
>> > unlikely that it is set. Secondly, if set it needs to
>> > influence the IEEE80211_TX_CTL_NO_ACK TX control flag,
>> > and finally we should also be able to set it at all, so
>> > make it available in debugfs.
>> >
>> > Signed-off-by: Johannes Berg <johannes@sipsolutions.net>
>> > ---
>> > =A0net/mac80211/debugfs.c =A0 =A0 | =A0 38 +++++++++++++++++++++++=
+++++++++++++++
>> > =A0net/mac80211/ieee80211_i.h | =A0 =A01 +
>> > =A0net/mac80211/tx.c =A0 =A0 =A0 =A0 =A0| =A0 =A05 ++++-
>> > =A0net/mac80211/wme.c =A0 =A0 =A0 =A0 | =A0 =A02 +-
>> > =A04 files changed, 44 insertions(+), 2 deletions(-)
>> >
>> > --- wireless-testing.orig/net/mac80211/tx.c =A0 =A0 2009-05-12 21:=
44:01.000000000 +0200
>> > +++ wireless-testing/net/mac80211/tx.c =A02009-05-12 22:03:26.0000=
00000 +0200
>> > @@ -1087,7 +1087,10 @@ __ieee80211_tx_prepare(struct ieee80211_
>> > =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0info->flags |=3D IEEE80211_TX_CTL_N=
O_ACK;
>> > =A0 =A0 =A0 =A0} else {
>> > =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0tx->flags |=3D IEEE80211_TX_UNICAST=
;
>> > - =A0 =A0 =A0 =A0 =A0 =A0 =A0 info->flags &=3D ~IEEE80211_TX_CTL_N=
O_ACK;
>> > + =A0 =A0 =A0 =A0 =A0 =A0 =A0 if (unlikely(local->wifi_wme_noack_t=
est))
>> > + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 info->flags |=3D IEE=
E80211_TX_CTL_NO_ACK;
>> > + =A0 =A0 =A0 =A0 =A0 =A0 =A0 else
>> > + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 info->flags &=3D ~IE=
EE80211_TX_CTL_NO_ACK;
>> > =A0 =A0 =A0 =A0}
>>
>> While you are at it, why not clean up this code completely?
>
> Because I'm lazy.
>
>> IMHO the
>> unset-bit operations are useless, given that both TX_UNICAST and
>> TX_CTL_NO_ACK are initialized to zero at the beginning of
>> __ieee80211_tx_prepare.
>
> Probably. But it works, why change it :)
>
>> This also makes it possible to set
>> TX_CTL_NO_ACK in a TX handler, which is IMO much nicer (not to menti=
on
>> that it significantly simplifies the work needed to support Radiotap=
's
>> TX flags once they land).
>
> That seems to serve only you ;)

I mean, you can put the noack_test check in a more relevant part of
the code if we don't re-zero these bits in tx_prepare.

>
>> (BTW should we implement the already-stable parts of TX flags now, o=
r
>> is it a better idea to wait till it is final?)
>
> Wait until it's final please.
>
> johannes
>



--=20
Vista: [V]iruses, [I]ntruders, [S]pyware, [T]rojans and [A]dware. :-)
--
To unsubscribe from this list: send the line "unsubscribe linux-wireles=
s" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [PATCH] mac80211: make noack test available
  2009-05-12 22:18     ` Gábor Stefanik
@ 2009-05-12 22:20       ` Johannes Berg
  0 siblings, 0 replies; 5+ messages in thread
From: Johannes Berg @ 2009-05-12 22:20 UTC (permalink / raw)
  To: Gábor Stefanik; +Cc: John Linville, linux-wireless

[-- Attachment #1: Type: text/plain, Size: 817 bytes --]

On Wed, 2009-05-13 at 00:18 +0200, Gábor Stefanik wrote:

> >> IMHO the
> >> unset-bit operations are useless, given that both TX_UNICAST and
> >> TX_CTL_NO_ACK are initialized to zero at the beginning of
> >> __ieee80211_tx_prepare.
> >
> > Probably. But it works, why change it :)
> >
> >> This also makes it possible to set
> >> TX_CTL_NO_ACK in a TX handler, which is IMO much nicer (not to mention
> >> that it significantly simplifies the work needed to support Radiotap's
> >> TX flags once they land).
> >
> > That seems to serve only you ;)
> 
> I mean, you can put the noack_test check in a more relevant part of
> the code if we don't re-zero these bits in tx_prepare.

Huh? What part of the code would be more relevant to that than the bit
where it checks for mcast etc?

johannes

[-- Attachment #2: This is a digitally signed message part --]
[-- Type: application/pgp-signature, Size: 801 bytes --]

^ permalink raw reply	[flat|nested] 5+ messages in thread

end of thread, other threads:[~2009-05-12 22:21 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2009-05-12 20:05 [PATCH] mac80211: make noack test available Johannes Berg
2009-05-12 22:13 ` Gábor Stefanik
2009-05-12 22:15   ` Johannes Berg
2009-05-12 22:18     ` Gábor Stefanik
2009-05-12 22:20       ` Johannes Berg

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox