]> git.ipfire.org Git - thirdparty/iw.git/commitdiff
phy: Use common freqchan helper for setting the operating channel
authorBenjamin Berg <benjamin.berg@open-mesh.com>
Mon, 7 Nov 2016 14:59:37 +0000 (15:59 +0100)
committerJohannes Berg <johannes.berg@intel.com>
Wed, 16 Nov 2016 12:19:09 +0000 (13:19 +0100)
Simplify code by using the helper which has been introduced earlier.

Signed-off-by: Benjamin Berg <benjamin.berg@open-mesh.com>
Signed-off-by: Johannes Berg <johannes.berg@intel.com>
phy.c

diff --git a/phy.c b/phy.c
index c57a71f92eaf3799fb6cb93fa5f7f73e852539f7..266de4db591338a5fe4057df3e6b0985e96b3128 100644 (file)
--- a/phy.c
+++ b/phy.c
@@ -183,140 +183,47 @@ static int handle_name(struct nl80211_state *state,
 COMMAND(set, name, "<new name>", NL80211_CMD_SET_WIPHY, 0, CIB_PHY, handle_name,
        "Rename this wireless device.");
 
-static int handle_freqs(struct nl_msg *msg, int argc, char **argv)
-{
-       static const struct {
-               const char *name;
-               unsigned int val;
-       } bwmap[] = {
-               { .name = "20", .val = NL80211_CHAN_WIDTH_20, },
-               { .name = "40", .val = NL80211_CHAN_WIDTH_40, },
-               { .name = "80", .val = NL80211_CHAN_WIDTH_80, },
-               { .name = "80+80", .val = NL80211_CHAN_WIDTH_80P80, },
-               { .name = "160", .val = NL80211_CHAN_WIDTH_160, },
-       };
-       uint32_t freq;
-       unsigned int i, bwval = NL80211_CHAN_WIDTH_20_NOHT;
-       char *end;
-
-       if (argc < 1)
-               return 1;
-
-       for (i = 0; i < ARRAY_SIZE(bwmap); i++) {
-               if (strcasecmp(bwmap[i].name, argv[0]) == 0) {
-                       bwval = bwmap[i].val;
-                       break;
-               }
-       }
-
-       if (bwval == NL80211_CHAN_WIDTH_20_NOHT)
-               return 1;
-
-       NLA_PUT_U32(msg, NL80211_ATTR_CHANNEL_WIDTH, bwval);
-
-       if (argc == 1)
-               return 0;
-
-       /* center freq 1 */
-       if (!*argv[1])
-               return 1;
-       freq = strtoul(argv[1], &end, 10);
-       if (*end)
-               return 1;
-       NLA_PUT_U32(msg, NL80211_ATTR_CENTER_FREQ1, freq);
-
-       if (argc == 2)
-               return 0;
-
-       /* center freq 2 */
-       if (!*argv[2])
-               return 1;
-       freq = strtoul(argv[2], &end, 10);
-       if (*end)
-               return 1;
-       NLA_PUT_U32(msg, NL80211_ATTR_CENTER_FREQ2, freq);
-
-       return 0;
- nla_put_failure:
-       return -ENOBUFS;
-}
-
-static int handle_freqchan(struct nl_msg *msg, bool chan,
-                          int argc, char **argv)
-{
-       char *end;
-       static const struct {
-               const char *name;
-               unsigned int val;
-       } htmap[] = {
-               { .name = "HT20", .val = NL80211_CHAN_HT20, },
-               { .name = "HT40+", .val = NL80211_CHAN_HT40PLUS, },
-               { .name = "HT40-", .val = NL80211_CHAN_HT40MINUS, },
-       };
-       unsigned int htval = NL80211_CHAN_NO_HT;
-       unsigned int freq;
-       unsigned int i;
-
-       if (!argc || argc > 4)
-               return 1;
-
-       if (!*argv[0])
-               return 1;
-       freq = strtoul(argv[0], &end, 10);
-       if (*end)
-               return 1;
-
-       if (chan) {
-               enum nl80211_band band;
-               band = freq <= 14 ? NL80211_BAND_2GHZ : NL80211_BAND_5GHZ;
-               freq = ieee80211_channel_to_frequency(freq, band);
-       }
-
-       NLA_PUT_U32(msg, NL80211_ATTR_WIPHY_FREQ, freq);
-
-       if (argc > 2) {
-               return handle_freqs(msg, argc - 1, argv + 1);
-       } else if (argc == 2) {
-               for (i = 0; i < ARRAY_SIZE(htmap); i++) {
-                       if (strcasecmp(htmap[i].name, argv[1]) == 0) {
-                               htval = htmap[i].val;
-                               break;
-                       }
-               }
-               if (htval == NL80211_CHAN_NO_HT)
-                       return handle_freqs(msg, argc - 1, argv + 1);
-       }
-
-       NLA_PUT_U32(msg, NL80211_ATTR_WIPHY_CHANNEL_TYPE, htval);
-
-       return 0;
- 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_freqchan(msg, false, argc, argv);
+       struct chandef chandef;
+       int res;
+
+       res = parse_freqchan(&chandef, false, argc, argv, NULL);
+       if (res)
+               return res;
+
+       return put_chandef(msg, &chandef);
 }
-COMMAND(set, freq, "<freq> [HT20|HT40+|HT40-]",
+
+COMMAND(set, freq,
+       "<freq> [NOHT|HT20|HT40+|HT40-|5MHz|10MHz|80MHz]\n"
+       "<control freq> [5|10|20|40|80|80+80|160] [<center1_freq> [<center2_freq>]]",
        NL80211_CMD_SET_WIPHY, 0, CIB_PHY, handle_freq,
        "Set frequency/channel the hardware is using, including HT\n"
        "configuration.");
-COMMAND(set, freq, "<freq> [HT20|HT40+|HT40-]\n"
-                  "<control freq> [20|40|80|80+80|160] [<center freq 1>] [<center freq 2>]",
+COMMAND(set, freq,
+       "<freq> [NOHT|HT20|HT40+|HT40-|5MHz|10MHz|80MHz]\n"
+       "<control freq> [5|10|20|40|80|80+80|160] [<center1_freq> [<center2_freq>]]",
        NL80211_CMD_SET_WIPHY, 0, CIB_NETDEV, handle_freq, NULL);
 
 static int handle_chan(struct nl80211_state *state, struct nl_msg *msg,
                       int argc, char **argv,
                       enum id_input id)
 {
-       return handle_freqchan(msg, true, argc, argv);
+       struct chandef chandef;
+       int res;
+
+       res = parse_freqchan(&chandef, true, argc, argv, NULL);
+       if (res)
+               return res;
+
+       return put_chandef(msg, &chandef);
 }
-COMMAND(set, channel, "<channel> [HT20|HT40+|HT40-]",
+COMMAND(set, channel, "<channel> [NOHT|HT20|HT40+|HT40-|5MHz|10MHz|80MHz]",
        NL80211_CMD_SET_WIPHY, 0, CIB_PHY, handle_chan, NULL);
-COMMAND(set, channel, "<channel> [HT20|HT40+|HT40-]",
+COMMAND(set, channel, "<channel> [NOHT|HT20|HT40+|HT40-|5MHz|10MHz|80MHz]",
        NL80211_CMD_SET_WIPHY, 0, CIB_NETDEV, handle_chan, NULL);
 
 static int handle_fragmentation(struct nl80211_state *state,