| 3717 | } |
| 3718 | |
| 3719 | static void |
| 3720 | list_scan(int s) |
| 3721 | { |
| 3722 | uint8_t buf[24*1024]; |
| 3723 | char ssid[IEEE80211_NWID_LEN+1]; |
| 3724 | const uint8_t *cp; |
| 3725 | int len, idlen; |
| 3726 | |
| 3727 | if (get80211len(s, IEEE80211_IOC_SCAN_RESULTS, buf, sizeof(buf), &len) < 0) |
| 3728 | errx(1, "unable to get scan results"); |
| 3729 | if (len < sizeof(struct ieee80211req_scan_result)) |
| 3730 | return; |
| 3731 | |
| 3732 | getchaninfo(s); |
| 3733 | |
| 3734 | printf("%-*.*s %-17.17s %4s %4s %-7s %3s %4s\n" |
| 3735 | , IEEE80211_NWID_LEN, IEEE80211_NWID_LEN, "SSID/MESH ID" |
| 3736 | , "BSSID" |
| 3737 | , "CHAN" |
| 3738 | , "RATE" |
| 3739 | , " S:N" |
| 3740 | , "INT" |
| 3741 | , "CAPS" |
| 3742 | ); |
| 3743 | cp = buf; |
| 3744 | do { |
| 3745 | const struct ieee80211req_scan_result *sr; |
| 3746 | const uint8_t *vp, *idp; |
| 3747 | |
| 3748 | sr = (const struct ieee80211req_scan_result *) cp; |
| 3749 | vp = cp + sr->isr_ie_off; |
| 3750 | if (sr->isr_meshid_len) { |
| 3751 | idp = vp + sr->isr_ssid_len; |
| 3752 | idlen = sr->isr_meshid_len; |
| 3753 | } else { |
| 3754 | idp = vp; |
| 3755 | idlen = sr->isr_ssid_len; |
| 3756 | } |
| 3757 | printf("%-*.*s %s %3d %3dM %4d:%-4d %4d %-4.4s" |
| 3758 | , IEEE80211_NWID_LEN |
| 3759 | , copy_essid(ssid, IEEE80211_NWID_LEN, idp, idlen) |
| 3760 | , ssid |
| 3761 | , ether_ntoa((const struct ether_addr *) sr->isr_bssid) |
| 3762 | , ieee80211_mhz2ieee(sr->isr_freq, sr->isr_flags) |
| 3763 | , getmaxrate(sr->isr_rates, sr->isr_nrates) |
| 3764 | , (sr->isr_rssi/2)+sr->isr_noise, sr->isr_noise |
| 3765 | , sr->isr_intval |
| 3766 | , getcaps(sr->isr_capinfo) |
| 3767 | ); |
| 3768 | printies(vp + sr->isr_ssid_len + sr->isr_meshid_len, |
| 3769 | sr->isr_ie_len, 24); |
| 3770 | printf("\n"); |
| 3771 | cp += sr->isr_len, len -= sr->isr_len; |
| 3772 | } while (len >= sizeof(struct ieee80211req_scan_result)); |
| 3773 | } |
| 3774 | |
| 3775 | static void |
| 3776 | scan_and_wait(int s) |
no test coverage detected