Return-path: Received: from mail-we0-f171.google.com ([74.125.82.171]:51935 "EHLO mail-we0-f171.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751779AbaGTMdz (ORCPT ); Sun, 20 Jul 2014 08:33:55 -0400 Received: by mail-we0-f171.google.com with SMTP id p10so6476788wes.16 for ; Sun, 20 Jul 2014 05:33:53 -0700 (PDT) From: Lorenzo Bianconi To: Johannes Berg Cc: linux-wireless@vger.kernel.org, Philippe Duchein Subject: [PATCH 2/2] iw: add auto parameter to set distance command Date: Sun, 20 Jul 2014 14:33:49 +0200 Message-Id: <1405859629-32326-3-git-send-email-lorenzo.bianconi83@gmail.com> (sfid-20140720_143359_614367_0E2AA9BD) In-Reply-To: <1405859629-32326-1-git-send-email-lorenzo.bianconi83@gmail.com> References: <1405859629-32326-1-git-send-email-lorenzo.bianconi83@gmail.com> Sender: linux-wireless-owner@vger.kernel.org List-ID: Add auto parameter to set distance command in order to enable ack timeout estimation algorithm (dynack). Currently dynack is supported just by ath9k Signed-off-by: Lorenzo Bianconi --- nl80211.h | 5 +++++ phy.c | 44 +++++++++++++++++++++++++------------------- 2 files changed, 30 insertions(+), 19 deletions(-) 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, "", +COMMAND(set, 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