2 #include <netlink/genl/genl.h>
3 #include <netlink/genl/family.h>
4 #include <netlink/genl/ctrl.h>
5 #include <netlink/msg.h>
6 #include <netlink/attr.h>
12 static int handle_start_ap(struct nl80211_state
*state
,
13 struct nl_msg
*msg
, int argc
, char **argv
,
16 struct chandef chandef
;
26 NLA_PUT(msg
, NL80211_ATTR_SSID
, strlen(argv
[0]), argv
[0]);
31 res
= parse_freqchan(&chandef
, false, argc
, argv
, &parsed
);
36 res
= put_chandef(msg
, &chandef
);
41 val
= strtoul(argv
[0], &end
, 10);
45 NLA_PUT_U32(msg
, NL80211_ATTR_BEACON_INTERVAL
, val
);
50 val
= strtoul(argv
[0], &end
, 10);
54 NLA_PUT_U32(msg
, NL80211_ATTR_DTIM_PERIOD
, val
);
58 if (strcmp(argv
[0], "hidden-ssid") == 0) {
61 NLA_PUT_U32(msg
, NL80211_ATTR_HIDDEN_SSID
,
62 NL80211_HIDDEN_SSID_ZERO_LEN
);
63 } else if (strcmp(argv
[0], "zeroed-ssid") == 0) {
66 NLA_PUT_U32(msg
, NL80211_ATTR_HIDDEN_SSID
,
67 NL80211_HIDDEN_SSID_ZERO_CONTENTS
);
70 /* beacon head must be provided */
71 if (strcmp(argv
[0], "head") != 0)
76 len
= strlen(argv
[0]);
77 if (!len
|| (len
% 2))
80 if (!hex2bin(&argv
[0][0], buf
))
83 NLA_PUT(msg
, NL80211_ATTR_BEACON_HEAD
, (len
/ 2), &buf
);
90 /* tail is optional */
91 if (strcmp(argv
[0], "tail") == 0) {
98 len
= strlen(argv
[0]);
99 if (!len
|| (len
% 2))
102 if (!hex2bin(&argv
[0][0], buf
))
105 NLA_PUT(msg
, NL80211_ATTR_BEACON_TAIL
, (len
/ 2), &buf
);
113 /* inactivity time (optional) */
114 if (strcmp(argv
[0], "inactivity-time") == 0) {
120 len
= strlen(argv
[0]);
124 val
= strtoul(argv
[0], &end
, 10);
128 NLA_PUT_U16(msg
, NL80211_ATTR_INACTIVITY_TIMEOUT
, val
);
137 if (strcmp(*argv
, "key") != 0 && strcmp(*argv
, "keys") != 0)
143 return parse_keys(msg
, &argv
, &argc
);
147 COMMAND(ap
, start
, "",
148 NL80211_CMD_NEW_BEACON
, 0, CIB_NETDEV
, handle_start_ap
,
149 "<SSID> <control freq> [5|10|20|40|80|80+80|160] [<center1_freq> [<center2_freq>]]"
150 " <beacon interval in TU> <DTIM period> [hidden-ssid|zeroed-ssid] head"
151 " <beacon head in hexadecimal> [tail <beacon tail in hexadecimal>]"
152 " [inactivity-time <inactivity time in seconds>] [key0:abcde d:1:6162636465]\n");
154 static int handle_stop_ap(struct nl80211_state
*state
,
156 int argc
, char **argv
,
161 COMMAND(ap
, stop
, "",
162 NL80211_CMD_DEL_BEACON
, 0, CIB_NETDEV
, handle_stop_ap
,
163 "Stop AP functionality\n");