]> git.ipfire.org Git - thirdparty/iw.git/blame - reg.c
ship nl80211.h
[thirdparty/iw.git] / reg.c
CommitLineData
14a0380d
LR
1#include <net/if.h>
2#include <errno.h>
3#include <string.h>
4
5#include <netlink/genl/genl.h>
6#include <netlink/genl/family.h>
7#include <netlink/genl/ctrl.h>
8#include <netlink/msg.h>
9#include <netlink/attr.h>
10
f408e01b 11#include "nl80211.h"
14a0380d
LR
12#include "iw.h"
13
14a0380d
LR
14int isalpha_upper(char letter)
15{
16 if (letter >= 65 && letter <= 90)
17 return 1;
18 return 0;
19}
20
21static int is_alpha2(char *alpha2)
22{
23 if (isalpha_upper(alpha2[0]) && isalpha_upper(alpha2[1]))
24 return 1;
25 return 0;
26}
27
28static int is_world_regdom(char *alpha2)
29{
30 /* ASCII 0 */
31 if (alpha2[0] == 48 && alpha2[1] == 48)
32 return 1;
33 return 0;
34}
35
70391ccf 36static int handle_reg_set(struct nl_cb *cb,
1c05c109
JB
37 struct nl_msg *msg,
38 int argc, char **argv)
14a0380d 39{
14a0380d
LR
40 char alpha2[3];
41
1c05c109 42 if (argc < 1)
5e75fd04 43 return 1;
14a0380d
LR
44
45 if (!is_alpha2(argv[0]) && !is_world_regdom(argv[0])) {
46 fprintf(stderr, "not a valid ISO/IEC 3166-1 alpha2\n");
40ffa988 47 fprintf(stderr, "Special non-alpha2 usable entries:\n");
14a0380d 48 fprintf(stderr, "\t00\tWorld Regulatory domain\n");
5e75fd04 49 return 2;
14a0380d
LR
50 }
51
52 alpha2[0] = argv[0][0];
53 alpha2[1] = argv[0][1];
54 alpha2[2] = '\0';
55
56 argc--;
57 argv++;
58
1c05c109 59 if (argc)
5e75fd04 60 return 1;
14a0380d
LR
61
62 NLA_PUT_STRING(msg, NL80211_ATTR_REG_ALPHA2, alpha2);
63
70391ccf 64 return 0;
14a0380d 65 nla_put_failure:
70391ccf 66 return -ENOBUFS;
14a0380d 67}
1c05c109
JB
68COMMAND(reg, set, "<ISO/IEC 3166-1 alpha2>",
69 NL80211_CMD_REQ_SET_REG, 0, CIB_NONE, handle_reg_set);