blob: 98de1fc5ce3fe1149c0ff1368bc9325ae801f6e8 [file] [log] [blame]
Johannes Berg0f55e0b2008-09-16 17:40:48 +02001#include <errno.h>
Johannes Berg0f55e0b2008-09-16 17:40:48 +02002#include <net/if.h>
3
4#include <netlink/genl/genl.h>
5#include <netlink/genl/family.h>
6#include <netlink/genl/ctrl.h>
7#include <netlink/msg.h>
8#include <netlink/attr.h>
9
Johannes Bergf408e012008-09-18 19:32:11 +020010#include "nl80211.h"
Johannes Berg0f55e0b2008-09-16 17:40:48 +020011#include "iw.h"
12
Johannes Berg70391cc2008-09-16 18:35:06 +020013static int handle_name(struct nl_cb *cb,
Johannes Berg0f55e0b2008-09-16 17:40:48 +020014 struct nl_msg *msg,
15 int argc, char **argv)
16{
Johannes Berg0f55e0b2008-09-16 17:40:48 +020017 if (argc != 1)
Johannes Berg5e75fd02008-09-16 18:13:12 +020018 return 1;
Johannes Berg0f55e0b2008-09-16 17:40:48 +020019
20 NLA_PUT_STRING(msg, NL80211_ATTR_WIPHY_NAME, *argv);
21
Johannes Berg70391cc2008-09-16 18:35:06 +020022 return 0;
Johannes Berg0f55e0b2008-09-16 17:40:48 +020023 nla_put_failure:
Johannes Berg70391cc2008-09-16 18:35:06 +020024 return -ENOBUFS;
Johannes Berg0f55e0b2008-09-16 17:40:48 +020025}
26COMMAND(set, name, "<new name>", NL80211_CMD_SET_WIPHY, 0, CIB_PHY, handle_name);
Johannes Bergb822cda2008-12-08 12:43:42 +010027
28static int handle_freq(struct nl_cb *cb, struct nl_msg *msg,
29 int argc, char **argv)
30{
31 static const struct {
32 const char *name;
33 unsigned int val;
34 } htmap[] = {
35 { .name = "HT20", .val = NL80211_SEC_CHAN_DISABLED, },
36 { .name = "HT40+", .val = NL80211_SEC_CHAN_ABOVE, },
37 { .name = "HT40-", .val = NL80211_SEC_CHAN_BELOW, },
38 };
39 unsigned int htval = NL80211_SEC_CHAN_NO_HT;
40 unsigned int freq;
41 int i;
42
43 if (!argc || argc > 2)
44 return 1;
45
46 if (argc == 2) {
47 for (i = 0; i < sizeof(htmap)/sizeof(htmap[0]); i++) {
48 if (strcasecmp(htmap[i].name, argv[1]) == 0) {
49 htval = htmap[i].val;
50 break;
51 }
52 }
53 if (htval == NL80211_SEC_CHAN_NO_HT)
54 return 1;
55 }
56
57 freq = strtoul(argv[0], NULL, 10);
58
59 NLA_PUT_U32(msg, NL80211_ATTR_WIPHY_FREQ, freq);
60 NLA_PUT_U32(msg, NL80211_ATTR_WIPHY_SEC_CHAN_OFFSET, htval);
61
62 return 0;
63 nla_put_failure:
64 return -ENOBUFS;
65}
66COMMAND(set, freq, "<freq> [HT20|HT40+|HT40-]",
67 NL80211_CMD_SET_WIPHY, 0, CIB_PHY, handle_freq);
68COMMAND(set, freq, "<freq> [HT20|HT40+|HT40-]",
69 NL80211_CMD_SET_WIPHY, 0, CIB_NETDEV, handle_freq);