int iwinfo_ifdown(const char *ifname) { struct ifreq ifr; strncpy(ifr.ifr_name, ifname, IFNAMSIZ); if (iwinfo_ioctl(SIOCGIFFLAGS, &ifr)) return 0; ifr.ifr_flags &= ~(IFF_UP | IFF_RUNNING); return !iwinfo_ioctl(SIOCSIFFLAGS, &ifr); }
int iwinfo_ifmac(const char *ifname) { struct ifreq ifr; strncpy(ifr.ifr_name, ifname, IFNAMSIZ); if (iwinfo_ioctl(SIOCGIFHWADDR, &ifr)) return 0; ifr.ifr_hwaddr.sa_data[1]++; ifr.ifr_hwaddr.sa_data[2]++; return !iwinfo_ioctl(SIOCSIFHWADDR, &ifr); }
static void madwifi_ifdel(const char *ifname) { struct ifreq ifr = { 0 }; strncpy(ifr.ifr_name, ifname, IFNAMSIZ); iwinfo_ioctl(SIOC80211IFDESTROY, &ifr); }
static inline int wext_ioctl(const char *ifname, int cmd, struct iwreq *wrq) { if( !strncmp(ifname, "mon.", 4) ) strncpy(wrq->ifr_name, &ifname[4], IFNAMSIZ); else strncpy(wrq->ifr_name, ifname, IFNAMSIZ); return iwinfo_ioctl(cmd, wrq); }
static int wl_ioctl(const char *name, int cmd, void *buf, int len) { struct ifreq ifr; wl_ioctl_t ioc; /* do it */ ioc.cmd = cmd; ioc.buf = buf; ioc.len = len; strncpy(ifr.ifr_name, name, IFNAMSIZ); ifr.ifr_data = (caddr_t) &ioc; return iwinfo_ioctl(SIOCDEVPRIVATE, &ifr); }
static char * madwifi_ifadd(const char *ifname) { const char *wifidev = NULL; struct ifreq ifr = { 0 }; struct ieee80211_clone_params cp = { 0 }; static char nif[IFNAMSIZ] = { 0 }; if( !(wifidev = madwifi_isvap(ifname, NULL)) && madwifi_iswifi(ifname) ) wifidev = madwifi_phyname(ifname); if( wifidev ) { snprintf(nif, sizeof(nif), "tmp.%s", ifname); strncpy(cp.icp_name, nif, IFNAMSIZ); cp.icp_opmode = IEEE80211_M_STA; cp.icp_flags = IEEE80211_CLONE_BSSID; strncpy(ifr.ifr_name, wifidev, IFNAMSIZ); ifr.ifr_data = (void *)&cp; if( !iwinfo_ioctl(SIOC80211IFCREATE, &ifr) ) { return nif; } else { cp.icp_opmode = IEEE80211_M_MONITOR; if( !iwinfo_ioctl(SIOC80211IFCREATE, &ifr) ) return nif; } } return NULL; }
static int madwifi_wrq(struct iwreq *wrq, const char *ifname, int cmd, void *data, size_t len) { strncpy(wrq->ifr_name, ifname, IFNAMSIZ); if( data != NULL ) { if( len < IFNAMSIZ ) { memcpy(wrq->u.name, data, len); } else { wrq->u.data.pointer = data; wrq->u.data.length = len; } } return iwinfo_ioctl(cmd, wrq); }
static int rt2860v2_ioctl(const char *ifname, int cmd, struct iwreq *wrq) { strncpy(wrq->ifr_name, ifname, IFNAMSIZ); return iwinfo_ioctl(cmd, wrq); }