Index: x11/i3status/Makefile =================================================================== --- x11/i3status/Makefile +++ x11/i3status/Makefile @@ -2,7 +2,7 @@ PORTNAME= i3status PORTVERSION= 2.8 -PORTREVISION= 3 +PORTREVISION= 4 CATEGORIES= x11 MASTER_SITES= http://i3wm.org/i3status/ Index: x11/i3status/files/patch-print_wireless_info.c =================================================================== --- /dev/null +++ x11/i3status/files/patch-print_wireless_info.c @@ -0,0 +1,69 @@ +--- src/print_wireless_info.c.orig 2014-01-05 03:34:06.000000000 -0800 ++++ src/print_wireless_info.c 2015-08-12 08:53:36.045442000 -0700 +@@ -193,10 +193,11 @@ + return 1; + #endif + #if defined(__FreeBSD__) || defined(__DragonFly__) +- int s, len, inwid; ++ int s, inwid; + uint8_t buf[24 * 1024], *cp; + struct ieee80211req na; +- char network_id[IEEE80211_NWID_LEN + 1]; ++ char bssid[IEEE80211_ADDR_LEN]; ++ size_t len; + + if ((s = socket(AF_INET, SOCK_DGRAM, 0)) == -1) + return (0); +@@ -224,6 +225,18 @@ + + memset(&na, 0, sizeof(na)); + strlcpy(na.i_name, interface, sizeof(na.i_name)); ++ na.i_type = IEEE80211_IOC_BSSID; ++ na.i_data = bssid; ++ na.i_len = sizeof(bssid); ++ ++ if (ioctl(s, SIOCG80211, (caddr_t)&na) == -1) { ++ printf("fail\n"); ++ close(s); ++ return (0); ++ } ++ ++ memset(&na, 0, sizeof(na)); ++ strlcpy(na.i_name, interface, sizeof(na.i_name)); + na.i_type = IEEE80211_IOC_SCAN_RESULTS; + na.i_data = buf; + na.i_len = sizeof(buf); +@@ -237,19 +250,20 @@ + close(s); + len = na.i_len; + cp = buf; +- struct ieee80211req_scan_result *sr; +- uint8_t *vp; +- sr = (struct ieee80211req_scan_result *)cp; +- vp = (u_int8_t *)(sr + 1); +- strlcpy(network_id, (const char *)vp, sr->isr_ssid_len + 1); +- if (!strcmp(network_id, &info->essid[0])) { +- info->signal_level = sr->isr_rssi; +- info->flags |= WIRELESS_INFO_FLAG_HAS_SIGNAL; +- info->noise_level = sr->isr_noise; +- info->flags |= WIRELESS_INFO_FLAG_HAS_NOISE; +- info->quality = sr->isr_intval; +- info->flags |= WIRELESS_INFO_FLAG_HAS_QUALITY; +- } ++ do { ++ const struct ieee80211req_scan_result *sr; ++ ++ sr = (const struct ieee80211req_scan_result *)cp; ++ if (memcmp(bssid, sr->isr_bssid, sizeof(bssid)) == 0) { ++ info->signal_level = sr->isr_rssi / 2 + sr->isr_noise; ++ info->flags |= WIRELESS_INFO_FLAG_HAS_SIGNAL; ++ info->noise_level = sr->isr_noise; ++ info->flags |= WIRELESS_INFO_FLAG_HAS_NOISE; ++ break; ++ } ++ cp += sr->isr_len; ++ len -= sr->isr_len; ++ } while (len >= sizeof(struct ieee80211req_scan_result)); + + return 1; + #endif