nexmon – Blame information for rev 1
?pathlinks?
Rev | Author | Line No. | Line |
---|---|---|---|
1 | office | 1 | #include <errno.h> |
2 | #include <string.h> |
||
3 | |||
4 | #include <netlink/genl/genl.h> |
||
5 | #include <netlink/msg.h> |
||
6 | #include <netlink/attr.h> |
||
7 | |||
8 | #include "nl80211.h" |
||
9 | #include "iw.h" |
||
10 | |||
11 | static int set_power_save(struct nl80211_state *state, |
||
12 | struct nl_cb *cb, |
||
13 | struct nl_msg *msg, |
||
14 | int argc, char **argv, |
||
15 | enum id_input id) |
||
16 | { |
||
17 | enum nl80211_ps_state ps_state; |
||
18 | |||
19 | if (argc != 1) { |
||
20 | printf("Invalid parameters!\n"); |
||
21 | return 2; |
||
22 | } |
||
23 | |||
24 | if (strcmp(argv[0], "on") == 0) |
||
25 | ps_state = NL80211_PS_ENABLED; |
||
26 | else if (strcmp(argv[0], "off") == 0) |
||
27 | ps_state = NL80211_PS_DISABLED; |
||
28 | else { |
||
29 | printf("Invalid parameter: %s\n", argv[0]); |
||
30 | return 2; |
||
31 | } |
||
32 | |||
33 | NLA_PUT_U32(msg, NL80211_ATTR_PS_STATE, ps_state); |
||
34 | |||
35 | return 0; |
||
36 | |||
37 | nla_put_failure: |
||
38 | return -ENOBUFS; |
||
39 | } |
||
40 | |||
41 | COMMAND(set, power_save, "<on|off>", |
||
42 | NL80211_CMD_SET_POWER_SAVE, 0, CIB_NETDEV, set_power_save, |
||
43 | "Set power save state to on or off."); |
||
44 | |||
45 | static int print_power_save_handler(struct nl_msg *msg, void *arg) |
||
46 | { |
||
47 | struct nlattr *attrs[NL80211_ATTR_MAX + 1]; |
||
48 | struct genlmsghdr *gnlh = nlmsg_data(nlmsg_hdr(msg)); |
||
49 | const char *s; |
||
50 | |||
51 | nla_parse(attrs, NL80211_ATTR_MAX, genlmsg_attrdata(gnlh, 0), |
||
52 | genlmsg_attrlen(gnlh, 0), NULL); |
||
53 | |||
54 | if (!attrs[NL80211_ATTR_PS_STATE]) |
||
55 | return NL_SKIP; |
||
56 | |||
57 | switch (nla_get_u32(attrs[NL80211_ATTR_PS_STATE])) { |
||
58 | case NL80211_PS_ENABLED: |
||
59 | s = "on"; |
||
60 | break; |
||
61 | case NL80211_PS_DISABLED: |
||
62 | default: |
||
63 | s = "off"; |
||
64 | break; |
||
65 | } |
||
66 | |||
67 | printf("Power save: %s\n", s); |
||
68 | |||
69 | return NL_SKIP; |
||
70 | } |
||
71 | |||
72 | static int get_power_save(struct nl80211_state *state, |
||
73 | struct nl_cb *cb, |
||
74 | struct nl_msg *msg, |
||
75 | int argc, char **argv, |
||
76 | enum id_input id) |
||
77 | { |
||
78 | nl_cb_set(cb, NL_CB_VALID, NL_CB_CUSTOM, |
||
79 | print_power_save_handler, NULL); |
||
80 | return 0; |
||
81 | } |
||
82 | |||
83 | COMMAND(get, power_save, "<param>", |
||
84 | NL80211_CMD_GET_POWER_SAVE, 0, CIB_NETDEV, get_power_save, |
||
85 | "Retrieve power save state."); |