blob: 40a9568c02486fe65102f5de8df51df0c0764a7e [file] [log] [blame]
#include "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 ieee80211_channel_to_frequency(int chan)
{
if (chan < 14)
return 2407 + chan * 5;
if (chan == 14)
return 2484;
/* FIXME: dot11ChannelStartingFactor (802.11-2007 17.3.8.3.2) */
return (chan + 1000) * 5;
}
int ieee80211_frequency_to_channel(int freq)
{
if (freq == 2484)
return 14;
if (freq < 2484)
return (freq - 2407) / 5;
/* FIXME: dot11ChannelStartingFactor (802.11-2007 17.3.8.3.2) */
return freq/5 - 1000;
}