Browse Source

Convert ctrl_iface scan_results cmd to use BSS table

Jouni Malinen 15 years ago
parent
commit
16b71ac217
1 changed files with 14 additions and 34 deletions
  1. 14 34
      wpa_supplicant/ctrl_iface.c

+ 14 - 34
wpa_supplicant/ctrl_iface.c

@@ -790,20 +790,7 @@ static char * wpa_supplicant_wps_ie_txt_buf(char *pos, char *end,
 
 
 
 
 static char * wpa_supplicant_wps_ie_txt(char *pos, char *end,
 static char * wpa_supplicant_wps_ie_txt(char *pos, char *end,
-					const struct wpa_scan_res *res)
-{
-#ifdef CONFIG_WPS
-	struct wpabuf *wps_ie;
-	wps_ie = wpa_scan_get_vendor_ie_multi(res, WPS_IE_VENDOR_TYPE);
-	return wpa_supplicant_wps_ie_txt_buf(pos, end, wps_ie);
-#else /* CONFIG_WPS */
-	return pos;
-#endif /* CONFIG_WPS */
-}
-
-
-static char * wpa_supplicant_wps_ie_txt_bss(char *pos, char *end,
-					    const struct wpa_bss *bss)
+					const struct wpa_bss *bss)
 {
 {
 #ifdef CONFIG_WPS
 #ifdef CONFIG_WPS
 	struct wpabuf *wps_ie;
 	struct wpabuf *wps_ie;
@@ -817,7 +804,7 @@ static char * wpa_supplicant_wps_ie_txt_bss(char *pos, char *end,
 
 
 /* Format one result on one text line into a buffer. */
 /* Format one result on one text line into a buffer. */
 static int wpa_supplicant_ctrl_iface_scan_result(
 static int wpa_supplicant_ctrl_iface_scan_result(
-	const struct wpa_scan_res *res, char *buf, size_t buflen)
+	const struct wpa_bss *bss, char *buf, size_t buflen)
 {
 {
 	char *pos, *end;
 	char *pos, *end;
 	int ret;
 	int ret;
@@ -827,39 +814,38 @@ static int wpa_supplicant_ctrl_iface_scan_result(
 	end = buf + buflen;
 	end = buf + buflen;
 
 
 	ret = os_snprintf(pos, end - pos, MACSTR "\t%d\t%d\t",
 	ret = os_snprintf(pos, end - pos, MACSTR "\t%d\t%d\t",
-			  MAC2STR(res->bssid), res->freq, res->level);
+			  MAC2STR(bss->bssid), bss->freq, bss->level);
 	if (ret < 0 || ret >= end - pos)
 	if (ret < 0 || ret >= end - pos)
 		return pos - buf;
 		return pos - buf;
 	pos += ret;
 	pos += ret;
-	ie = wpa_scan_get_vendor_ie(res, WPA_IE_VENDOR_TYPE);
+	ie = wpa_bss_get_vendor_ie(bss, WPA_IE_VENDOR_TYPE);
 	if (ie)
 	if (ie)
 		pos = wpa_supplicant_ie_txt(pos, end, "WPA", ie, 2 + ie[1]);
 		pos = wpa_supplicant_ie_txt(pos, end, "WPA", ie, 2 + ie[1]);
-	ie2 = wpa_scan_get_ie(res, WLAN_EID_RSN);
+	ie2 = wpa_bss_get_ie(bss, WLAN_EID_RSN);
 	if (ie2)
 	if (ie2)
 		pos = wpa_supplicant_ie_txt(pos, end, "WPA2", ie2, 2 + ie2[1]);
 		pos = wpa_supplicant_ie_txt(pos, end, "WPA2", ie2, 2 + ie2[1]);
-	pos = wpa_supplicant_wps_ie_txt(pos, end, res);
-	if (!ie && !ie2 && res->caps & IEEE80211_CAP_PRIVACY) {
+	pos = wpa_supplicant_wps_ie_txt(pos, end, bss);
+	if (!ie && !ie2 && bss->caps & IEEE80211_CAP_PRIVACY) {
 		ret = os_snprintf(pos, end - pos, "[WEP]");
 		ret = os_snprintf(pos, end - pos, "[WEP]");
 		if (ret < 0 || ret >= end - pos)
 		if (ret < 0 || ret >= end - pos)
 			return pos - buf;
 			return pos - buf;
 		pos += ret;
 		pos += ret;
 	}
 	}
-	if (res->caps & IEEE80211_CAP_IBSS) {
+	if (bss->caps & IEEE80211_CAP_IBSS) {
 		ret = os_snprintf(pos, end - pos, "[IBSS]");
 		ret = os_snprintf(pos, end - pos, "[IBSS]");
 		if (ret < 0 || ret >= end - pos)
 		if (ret < 0 || ret >= end - pos)
 			return pos - buf;
 			return pos - buf;
 		pos += ret;
 		pos += ret;
 	}
 	}
-	if (res->caps & IEEE80211_CAP_ESS) {
+	if (bss->caps & IEEE80211_CAP_ESS) {
 		ret = os_snprintf(pos, end - pos, "[ESS]");
 		ret = os_snprintf(pos, end - pos, "[ESS]");
 		if (ret < 0 || ret >= end - pos)
 		if (ret < 0 || ret >= end - pos)
 			return pos - buf;
 			return pos - buf;
 		pos += ret;
 		pos += ret;
 	}
 	}
 
 
-	ie = wpa_scan_get_ie(res, WLAN_EID_SSID);
 	ret = os_snprintf(pos, end - pos, "\t%s",
 	ret = os_snprintf(pos, end - pos, "\t%s",
-			  ie ? wpa_ssid_txt(ie + 2, ie[1]) : "");
+			  wpa_ssid_txt(bss->ssid, bss->ssid_len));
 	if (ret < 0 || ret >= end - pos)
 	if (ret < 0 || ret >= end - pos)
 		return pos - buf;
 		return pos - buf;
 	pos += ret;
 	pos += ret;
@@ -877,13 +863,8 @@ static int wpa_supplicant_ctrl_iface_scan_results(
 	struct wpa_supplicant *wpa_s, char *buf, size_t buflen)
 	struct wpa_supplicant *wpa_s, char *buf, size_t buflen)
 {
 {
 	char *pos, *end;
 	char *pos, *end;
-	struct wpa_scan_res *res;
+	struct wpa_bss *bss;
 	int ret;
 	int ret;
-	size_t i;
-
-	if (wpa_s->scan_res == NULL &&
-	    wpa_supplicant_get_scan_results(wpa_s, NULL, 0) < 0)
-		return 0;
 
 
 	pos = buf;
 	pos = buf;
 	end = buf + buflen;
 	end = buf + buflen;
@@ -893,9 +874,8 @@ static int wpa_supplicant_ctrl_iface_scan_results(
 		return pos - buf;
 		return pos - buf;
 	pos += ret;
 	pos += ret;
 
 
-	for (i = 0; i < wpa_s->scan_res->num; i++) {
-		res = wpa_s->scan_res->res[i];
-		ret = wpa_supplicant_ctrl_iface_scan_result(res, pos,
+	dl_list_for_each(bss, &wpa_s->bss_id, struct wpa_bss, list_id) {
+		ret = wpa_supplicant_ctrl_iface_scan_result(bss, pos,
 							    end - pos);
 							    end - pos);
 		if (ret < 0 || ret >= end - pos)
 		if (ret < 0 || ret >= end - pos)
 			return pos - buf;
 			return pos - buf;
@@ -1581,7 +1561,7 @@ static int wpa_supplicant_ctrl_iface_bss(struct wpa_supplicant *wpa_s,
 	ie2 = wpa_bss_get_ie(bss, WLAN_EID_RSN);
 	ie2 = wpa_bss_get_ie(bss, WLAN_EID_RSN);
 	if (ie2)
 	if (ie2)
 		pos = wpa_supplicant_ie_txt(pos, end, "WPA2", ie2, 2 + ie2[1]);
 		pos = wpa_supplicant_ie_txt(pos, end, "WPA2", ie2, 2 + ie2[1]);
-	pos = wpa_supplicant_wps_ie_txt_bss(pos, end, bss);
+	pos = wpa_supplicant_wps_ie_txt(pos, end, bss);
 	if (!ie && !ie2 && bss->caps & IEEE80211_CAP_PRIVACY) {
 	if (!ie && !ie2 && bss->caps & IEEE80211_CAP_PRIVACY) {
 		ret = os_snprintf(pos, end - pos, "[WEP]");
 		ret = os_snprintf(pos, end - pos, "[WEP]");
 		if (ret < 0 || ret >= end - pos)
 		if (ret < 0 || ret >= end - pos)