2014-07-24 10:39:54

by Lorenzo Bianconi

[permalink] [raw]
Subject: [PATCHv2 0/2] add auto parameter to set distance command

Add auto parameter to set distance command in order to enable ack timeout
estimation algorithm (dynack). Currently dynack is supported just by ath9k

This patchset is based on "configure ack timeout estimation algorithm through
mac80211 stack" one sent on linux-wireless

Changes since v1:
- add dynack info to info command

Lorenzo Bianconi (2):
iw: sync nl80211_attrs
iw: add auto parameter to set distance command

info.c | 16 +++++++++++-----
nl80211.h | 10 ++++++++++
phy.c | 44 +++++++++++++++++++++++++-------------------
3 files changed, 46 insertions(+), 24 deletions(-)

--
1.9.1



2014-07-24 10:39:53

by Lorenzo Bianconi

[permalink] [raw]
Subject: [PATCHv2 1/2] iw: sync nl80211_attrs

Sync nl80211_attrs with mac80211 stack

Signed-off-by: Lorenzo Bianconi <[email protected]>
---
nl80211.h | 5 +++++
1 file changed, 5 insertions(+)

diff --git a/nl80211.h b/nl80211.h
index be9519b..f1db15b 100644
--- a/nl80211.h
+++ b/nl80211.h
@@ -1591,6 +1591,9 @@ enum nl80211_commands {
* creation then the new interface will be owned by the netlink socket
* that created it and will be destroyed when the socket is closed
*
+ * @NL80211_ATTR_TDLS_INITIATOR: flag attribute indicating the current end is
+ * the TDLS link initiator.
+ *
* @NL80211_ATTR_MAX: highest attribute number currently defined
* @__NL80211_ATTR_AFTER_LAST: internal use
*/
@@ -1931,6 +1934,8 @@ enum nl80211_attrs {
NL80211_ATTR_CSA_C_OFFSETS_TX,
NL80211_ATTR_MAX_CSA_COUNTERS,

+ NL80211_ATTR_TDLS_INITIATOR,
+
/* add attributes here, update the policy in nl80211.c */

__NL80211_ATTR_AFTER_LAST,
--
1.9.1


2014-07-24 10:39:54

by Lorenzo Bianconi

[permalink] [raw]
Subject: [PATCHv2 2/2] iw: add auto parameter to set distance command

Add auto parameter to set distance command in order to enable ack timeout
estimation algorithm (dynack). Currently dynack is supported just by ath9k

This patch is based on "configure ack timeout estimation algorithm through
mac80211 stack" patchset sent on linux-wireless

Signed-off-by: Lorenzo Bianconi <[email protected]>
---
info.c | 16 +++++++++++-----
nl80211.h | 5 +++++
phy.c | 44 +++++++++++++++++++++++++-------------------
3 files changed, 41 insertions(+), 24 deletions(-)

diff --git a/info.c b/info.c
index 97ff39d..0806666 100644
--- a/info.c
+++ b/info.c
@@ -266,11 +266,17 @@ next:
}

if (tb_msg[NL80211_ATTR_WIPHY_COVERAGE_CLASS]) {
- unsigned char coverage;
-
- coverage = nla_get_u8(tb_msg[NL80211_ATTR_WIPHY_COVERAGE_CLASS]);
- /* See handle_distance() for an explanation where the '450' comes from */
- printf("\tCoverage class: %d (up to %dm)\n", coverage, 450 * coverage);
+ signed short coverage;
+
+ coverage = nla_get_u16(tb_msg[NL80211_ATTR_WIPHY_COVERAGE_CLASS]);
+ if (coverage >= 0) {
+ /* See handle_distance() for an explanation
+ * where the '450' comes from */
+ printf("\tCoverage class: %d (up to %dm)\n",
+ coverage, 450 * coverage);
+ } else {
+ printf("\tCoverage class: auto\n");
+ }
}

if (tb_msg[NL80211_ATTR_CIPHER_SUITES]) {
diff --git a/nl80211.h b/nl80211.h
index f1db15b..7cc5ecd 100644
--- a/nl80211.h
+++ b/nl80211.h
@@ -1594,6 +1594,9 @@ enum nl80211_commands {
* @NL80211_ATTR_TDLS_INITIATOR: flag attribute indicating the current end is
* the TDLS link initiator.
*
+ * @NL80211_ATTR_WIPHY_DYNACK: whether dynamic ack timeout estimation algorithm
+ * is enabled
+ *
* @NL80211_ATTR_MAX: highest attribute number currently defined
* @__NL80211_ATTR_AFTER_LAST: internal use
*/
@@ -1936,6 +1939,8 @@ enum nl80211_attrs {

NL80211_ATTR_TDLS_INITIATOR,

+ NL80211_ATTR_WIPHY_DYNACK,
+
/* add attributes here, update the policy in nl80211.c */

__NL80211_ATTR_AFTER_LAST,
diff --git a/phy.c b/phy.c
index 517d203..068f9fc 100644
--- a/phy.c
+++ b/phy.c
@@ -362,40 +362,46 @@ static int handle_distance(struct nl80211_state *state,
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_DYNACK);
+ } 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;

- NLA_PUT_U8(msg, NL80211_ATTR_WIPHY_COVERAGE_CLASS, coverage);
+ /*
+ * 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);
+ }

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"
- "Valid values: 0 - 114750");
+ "Enable ack timeout estimation algorithm or set appropriate\n"
+ "coverage class for given link distance in meters.\n"
+ "Valid values for coverage class: 0 - 114750");

static int handle_txpower(struct nl80211_state *state,
struct nl_cb *cb,
--
1.9.1