--- a/net80211/ieee80211_scan_sta.c +++ b/net80211/ieee80211_scan_sta.c @@ -201,8 +201,10 @@ sta_flush_table(struct sta_table *st) } static void -saveie(u_int8_t **iep, const u_int8_t *ie) +saveie(u_int8_t **iep, const u_int8_t *ie, int preserve) { + if (preserve && *iep) + return; if (ie == NULL) *iep = NULL; else @@ -304,10 +306,10 @@ found: (const struct ieee80211_tim_ie *) sp->tim; ise->se_dtimperiod = tim->tim_period; } - saveie(&ise->se_wme_ie, sp->wme); - saveie(&ise->se_wpa_ie, sp->wpa); - saveie(&ise->se_rsn_ie, sp->rsn); - saveie(&ise->se_ath_ie, sp->ath); + saveie(&ise->se_wme_ie, sp->wme, 0); + saveie(&ise->se_wpa_ie, sp->wpa, !sp->isprobe); + saveie(&ise->se_rsn_ie, sp->rsn, !sp->isprobe); + saveie(&ise->se_ath_ie, sp->ath, 0); /* clear failure count after STA_FAIL_AGE passes */ if (se->se_fails && (jiffies - se->se_lastfail) > STA_FAILS_AGE*HZ) { --- a/net80211/ieee80211_input.c +++ b/net80211/ieee80211_input.c @@ -3106,6 +3106,7 @@ ieee80211_recv_mgmt(struct ieee80211vap */ IEEE80211_VERIFY_LENGTH(efrm - frm, 12); memset(&scan, 0, sizeof(scan)); + scan.isprobe = (subtype == IEEE80211_FC0_SUBTYPE_PROBE_RESP) && IEEE80211_ADDR_EQ(wh->i_addr2, vap->iv_myaddr); scan.tstamp = frm; frm += 8; scan.bintval = le16toh(*(__le16 *)frm); --- a/net80211/ieee80211_scan.h +++ b/net80211/ieee80211_scan.h @@ -133,6 +133,7 @@ struct ieee80211_scanparams { u_int8_t erp; u_int16_t bintval; u_int8_t timoff; + u_int8_t isprobe; u_int8_t *tim; u_int8_t *tstamp; u_int8_t *country; summaryrefslogtreecommitdiffstats
path: root/Makefile
blob: db79274c9af0e2f1b9666841a780fb5bc154854f (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95