+ static int
+ load_ieee80211_nodereq(const char *iface, struct ieee80211_nodereq *nr)
+ {
+ struct ieee80211_bssid bssid;
+ int sockfd;
+
+ memset(&bssid, 0, sizeof(bssid));
+ memset(nr, 0, sizeof(struct ieee80211_nodereq));
+ if ((sockfd = socket(AF_INET, SOCK_DGRAM, 0)) < 0) {
+ fprintf(stderr, "socket 'AF_INET': %s\n",
+ strerror(errno));
+ return 0;
+ }
+ strlcpy(bssid.i_name, iface, sizeof(bssid.i_name));
+ if ((ioctl(sockfd, SIOCG80211BSSID, &bssid)) < 0) {
+ fprintf(stderr, "ioctl 'SIOCG80211BSSID': %s\n",
+ strerror(errno));
+ close(sockfd);
+ return 0;
+ }
+ strlcpy(nr->nr_ifname, iface, sizeof(nr->nr_ifname));
+ memmove(&nr->nr_macaddr, bssid.i_bssid, sizeof(nr->nr_macaddr));
+ if ((ioctl(sockfd, SIOCG80211NODE, nr)) < 0 && nr->nr_rssi) {
+ fprintf(stderr, "ioctl 'SIOCG80211NODE': %s\n",
+ strerror(errno));
+ close(sockfd);
+ return 0;
+ }
+
+ return close(sockfd), 1;