• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 
join_ocb(struct nl80211_state * state,struct nl_cb * cb,struct nl_msg * msg,int argc,char ** argv,enum id_input id)10 static int join_ocb(struct nl80211_state *state, struct nl_cb *cb,
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 
leave_ocb(struct nl80211_state * state,struct nl_cb * cb,struct nl_msg * msg,int argc,char ** argv,enum id_input id)66 static int leave_ocb(struct nl80211_state *state, struct nl_cb *cb,
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.");
77