static int fbsd_get_mac(struct wif *wi, unsigned char *mac) { struct ifaddrs *ifa, *p; char *name = wi_get_ifname(wi); int rc = -1; struct sockaddr_dl* sdp; if (getifaddrs(&ifa) == -1) return -1; p = ifa; while (p) { if (p->ifa_addr->sa_family == AF_LINK && strcmp(name, p->ifa_name) == 0) { sdp = (struct sockaddr_dl*) p->ifa_addr; memcpy(mac, sdp->sdl_data + sdp->sdl_nlen, 6); rc = 0; break; } p = p->ifa_next; } freeifaddrs(ifa); return rc; }
static int obsd_get_channel(struct wif *wi) { struct priv_obsd *po = wi_priv(wi); struct ieee80211chanreq channel; memset(&channel, 0, sizeof(channel)); strlcpy(channel.i_name, wi_get_ifname(wi), sizeof(channel.i_name)); if(ioctl(po->po_s, SIOCG80211CHANNEL, (caddr_t)&channel) < 0) return -1; return channel.i_channel; }
static int fbsd_set_mtu(struct wif *wi, int mtu) { struct priv_fbsd *priv = wi_priv(wi); struct ifreq *ifr = &priv->pf_ifr; memset(ifr, 0, sizeof(struct ifreq)); strncpy(ifr->ifr_name, wi_get_ifname(wi), sizeof(ifr->ifr_name)); ifr->ifr_mtu = mtu; if(ioctl(priv->pf_s, SIOCSIFMTU, ifr) < 0) return -1; return 0; }
static int fbsd_get_mtu(struct wif *wi) { struct priv_fbsd *priv = wi_priv(wi); struct ifreq ifr; memset(&ifr, 0, sizeof(struct ifreq)); ifr.ifr_addr.sa_family = AF_INET; strncpy(ifr.ifr_name, wi_get_ifname(wi), sizeof(ifr.ifr_name)); if(ioctl(priv->pf_s, SIOCGIFMTU, (caddr_t)&ifr) < 0) return -1; return ifr.ifr_mtu; }