]>
Commit | Line | Data |
---|---|---|
3955e524 RL |
1 | #include <net/if.h> |
2 | #include <errno.h> | |
3 | #include <string.h> | |
4 | ||
5 | #include "nl80211.h" | |
6 | #include "iw.h" | |
7 | ||
8 | SECTION(ocb); | |
9 | ||
34b23014 | 10 | static int join_ocb(struct nl80211_state *state, |
3955e524 RL |
11 | struct nl_msg *msg, int argc, char **argv, |
12 | enum id_input id) | |
13 | { | |
14 | unsigned long freq; | |
15 | char *end; | |
16 | int i; | |
17 | static const struct { | |
18 | const char *name; | |
19 | unsigned int width; | |
20 | } *chanmode_selected, chanmode[] = { | |
21 | { .name = "5MHZ", | |
22 | .width = NL80211_CHAN_WIDTH_5 }, | |
23 | { .name = "10MHZ", | |
24 | .width = NL80211_CHAN_WIDTH_10 }, | |
25 | }; | |
26 | ||
27 | if (argc < 2) | |
28 | return 1; | |
29 | ||
30 | /* freq */ | |
31 | freq = strtoul(argv[0], &end, 10); | |
32 | if (*end != '\0') | |
33 | return 1; | |
34 | ||
35 | NLA_PUT_U32(msg, NL80211_ATTR_WIPHY_FREQ, freq); | |
36 | argv++; | |
37 | argc--; | |
38 | ||
39 | /* channel width */ | |
40 | for (i = 0; i < ARRAY_SIZE(chanmode); i++) { | |
41 | if (strcasecmp(chanmode[i].name, argv[0]) == 0) { | |
42 | chanmode_selected = &chanmode[i]; | |
43 | break; | |
44 | } | |
45 | } | |
46 | if (chanmode_selected) { | |
47 | NLA_PUT_U32(msg, NL80211_ATTR_CHANNEL_WIDTH, | |
48 | chanmode_selected->width); | |
49 | NLA_PUT_U32(msg, NL80211_ATTR_CENTER_FREQ1, freq); | |
50 | ||
51 | argv++; | |
52 | argc--; | |
53 | } else { | |
54 | return 1; | |
55 | } | |
56 | ||
57 | return 0; | |
58 | ||
59 | nla_put_failure: | |
60 | return -ENOBUFS; | |
61 | } | |
62 | COMMAND(ocb, join, "<freq in MHz> <5MHZ|10MHZ>", | |
63 | NL80211_CMD_JOIN_OCB, 0, CIB_NETDEV, join_ocb, | |
64 | "Join the OCB mode network."); | |
65 | ||
34b23014 | 66 | static int leave_ocb(struct nl80211_state *state, |
3955e524 RL |
67 | struct nl_msg *msg, int argc, char **argv, |
68 | enum id_input id) | |
69 | { | |
70 | if (argc) | |
71 | return 1; | |
72 | ||
73 | return 0; | |
74 | } | |
75 | COMMAND(ocb, leave, NULL, NL80211_CMD_LEAVE_OCB, 0, CIB_NETDEV, leave_ocb, | |
76 | "Leave the OCB mode network."); |