]> git.ipfire.org Git - thirdparty/iw.git/commitdiff
add frequency command
authorJohannes Berg <johannes@sipsolutions.net>
Mon, 8 Dec 2008 11:43:42 +0000 (12:43 +0100)
committerJohannes Berg <johannes@sipsolutions.net>
Mon, 8 Dec 2008 11:43:42 +0000 (12:43 +0100)
phy.c

diff --git a/phy.c b/phy.c
index 50d6a2e755ee7f7b4ee15d55f5fd5c5cf82e16ef..98de1fc5ce3fe1149c0ff1368bc9325ae801f6e8 100644 (file)
--- a/phy.c
+++ b/phy.c
@@ -24,3 +24,46 @@ static int handle_name(struct nl_cb *cb,
        return -ENOBUFS;
 }
 COMMAND(set, name, "<new name>", NL80211_CMD_SET_WIPHY, 0, CIB_PHY, handle_name);
+
+static int handle_freq(struct nl_cb *cb, struct nl_msg *msg,
+                      int argc, char **argv)
+{
+       static const struct {
+               const char *name;
+               unsigned int val;
+       } htmap[] = {
+               { .name = "HT20", .val = NL80211_SEC_CHAN_DISABLED, },
+               { .name = "HT40+", .val = NL80211_SEC_CHAN_ABOVE, },
+               { .name = "HT40-", .val = NL80211_SEC_CHAN_BELOW, },
+       };
+       unsigned int htval = NL80211_SEC_CHAN_NO_HT;
+       unsigned int freq;
+       int i;
+
+       if (!argc || argc > 2)
+               return 1;
+
+       if (argc == 2) {
+               for (i = 0; i < sizeof(htmap)/sizeof(htmap[0]); i++) {
+                       if (strcasecmp(htmap[i].name, argv[1]) == 0) {
+                               htval = htmap[i].val;
+                               break;
+                       }
+               }
+               if (htval == NL80211_SEC_CHAN_NO_HT)
+                       return 1;
+       }
+
+       freq = strtoul(argv[0], NULL, 10);
+
+       NLA_PUT_U32(msg, NL80211_ATTR_WIPHY_FREQ, freq);
+       NLA_PUT_U32(msg, NL80211_ATTR_WIPHY_SEC_CHAN_OFFSET, htval);
+
+       return 0;
+ nla_put_failure:
+       return -ENOBUFS;
+}
+COMMAND(set, freq, "<freq> [HT20|HT40+|HT40-]",
+       NL80211_CMD_SET_WIPHY, 0, CIB_PHY, handle_freq);
+COMMAND(set, freq, "<freq> [HT20|HT40+|HT40-]",
+       NL80211_CMD_SET_WIPHY, 0, CIB_NETDEV, handle_freq);