| #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; |
| } |