2013-11-12 16:33:14

by Simon Wunderlich

[permalink] [raw]
Subject: [PATCH] iw: add support for 5 and 10 MHz channels in IBSS mode

5/10 MHz requires to send the frequency information as chandef instead
of the the old channel type, this change is included here as well.

Signed-off-by: Simon Wunderlich <[email protected]>
Signed-off-by: Mathias Kretschmer <[email protected]>
---
ibss.c | 39 +++++++++++++++++++++++----------------
1 file changed, 23 insertions(+), 16 deletions(-)

diff --git a/ibss.c b/ibss.c
index 955446e..3674c1f 100644
--- a/ibss.c
+++ b/ibss.c
@@ -30,16 +30,19 @@ 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;
+ } *chanmode_selected = NULL, chanmode[] = {
+ { .name = "HT20", .width = NL80211_CHAN_WIDTH_20, .freq1_diff = 0},
+ { .name = "HT40+", .width = NL80211_CHAN_WIDTH_40, .freq1_diff = 10},
+ { .name = "HT40-", .width = NL80211_CHAN_WIDTH_40, .freq1_diff = -10},
+ { .name = "NOHT", .width = NL80211_CHAN_WIDTH_20_NOHT, .freq1_diff = 0},
+ { .name = "5MHZ", .width = NL80211_CHAN_WIDTH_5, .freq1_diff = 0},
+ { .name = "10MHZ", .width = NL80211_CHAN_WIDTH_10, .freq1_diff = 0},
};
- unsigned int htval;

if (argc < 2)
return 1;
@@ -50,23 +53,27 @@ 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);
+
argv++;
argc--;
}
@@ -164,7 +171,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



2013-11-12 16:39:23

by Simon Wunderlich

[permalink] [raw]
Subject: Re: [PATCH] iw: add support for 5 and 10 MHz channels in IBSS mode


> On Tue, 2013-11-12 at 17:32 +0100, Simon Wunderlich wrote:
> > 5/10 MHz requires to send the frequency information as chandef instead
> > of the the old channel type, this change is included here as well.
>
> I think you need to keep the channel type to stay compatible with old
> kernels.
>

Wow, high-speed reply (1 minute 50 seconds), and you are right. :)

I'll change that so it uses chandef only for 5/10 MHz and the old channel
types for the rest (NOHT,HT20,HT40+,HT40-).

Thanks,
Simon

2013-11-12 16:34:54

by Johannes Berg

[permalink] [raw]
Subject: Re: [PATCH] iw: add support for 5 and 10 MHz channels in IBSS mode

On Tue, 2013-11-12 at 17:32 +0100, Simon Wunderlich wrote:
> 5/10 MHz requires to send the frequency information as chandef instead
> of the the old channel type, this change is included here as well.

I think you need to keep the channel type to stay compatible with old
kernels.

johannes


2013-11-12 16:42:08

by Johannes Berg

[permalink] [raw]
Subject: Re: [PATCH] iw: add support for 5 and 10 MHz channels in IBSS mode

On Tue, 2013-11-12 at 17:39 +0100, Simon Wunderlich wrote:
>
> > On Tue, 2013-11-12 at 17:32 +0100, Simon Wunderlich wrote:
> > > 5/10 MHz requires to send the frequency information as chandef instead
> > > of the the old channel type, this change is included here as well.
> >
> > I think you need to keep the channel type to stay compatible with old
> > kernels.
> >
>
> Wow, high-speed reply (1 minute 50 seconds), and you are right. :)

I needed most of that time to scan if you were really removing it ;-)

> I'll change that so it uses chandef only for 5/10 MHz and the old channel
> types for the rest (NOHT,HT20,HT40+,HT40-).

You could also add both attributes, but whichever is more convenient,
the kernel obviously has to support both too.

johannes