mirror of https://github.com/hak5/openwrt-owl.git
iw: add VHT80 support for IBSS
Signed-off-by: Sven Eckelmann <sven@open-mesh.com> SVN-Revision: 47780owl
parent
9dd65e5493
commit
5425d27339
|
@ -0,0 +1,104 @@
|
||||||
|
From: "Janusz.Dziedzic@tieto.com" <Janusz.Dziedzic@tieto.com>
|
||||||
|
Date: Thu, 10 Sep 2015 12:04:13 +0200
|
||||||
|
Subject: ibss: add VHT80 support for IBSS
|
||||||
|
|
||||||
|
Add VHT80 support for IBSS.
|
||||||
|
|
||||||
|
eg. iw wlan0 ibss join 5180 80MHZ
|
||||||
|
iw wlan0 ibbs join 5220 80MHZ
|
||||||
|
|
||||||
|
Signed-off-by: Janusz Dziedzic <janusz.dziedzic@tieto.com>
|
||||||
|
[fix formatting]
|
||||||
|
Signed-off-by: Johannes Berg <johannes.berg@intel.com>
|
||||||
|
---
|
||||||
|
ibss.c | 49 +++++++++++++++++++++++++++++++++++++++++--------
|
||||||
|
1 file changed, 41 insertions(+), 8 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/ibss.c b/ibss.c
|
||||||
|
index 7a0b707..a99a262 100644
|
||||||
|
--- a/ibss.c
|
||||||
|
+++ b/ibss.c
|
||||||
|
@@ -16,6 +16,39 @@
|
||||||
|
|
||||||
|
SECTION(ibss);
|
||||||
|
|
||||||
|
+struct chanmode {
|
||||||
|
+ const char *name;
|
||||||
|
+ unsigned int width;
|
||||||
|
+ int freq1_diff;
|
||||||
|
+ int chantype; /* for older kernel */
|
||||||
|
+};
|
||||||
|
+
|
||||||
|
+static int get_cf1(const struct chanmode *chanmode, unsigned long freq)
|
||||||
|
+{
|
||||||
|
+ int cf1 = freq, j;
|
||||||
|
+ int vht80[] = { 5180, 5260, 5500, 5580, 5660, 5745 };
|
||||||
|
+
|
||||||
|
+ switch (chanmode->width) {
|
||||||
|
+ case NL80211_CHAN_WIDTH_80:
|
||||||
|
+ /* setup center_freq1 */
|
||||||
|
+ for (j = 0; j < ARRAY_SIZE(vht80); j++) {
|
||||||
|
+ if (freq >= vht80[j] && freq < vht80[j] + 80)
|
||||||
|
+ break;
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ if (j == ARRAY_SIZE(vht80))
|
||||||
|
+ break;
|
||||||
|
+
|
||||||
|
+ cf1 = vht80[j] + 30;
|
||||||
|
+ break;
|
||||||
|
+ default:
|
||||||
|
+ cf1 = freq + chanmode->freq1_diff;
|
||||||
|
+ break;
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ return cf1;
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
static int join_ibss(struct nl80211_state *state,
|
||||||
|
struct nl_msg *msg,
|
||||||
|
int argc, char **argv,
|
||||||
|
@@ -30,12 +63,8 @@ static int join_ibss(struct nl80211_state *state,
|
||||||
|
int bintval;
|
||||||
|
int i;
|
||||||
|
unsigned long freq;
|
||||||
|
- static const struct {
|
||||||
|
- const char *name;
|
||||||
|
- unsigned int width;
|
||||||
|
- int freq1_diff;
|
||||||
|
- int chantype; /* for older kernel */
|
||||||
|
- } *chanmode_selected = NULL, chanmode[] = {
|
||||||
|
+ const struct chanmode *chanmode_selected = NULL;
|
||||||
|
+ static const struct chanmode chanmode[] = {
|
||||||
|
{ .name = "HT20",
|
||||||
|
.width = NL80211_CHAN_WIDTH_20,
|
||||||
|
.freq1_diff = 0,
|
||||||
|
@@ -60,6 +89,10 @@ static int join_ibss(struct nl80211_state *state,
|
||||||
|
.width = NL80211_CHAN_WIDTH_10,
|
||||||
|
.freq1_diff = 0,
|
||||||
|
.chantype = -1 },
|
||||||
|
+ { .name = "80MHZ",
|
||||||
|
+ .width = NL80211_CHAN_WIDTH_80,
|
||||||
|
+ .freq1_diff = 0,
|
||||||
|
+ .chantype = -1 },
|
||||||
|
};
|
||||||
|
|
||||||
|
if (argc < 2)
|
||||||
|
@@ -90,7 +123,7 @@ static int join_ibss(struct nl80211_state *state,
|
||||||
|
NLA_PUT_U32(msg, NL80211_ATTR_CHANNEL_WIDTH,
|
||||||
|
chanmode_selected->width);
|
||||||
|
NLA_PUT_U32(msg, NL80211_ATTR_CENTER_FREQ1,
|
||||||
|
- freq + chanmode_selected->freq1_diff);
|
||||||
|
+ get_cf1(chanmode_selected, freq));
|
||||||
|
if (chanmode_selected->chantype != -1)
|
||||||
|
NLA_PUT_U32(msg,
|
||||||
|
NL80211_ATTR_WIPHY_CHANNEL_TYPE,
|
||||||
|
@@ -192,7 +225,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|5MHZ|10MHZ] [fixed-freq] [<fixed bssid>] [beacon-interval <TU>]"
|
||||||
|
+ "<SSID> <freq in MHz> [HT20|HT40+|HT40-|NOHT|5MHZ|10MHZ|80MHZ] [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,
|
|
@ -0,0 +1,41 @@
|
||||||
|
From: Johannes Berg <johannes.berg@intel.com>
|
||||||
|
Date: Fri, 18 Sep 2015 11:11:38 +0200
|
||||||
|
Subject: ibss: use correct "MHz" instead of "MHZ"
|
||||||
|
|
||||||
|
Signed-off-by: Johannes Berg <johannes.berg@intel.com>
|
||||||
|
---
|
||||||
|
ibss.c | 8 ++++----
|
||||||
|
1 file changed, 4 insertions(+), 4 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/ibss.c b/ibss.c
|
||||||
|
index a99a262..23bda70 100644
|
||||||
|
--- a/ibss.c
|
||||||
|
+++ b/ibss.c
|
||||||
|
@@ -81,15 +81,15 @@ static int join_ibss(struct nl80211_state *state,
|
||||||
|
.width = NL80211_CHAN_WIDTH_20_NOHT,
|
||||||
|
.freq1_diff = 0,
|
||||||
|
.chantype = NL80211_CHAN_NO_HT },
|
||||||
|
- { .name = "5MHZ",
|
||||||
|
+ { .name = "5MHz",
|
||||||
|
.width = NL80211_CHAN_WIDTH_5,
|
||||||
|
.freq1_diff = 0,
|
||||||
|
.chantype = -1 },
|
||||||
|
- { .name = "10MHZ",
|
||||||
|
+ { .name = "10MHz",
|
||||||
|
.width = NL80211_CHAN_WIDTH_10,
|
||||||
|
.freq1_diff = 0,
|
||||||
|
.chantype = -1 },
|
||||||
|
- { .name = "80MHZ",
|
||||||
|
+ { .name = "80MHz",
|
||||||
|
.width = NL80211_CHAN_WIDTH_80,
|
||||||
|
.freq1_diff = 0,
|
||||||
|
.chantype = -1 },
|
||||||
|
@@ -225,7 +225,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|5MHZ|10MHZ|80MHZ] [fixed-freq] [<fixed bssid>] [beacon-interval <TU>]"
|
||||||
|
+ "<SSID> <freq in MHz> [HT20|HT40+|HT40-|NOHT|5MHz|10MHz|80MHz] [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,
|
Loading…
Reference in New Issue