aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorFelix Fietkau <nbd@openwrt.org>2014-09-27 21:19:27 +0000
committerFelix Fietkau <nbd@openwrt.org>2014-09-27 21:19:27 +0000
commitca25f76e8210aaa553b499daa46d13ea060eb6d8 (patch)
tree055926518943fca1382df794e1a8910d4c02609c
parentd27893122db78513393105bc3e4873d068822454 (diff)
downloadupstream-ca25f76e8210aaa553b499daa46d13ea060eb6d8.tar.gz
upstream-ca25f76e8210aaa553b499daa46d13ea060eb6d8.tar.bz2
upstream-ca25f76e8210aaa553b499daa46d13ea060eb6d8.zip
iw: add support for dynamic distance selection (supported by ath9k now)
Signed-off-by: Felix Fietkau <nbd@openwrt.org> SVN-Revision: 42689
-rw-r--r--package/network/utils/iw/patches/010-dynack.patch94
-rw-r--r--package/network/utils/iw/patches/120-antenna_gain.patch2
-rw-r--r--package/network/utils/iw/patches/200-reduce_size.patch10
3 files changed, 100 insertions, 6 deletions
diff --git a/package/network/utils/iw/patches/010-dynack.patch b/package/network/utils/iw/patches/010-dynack.patch
new file mode 100644
index 0000000000..00e4bf2467
--- /dev/null
+++ b/package/network/utils/iw/patches/010-dynack.patch
@@ -0,0 +1,94 @@
+
+
+Add auto parameter to set distance command in order to enable ACK timeout
+estimation algorithm (dynack). Dynack is automatically disabled setting valid
+value for coverage class. Currently dynack is supported just by ath9k
+
+This patch is based on "configure dynack through mac80211/cfg80211 stack"
+patchset sent on linux-wireless
+
+Signed-off-by: Lorenzo Bianconi <lorenzo.bianconi83@gmail.com>
+---
+ info.c | 2 ++
+ nl80211.h | 12 ++++++++++++
+ phy.c | 43 +++++++++++++++++++++++++------------------
+ 3 files changed, 39 insertions(+), 18 deletions(-)
+
+--- a/info.c
++++ b/info.c
+@@ -551,6 +551,8 @@ broken_combination:
+ printf("\tDevice supports scan flush.\n");
+ if (features & NL80211_FEATURE_AP_SCAN)
+ printf("\tDevice supports AP scan.\n");
++ if (features & NL80211_FEATURE_ACKTO_ESTIMATION)
++ printf("\tDevice supports ACK timeout estimation.\n");
+ }
+
+ if (tb_msg[NL80211_ATTR_TDLS_SUPPORT])
+--- a/phy.c
++++ b/phy.c
+@@ -362,39 +362,46 @@ static int handle_distance(struct nl8021
+ int argc, char **argv,
+ enum id_input id)
+ {
+- char *end;
+- unsigned int distance, coverage;
+-
+ if (argc != 1)
+ return 1;
+
+ if (!*argv[0])
+ return 1;
+
+- distance = strtoul(argv[0], &end, 10);
++ if (strcmp("auto", argv[0]) == 0) {
++ NLA_PUT_FLAG(msg, NL80211_ATTR_WIPHY_DYN_ACK);
++ } else {
++ char *end;
++ unsigned int distance, coverage;
+
+- if (*end)
+- return 1;
++ distance = strtoul(argv[0], &end, 10);
+
+- /*
+- * Divide double the distance by the speed of light in m/usec (300) to
+- * get round-trip time in microseconds and then divide the result by
+- * three to get coverage class as specified in IEEE 802.11-2007 table
+- * 7-27. Values are rounded upwards.
+- */
+- coverage = (distance + 449) / 450;
+- if (coverage > 255)
+- return 1;
++ if (*end)
++ return 1;
++
++ /*
++ * Divide double the distance by the speed of light
++ * in m/usec (300) to get round-trip time in microseconds
++ * and then divide the result by three to get coverage class
++ * as specified in IEEE 802.11-2007 table 7-27.
++ * Values are rounded upwards.
++ */
++ coverage = (distance + 449) / 450;
++ if (coverage > 255)
++ return 1;
+
+- NLA_PUT_U8(msg, NL80211_ATTR_WIPHY_COVERAGE_CLASS, coverage);
++ NLA_PUT_U8(msg, NL80211_ATTR_WIPHY_COVERAGE_CLASS, coverage);
++ }
+
+ return 0;
+ nla_put_failure:
+ return -ENOBUFS;
+ }
+-COMMAND(set, distance, "<distance>",
++COMMAND(set, distance, "<auto|distance>",
+ NL80211_CMD_SET_WIPHY, 0, CIB_PHY, handle_distance,
+- "Set appropriate coverage class for given link distance in meters.\n"
++ "Enable ACK timeout estimation algorithm (dynack) or set appropriate\n"
++ "coverage class for given link distance in meters.\n"
++ "To disable dynack set valid value for coverage class.\n"
+ "Valid values: 0 - 114750");
+
+ static int handle_txpower(struct nl80211_state *state,
diff --git a/package/network/utils/iw/patches/120-antenna_gain.patch b/package/network/utils/iw/patches/120-antenna_gain.patch
index 2c11a150de..cf6a3fa221 100644
--- a/package/network/utils/iw/patches/120-antenna_gain.patch
+++ b/package/network/utils/iw/patches/120-antenna_gain.patch
@@ -1,6 +1,6 @@
--- a/phy.c
+++ b/phy.c
-@@ -488,3 +488,31 @@ COMMAND(set, antenna, "<bitmap> | all |
+@@ -495,3 +495,31 @@ COMMAND(set, antenna, "<bitmap> | all |
NL80211_CMD_SET_WIPHY, 0, CIB_PHY, handle_antenna,
"Set a bitmap of allowed antennas to use for TX and RX.\n"
"The driver may reject antenna configurations it cannot support.");
diff --git a/package/network/utils/iw/patches/200-reduce_size.patch b/package/network/utils/iw/patches/200-reduce_size.patch
index 8f5c0eb76d..a6499b3017 100644
--- a/package/network/utils/iw/patches/200-reduce_size.patch
+++ b/package/network/utils/iw/patches/200-reduce_size.patch
@@ -83,15 +83,15 @@
if (tb_msg[NL80211_ATTR_FEATURE_FLAGS]) {
unsigned int features = nla_get_u32(tb_msg[NL80211_ATTR_FEATURE_FLAGS]);
-@@ -552,6 +561,7 @@ broken_combination:
- if (features & NL80211_FEATURE_AP_SCAN)
- printf("\tDevice supports AP scan.\n");
+@@ -554,6 +563,7 @@ broken_combination:
+ if (features & NL80211_FEATURE_ACKTO_ESTIMATION)
+ printf("\tDevice supports ACK timeout estimation.\n");
}
+#endif
if (tb_msg[NL80211_ATTR_TDLS_SUPPORT])
printf("\tDevice supports T-DLS.\n");
-@@ -601,6 +611,7 @@ TOPLEVEL(list, NULL, NL80211_CMD_GET_WIP
+@@ -603,6 +613,7 @@ TOPLEVEL(list, NULL, NL80211_CMD_GET_WIP
"List all wireless devices and their capabilities.");
TOPLEVEL(phy, NULL, NL80211_CMD_GET_WIPHY, NLM_F_DUMP, CIB_NONE, handle_info, NULL);
@@ -99,7 +99,7 @@
static int handle_commands(struct nl80211_state *state,
struct nl_cb *cb, struct nl_msg *msg,
int argc, char **argv, enum id_input id)
-@@ -613,6 +624,7 @@ static int handle_commands(struct nl8021
+@@ -615,6 +626,7 @@ static int handle_commands(struct nl8021
}
TOPLEVEL(commands, NULL, NL80211_CMD_GET_WIPHY, 0, CIB_NONE, handle_commands,
"list all known commands and their decimal & hex value");