blob: b1565c5f15fdd2bdab87b9e70af6253a8abb3a85 [file] [log] [blame]
#include <linux/nl80211.h>
#include "iw.h"
int mac_addr_n2a(char *mac_addr, unsigned char *arg)
{
int i, l;
l = 0;
for (i = 0; i < ETH_ALEN ; i++) {
if (i == 0) {
sprintf(mac_addr+l, "%02x", arg[i]);
l += 2;
} else {
sprintf(mac_addr+l, ":%02x", arg[i]);
l += 3;
}
}
return 0;
}
int mac_addr_a2n(unsigned char *mac_addr, char *arg)
{
int i;
for (i = 0; i < ETH_ALEN ; i++) {
int temp;
char *cp = strchr(arg, ':');
if (cp) {
*cp = 0;
cp++;
}
if (sscanf(arg, "%x", &temp) != 1)
return -1;
if (temp < 0 || temp > 255)
return -1;
mac_addr[i] = temp;
if (!cp)
break;
arg = cp;
}
if (i < ETH_ALEN - 1)
return -1;
return 0;
}
static const char *ifmodes[NL80211_IFTYPE_MAX + 1] = {
"unspecified",
"IBSS",
"Station",
"AP",
"AP(VLAN)",
"WDS",
"Monitor",
"mesh point"
};
static char modebuf[100];
const char *iftype_name(enum nl80211_iftype iftype)
{
if (iftype <= NL80211_IFTYPE_MAX)
return ifmodes[iftype];
sprintf(modebuf, "Unknown mode (%d)", iftype);
return modebuf;
}
int error_handler(struct sockaddr_nl *nla, struct nlmsgerr *err, void *arg)
{
int *ret = arg;
*ret = err->error;
return NL_STOP;
}