You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
191 lines
6.4 KiB
191 lines
6.4 KiB
=== modified file 'net80211/ieee80211_wireless.c'
|
|
--- net80211/ieee80211_wireless.c 2008-10-22 18:13:35 +0000
|
|
+++ net80211/ieee80211_wireless.c 2008-10-22 18:13:41 +0000
|
|
@@ -1551,11 +1551,19 @@
|
|
|
|
struct iwscanreq { /* XXX: right place for this declaration? */
|
|
struct ieee80211vap *vap;
|
|
+ struct iw_request_info *info;
|
|
char *current_ev;
|
|
char *end_buf;
|
|
int mode;
|
|
};
|
|
|
|
+#if LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 27) && !defined(IW_REQUEST_FLAG_COMPAT)
|
|
+#define iwe_stream_add_event(a, b, c, d, e) iwe_stream_add_event(b, c, d, e)
|
|
+#define iwe_stream_add_point(a, b, c, d, e) iwe_stream_add_point(b, c, d, e)
|
|
+#define iwe_stream_add_value(a, b, c, d, e, f) \
|
|
+ iwe_stream_add_value(b, c, d, e, f)
|
|
+#define iwe_stream_lcp_len(a) IW_EV_LCP_LEN
|
|
+#endif
|
|
static int
|
|
giwscan_cb(void *arg, const struct ieee80211_scan_entry *se)
|
|
{
|
|
@@ -1590,7 +1598,8 @@
|
|
IEEE80211_ADDR_COPY(iwe.u.ap_addr.sa_data, se->se_macaddr);
|
|
else
|
|
IEEE80211_ADDR_COPY(iwe.u.ap_addr.sa_data, se->se_bssid);
|
|
- current_ev = iwe_stream_add_event(current_ev, end_buf, &iwe, IW_EV_ADDR_LEN);
|
|
+ current_ev = iwe_stream_add_event(req->info, current_ev, end_buf,
|
|
+ &iwe, IW_EV_ADDR_LEN);
|
|
|
|
/* We ran out of space in the buffer. */
|
|
if (last_ev == current_ev)
|
|
@@ -1603,11 +1612,11 @@
|
|
if (vap->iv_opmode == IEEE80211_M_HOSTAP) {
|
|
iwe.u.data.length = vap->iv_des_nssid > 0 ?
|
|
vap->iv_des_ssid[0].len : 0;
|
|
- current_ev = iwe_stream_add_point(current_ev,
|
|
+ current_ev = iwe_stream_add_point(req->info, current_ev,
|
|
end_buf, &iwe, vap->iv_des_ssid[0].ssid);
|
|
} else {
|
|
iwe.u.data.length = se->se_ssid[1];
|
|
- current_ev = iwe_stream_add_point(current_ev,
|
|
+ current_ev = iwe_stream_add_point(req->info, current_ev,
|
|
end_buf, &iwe, (char *) se->se_ssid+2);
|
|
}
|
|
|
|
@@ -1621,8 +1630,8 @@
|
|
iwe.cmd = SIOCGIWMODE;
|
|
iwe.u.mode = se->se_capinfo & IEEE80211_CAPINFO_ESS ?
|
|
IW_MODE_MASTER : IW_MODE_ADHOC;
|
|
- current_ev = iwe_stream_add_event(current_ev,
|
|
- end_buf, &iwe, IW_EV_UINT_LEN);
|
|
+ current_ev = iwe_stream_add_event(req->info, current_ev,
|
|
+ end_buf, &iwe, IW_EV_UINT_LEN);
|
|
|
|
/* We ran out of space in the buffer. */
|
|
if (last_ev == current_ev)
|
|
@@ -1634,8 +1643,8 @@
|
|
iwe.cmd = SIOCGIWFREQ;
|
|
iwe.u.freq.m = se->se_chan->ic_freq * 100000;
|
|
iwe.u.freq.e = 1;
|
|
- current_ev = iwe_stream_add_event(current_ev,
|
|
- end_buf, &iwe, IW_EV_FREQ_LEN);
|
|
+ current_ev = iwe_stream_add_event(req->info, current_ev,
|
|
+ end_buf, &iwe, IW_EV_FREQ_LEN);
|
|
|
|
/* We ran out of space in the buffer. */
|
|
if (last_ev == current_ev)
|
|
@@ -1645,8 +1654,8 @@
|
|
last_ev = current_ev;
|
|
iwe.cmd = IWEVQUAL;
|
|
set_quality(&iwe.u.qual, se->se_rssi, ATH_DEFAULT_NOISE);
|
|
- current_ev = iwe_stream_add_event(current_ev,
|
|
- end_buf, &iwe, IW_EV_QUAL_LEN);
|
|
+ current_ev = iwe_stream_add_event(req->info, current_ev,
|
|
+ end_buf, &iwe, IW_EV_QUAL_LEN);
|
|
|
|
/* We ran out of space in the buffer */
|
|
if (last_ev == current_ev)
|
|
@@ -1660,7 +1669,8 @@
|
|
else
|
|
iwe.u.data.flags = IW_ENCODE_DISABLED;
|
|
iwe.u.data.length = 0;
|
|
- current_ev = iwe_stream_add_point(current_ev, end_buf, &iwe, "");
|
|
+ current_ev = iwe_stream_add_point(req->info, current_ev,
|
|
+ end_buf, &iwe, "");
|
|
|
|
/* We ran out of space in the buffer. */
|
|
if (last_ev == current_ev)
|
|
@@ -1669,28 +1679,28 @@
|
|
memset(&iwe, 0, sizeof(iwe));
|
|
last_ev = current_ev;
|
|
iwe.cmd = SIOCGIWRATE;
|
|
- current_val = current_ev + IW_EV_LCP_LEN;
|
|
+ current_val = current_ev + iwe_stream_lcp_len(req->info);
|
|
/* NB: not sorted, does it matter? */
|
|
for (j = 0; j < se->se_rates[1]; j++) {
|
|
int r = se->se_rates[2 + j] & IEEE80211_RATE_VAL;
|
|
if (r != 0) {
|
|
iwe.u.bitrate.value = r * (1000000 / 2);
|
|
- current_val = iwe_stream_add_value(current_ev,
|
|
- current_val, end_buf, &iwe,
|
|
- IW_EV_PARAM_LEN);
|
|
+ current_val = iwe_stream_add_value(req->info,
|
|
+ current_ev, current_val, end_buf,
|
|
+ &iwe, IW_EV_PARAM_LEN);
|
|
}
|
|
}
|
|
for (j = 0; j < se->se_xrates[1]; j++) {
|
|
int r = se->se_xrates[2+j] & IEEE80211_RATE_VAL;
|
|
if (r != 0) {
|
|
iwe.u.bitrate.value = r * (1000000 / 2);
|
|
- current_val = iwe_stream_add_value(current_ev,
|
|
- current_val, end_buf, &iwe,
|
|
- IW_EV_PARAM_LEN);
|
|
+ current_val = iwe_stream_add_value(req->info,
|
|
+ current_ev, current_val, end_buf,
|
|
+ &iwe, IW_EV_PARAM_LEN);
|
|
}
|
|
}
|
|
/* remove fixed header if no rates were added */
|
|
- if ((current_val - current_ev) > IW_EV_LCP_LEN) {
|
|
+ if ((current_val - current_ev) > iwe_stream_lcp_len(req->info)) {
|
|
current_ev = current_val;
|
|
} else {
|
|
/* We ran out of space in the buffer. */
|
|
@@ -1704,7 +1714,8 @@
|
|
iwe.cmd = IWEVCUSTOM;
|
|
snprintf(buf, sizeof(buf), "bcn_int=%d", se->se_intval);
|
|
iwe.u.data.length = strlen(buf);
|
|
- current_ev = iwe_stream_add_point(current_ev, end_buf, &iwe, buf);
|
|
+ current_ev = iwe_stream_add_point(req->info, current_ev,
|
|
+ end_buf, &iwe, buf);
|
|
|
|
/* We ran out of space in the buffer. */
|
|
if (last_ev == current_ev)
|
|
@@ -1728,8 +1739,8 @@
|
|
rsn_leader, sizeof(rsn_leader) - 1);
|
|
#endif
|
|
if (iwe.u.data.length != 0) {
|
|
- current_ev = iwe_stream_add_point(current_ev, end_buf,
|
|
- &iwe, buf);
|
|
+ current_ev = iwe_stream_add_point(req->info,
|
|
+ current_ev, end_buf, &iwe, buf);
|
|
|
|
/* We ran out of space in the buffer */
|
|
if (last_ev == current_ev)
|
|
@@ -1754,8 +1765,8 @@
|
|
wpa_leader, sizeof(wpa_leader) - 1);
|
|
#endif
|
|
if (iwe.u.data.length != 0) {
|
|
- current_ev = iwe_stream_add_point(current_ev, end_buf,
|
|
- &iwe, buf);
|
|
+ current_ev = iwe_stream_add_point(req->info,
|
|
+ current_ev, end_buf, &iwe, buf);
|
|
|
|
/* We ran out of space in the buffer. */
|
|
if (last_ev == current_ev)
|
|
@@ -1773,8 +1784,8 @@
|
|
se->se_wme_ie, se->se_wme_ie[1] + 2,
|
|
wme_leader, sizeof(wme_leader) - 1);
|
|
if (iwe.u.data.length != 0) {
|
|
- current_ev = iwe_stream_add_point(current_ev, end_buf,
|
|
- &iwe, buf);
|
|
+ current_ev = iwe_stream_add_point(req->info,
|
|
+ current_ev, end_buf, &iwe, buf);
|
|
|
|
/* We ran out of space in the buffer. */
|
|
if (last_ev == current_ev)
|
|
@@ -1791,8 +1802,8 @@
|
|
se->se_ath_ie, se->se_ath_ie[1] + 2,
|
|
ath_leader, sizeof(ath_leader) - 1);
|
|
if (iwe.u.data.length != 0) {
|
|
- current_ev = iwe_stream_add_point(current_ev, end_buf,
|
|
- &iwe, buf);
|
|
+ current_ev = iwe_stream_add_point(req->info,
|
|
+ current_ev, end_buf, &iwe, buf);
|
|
|
|
/* We ran out of space in the buffer. */
|
|
if (last_ev == current_ev)
|
|
@@ -1815,6 +1826,7 @@
|
|
int res = 0;
|
|
|
|
req.vap = vap;
|
|
+ req.info = info;
|
|
req.current_ev = extra;
|
|
if (data->length == 0) {
|
|
req.end_buf = extra + IW_SCAN_MAX_DATA;
|
|
|