linux-wireless.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCHv2] iw: add support for 5 and 10 MHz channels in IBSS mode
@ 2013-11-12 17:31 Simon Wunderlich
  2013-11-13 18:25 ` Johannes Berg
  0 siblings, 1 reply; 2+ messages in thread
From: Simon Wunderlich @ 2013-11-12 17:31 UTC (permalink / raw)
  To: johannes; +Cc: linux-wireless, Simon Wunderlich, Mathias Kretschmer

5/10 MHz requires to send the frequency information as chandef instead
of the the old channel type, therfore send the chandef next the channel
type (the latter is still used for old kernels).

Signed-off-by: Simon Wunderlich <sw@simonwunderlich.de>
Signed-off-by: Mathias Kretschmer <mathias.kretschmer@fokus.fraunhofer.de>
---
Changes to PATCH:
 * also send old channel type to keep compatibility for older kernels
---
 ibss.c |   62 ++++++++++++++++++++++++++++++++++++++++++++++----------------
 1 file changed, 46 insertions(+), 16 deletions(-)

diff --git a/ibss.c b/ibss.c
index 955446e..1bf1bab 100644
--- a/ibss.c
+++ b/ibss.c
@@ -30,16 +30,38 @@ static int join_ibss(struct nl80211_state *state,
 	float rate;
 	int bintval;
 	int i;
+	unsigned long freq;
 	static const struct {
 		const char *name;
-		unsigned int val;
-	} htmap[] = {
-		{ .name = "HT20", .val = NL80211_CHAN_HT20, },
-		{ .name = "HT40+", .val = NL80211_CHAN_HT40PLUS, },
-		{ .name = "HT40-", .val = NL80211_CHAN_HT40MINUS, },
-		{ .name = "NOHT", .val = NL80211_CHAN_NO_HT, },
+		unsigned int width;
+		int freq1_diff;
+		int chantype; /* for older kernel */
+	} *chanmode_selected = NULL, chanmode[] = {
+		{ .name = "HT20",
+		  .width = NL80211_CHAN_WIDTH_20,
+		  .freq1_diff = 0,
+		  .chantype = NL80211_CHAN_HT20 },
+		{ .name = "HT40+",
+		  .width = NL80211_CHAN_WIDTH_40,
+		  .freq1_diff = 10,
+		  .chantype = NL80211_CHAN_HT40PLUS },
+		{ .name = "HT40-",
+		  .width = NL80211_CHAN_WIDTH_40,
+		  .freq1_diff = -10,
+		  .chantype = NL80211_CHAN_HT40MINUS },
+		{ .name = "NOHT",
+		  .width = NL80211_CHAN_WIDTH_20_NOHT,
+		  .freq1_diff = 0,
+		  .chantype = NL80211_CHAN_NO_HT },
+		{ .name = "5MHZ",
+		  .width = NL80211_CHAN_WIDTH_5,
+		  .freq1_diff = 0,
+		  .chantype = -1 },
+		{ .name = "10MHZ",
+		  .width = NL80211_CHAN_WIDTH_10,
+		  .freq1_diff = 0,
+		  .chantype = -1 },
 	};
-	unsigned int htval;
 
 	if (argc < 2)
 		return 1;
@@ -50,23 +72,31 @@ static int join_ibss(struct nl80211_state *state,
 	argc--;
 
 	/* freq */
-	NLA_PUT_U32(msg, NL80211_ATTR_WIPHY_FREQ,
-		    strtoul(argv[0], &end, 10));
+	freq = strtoul(argv[0], &end, 10);
 	if (*end != '\0')
 		return 1;
+
+	NLA_PUT_U32(msg, NL80211_ATTR_WIPHY_FREQ, freq);
 	argv++;
 	argc--;
 
 	if (argc) {
-		for (i = 0; i < ARRAY_SIZE(htmap); i++) {
-			if (strcasecmp(htmap[i].name, argv[0]) == 0) {
-				htval = htmap[i].val;
+		for (i = 0; i < ARRAY_SIZE(chanmode); i++) {
+			if (strcasecmp(chanmode[i].name, argv[0]) == 0) {
+				chanmode_selected = &chanmode[i];
 				break;
 			}
 		}
-		if (i != ARRAY_SIZE(htmap)) {
-			NLA_PUT_U32(msg, NL80211_ATTR_WIPHY_CHANNEL_TYPE,
-				    htval);
+		if (chanmode_selected) {
+			NLA_PUT_U32(msg, NL80211_ATTR_CHANNEL_WIDTH,
+				    chanmode_selected->width);
+			NLA_PUT_U32(msg, NL80211_ATTR_CENTER_FREQ1,
+				    freq + chanmode_selected->freq1_diff);
+			if (chanmode_selected->chantype != -1)
+				NLA_PUT_U32(msg,
+					    NL80211_ATTR_WIPHY_CHANNEL_TYPE,
+					    chanmode_selected->chantype);
+
 			argv++;
 			argc--;
 		}
@@ -164,7 +194,7 @@ COMMAND(ibss, leave, NULL,
 	NL80211_CMD_LEAVE_IBSS, 0, CIB_NETDEV, leave_ibss,
 	"Leave the current IBSS cell.");
 COMMAND(ibss, join,
-	"<SSID> <freq in MHz> [HT20|HT40+|HT40-|NOHT] [fixed-freq] [<fixed bssid>] [beacon-interval <TU>]"
+	"<SSID> <freq in MHz> [HT20|HT40+|HT40-|NOHT|5MHZ|10MHZ] [fixed-freq] [<fixed bssid>] [beacon-interval <TU>]"
 	" [basic-rates <rate in Mbps,rate2,...>] [mcast-rate <rate in Mbps>] "
 	"[key d:0:abcde]",
 	NL80211_CMD_JOIN_IBSS, 0, CIB_NETDEV, join_ibss,
-- 
1.7.10.4


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

* Re: [PATCHv2] iw: add support for 5 and 10 MHz channels in IBSS mode
  2013-11-12 17:31 [PATCHv2] iw: add support for 5 and 10 MHz channels in IBSS mode Simon Wunderlich
@ 2013-11-13 18:25 ` Johannes Berg
  0 siblings, 0 replies; 2+ messages in thread
From: Johannes Berg @ 2013-11-13 18:25 UTC (permalink / raw)
  To: Simon Wunderlich; +Cc: linux-wireless, Mathias Kretschmer

On Tue, 2013-11-12 at 18:31 +0100, Simon Wunderlich wrote:
> 5/10 MHz requires to send the frequency information as chandef instead
> of the the old channel type, therfore send the chandef next the channel
> type (the latter is still used for old kernels).

Applied.

johannes


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

end of thread, other threads:[~2013-11-13 18:25 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2013-11-12 17:31 [PATCHv2] iw: add support for 5 and 10 MHz channels in IBSS mode Simon Wunderlich
2013-11-13 18:25 ` Johannes Berg

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).