From: Benjamin Berg <benjamin@sipsolutions.net>
To: Johannes Berg <johannes@sipsolutions.net>
Cc: linux-wireless@vger.kernel.org, sw@simonwunderlich.de,
Benjamin Berg <benjamin.berg@open-mesh.com>
Subject: [PATCH 6/8] Add commands to send CSA
Date: Mon, 7 Nov 2016 15:59:41 +0100 [thread overview]
Message-ID: <20161107145943.16761-7-benjamin@sipsolutions.net> (raw)
In-Reply-To: <20161107145943.16761-1-benjamin@sipsolutions.net>
From: Benjamin Berg <benjamin.berg@open-mesh.com>
Add a new set of commands to send a CSA. Both the number of beacons and the
flag to block TX can be given optionally.
Signed-off-by: Simon Wunderlich <sw@simonwunderlich.de>
Signed-off-by: Benjamin Berg <benjamin.berg@open-mesh.com>
---
interface.c | 72 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
iw.h | 1 +
2 files changed, 73 insertions(+)
diff --git a/interface.c b/interface.c
index 57dd3c3..1c9ebfb 100644
--- a/interface.c
+++ b/interface.c
@@ -644,3 +644,75 @@ nla_put_failure:
COMMAND(set, mcast_rate, "<rate in Mbps>",
NL80211_CMD_SET_MCAST_RATE, 0, CIB_NETDEV, set_mcast_rate,
"Set the multicast bitrate.");
+
+
+static int handle_chanfreq(struct nl80211_state *state, struct nl_msg *msg,
+ bool chan, int argc, char **argv,
+ enum id_input id)
+{
+ struct chandef chandef;
+ int res;
+ int parsed;
+ char *end;
+
+ res = parse_freqchan(&chandef, chan, argc, argv, &parsed);
+ if (res)
+ return res;
+
+ argc -= parsed;
+ argv += parsed;
+
+ while (argc) {
+ unsigned int beacons = 10;
+
+ if (strcmp(argv[0], "beacons") == 0) {
+ if (argc < 2)
+ return 1;
+
+ beacons = strtol(argv[1], &end, 10);
+ if (*end)
+ return 1;
+
+ argc -= 2;
+ argv += 2;
+
+ NLA_PUT_U32(msg, NL80211_ATTR_CH_SWITCH_COUNT, beacons);
+ } else if (strcmp(argv[0], "block-tx") == 0) {
+ argc -= 1;
+ argv += 1;
+
+ NLA_PUT_FLAG(msg, NL80211_ATTR_CH_SWITCH_BLOCK_TX);
+ } else {
+ return 1;
+ }
+ }
+
+ return put_chandef(msg, &chandef);
+
+ nla_put_failure:
+ return -ENOBUFS;
+}
+
+static int handle_freq(struct nl80211_state *state, struct nl_msg *msg,
+ int argc, char **argv,
+ enum id_input id)
+{
+ return handle_chanfreq(state, msg, false, argc, argv, id);
+}
+
+static int handle_chan(struct nl80211_state *state, struct nl_msg *msg,
+ int argc, char **argv,
+ enum id_input id)
+{
+ return handle_chanfreq(state, msg, true, argc, argv, id);
+}
+
+SECTION(switch);
+COMMAND(switch, freq,
+ "<freq> [NOHT|HT20|HT40+|HT40-|5MHz|10MHz|80MHz] [beacons <count>] [block-tx]\n"
+ "<control freq> [5|10|20|40|80|80+80|160] [<center1_freq> [<center2_freq>]] [beacons <count>] [block-tx]",
+ NL80211_CMD_CHANNEL_SWITCH, 0, CIB_NETDEV, handle_freq,
+ "Switch the operating channel by sending a channel switch announcement (CSA).");
+COMMAND(switch, channel, "<channel> [NOHT|HT20|HT40+|HT40-|5MHz|10MHz|80MHz] [beacons <count>] [block-tx]",
+ NL80211_CMD_CHANNEL_SWITCH, 0, CIB_NETDEV, handle_chan, NULL);
+
diff --git a/iw.h b/iw.h
index 7d56391..0857baf 100644
--- a/iw.h
+++ b/iw.h
@@ -202,6 +202,7 @@ int get_cf1(const struct chanmode *chanmode, unsigned long freq);
"[randomise[=<addr>/<mask>]]"
int parse_sched_scan(struct nl_msg *msg, int *argc, char ***argv);
+DECLARE_SECTION(switch);
DECLARE_SECTION(set);
DECLARE_SECTION(get);
--
2.10.2
next prev parent reply other threads:[~2016-11-07 14:59 UTC|newest]
Thread overview: 12+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-11-07 14:59 [PATCH 0/8] iw: Add common chandef parser and new DFS related commands Benjamin Berg
2016-11-07 14:59 ` [PATCH 1/8] util: Add generic frequency/channel command line handler Benjamin Berg
2016-11-07 14:59 ` [PATCH 2/8] phy: Use common freqchan helper for setting the operating channel Benjamin Berg
2016-11-07 14:59 ` [PATCH 3/8] ibss: Use common freqchan helper for joining an ibss Benjamin Berg
2016-11-07 14:59 ` [PATCH 4/8] mesh: Use common freqchan helper for joining a mesh Benjamin Berg
2016-11-07 14:59 ` [PATCH 5/8] Add cac command to allow clearing channels Benjamin Berg
2016-11-07 14:59 ` Benjamin Berg [this message]
2016-11-07 14:59 ` [PATCH 7/8] Add flag for DFS handling in IBSS Benjamin Berg
2016-11-07 14:59 ` [PATCH 8/8] Print frequency of radar events Benjamin Berg
2016-11-17 17:21 ` Henrik Eriksson
2016-11-17 17:25 ` Benjamin Berg
2016-11-16 12:41 ` [PATCH 0/8] iw: Add common chandef parser and new DFS related commands Johannes Berg
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20161107145943.16761-7-benjamin@sipsolutions.net \
--to=benjamin@sipsolutions.net \
--cc=benjamin.berg@open-mesh.com \
--cc=johannes@sipsolutions.net \
--cc=linux-wireless@vger.kernel.org \
--cc=sw@simonwunderlich.de \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).