summaryrefslogtreecommitdiffstats
path: root/sys/net80211/ieee80211_scan_sta.c
diff options
context:
space:
mode:
authorsam <sam@FreeBSD.org>2009-03-18 19:28:17 +0000
committersam <sam@FreeBSD.org>2009-03-18 19:28:17 +0000
commit8bfd160665d6b36b087de434348dc376113ec6a6 (patch)
tree8452969c7e6a5966840de839c95bbc46ce5c5321 /sys/net80211/ieee80211_scan_sta.c
parent9f91fe4f6bb519a3c35b1c93fd0afdddd7817f59 (diff)
downloadFreeBSD-src-8bfd160665d6b36b087de434348dc376113ec6a6.zip
FreeBSD-src-8bfd160665d6b36b087de434348dc376113ec6a6.tar.gz
Minor cleanups of tdma protocol handling:
o break out version-related code to simplify rev'ing the protocol o add parameter validation macros so checks that appear multiple places are consistent (and easy to change) o add protocol version check when looking for a scan candidate o improve scan debug output format o rewrite beacon update handling to calculate a bitmask of changed values and pass that down through the driver callback so drivers can optimize work o do slot bounds check before use when parsing received beacons
Diffstat (limited to 'sys/net80211/ieee80211_scan_sta.c')
-rw-r--r--sys/net80211/ieee80211_scan_sta.c14
1 files changed, 9 insertions, 5 deletions
diff --git a/sys/net80211/ieee80211_scan_sta.c b/sys/net80211/ieee80211_scan_sta.c
index bc99817..607c36d 100644
--- a/sys/net80211/ieee80211_scan_sta.c
+++ b/sys/net80211/ieee80211_scan_sta.c
@@ -126,6 +126,7 @@ static void sta_flush_table(struct sta_table *);
#define MATCH_TDMA_NOTMASTER 0x0800 /* not TDMA master */
#define MATCH_TDMA_NOSLOT 0x1000 /* all TDMA slots occupied */
#define MATCH_TDMA_LOCAL 0x2000 /* local address */
+#define MATCH_TDMA_VERSION 0x4000 /* protocol version mismatch */
static int match_bss(struct ieee80211vap *,
const struct ieee80211_scan_state *, struct sta_entry *, int);
static void adhoc_age(struct ieee80211_scan_state *);
@@ -970,9 +971,12 @@ match_bss(struct ieee80211vap *vap,
if (vap->iv_caps & IEEE80211_C_TDMA) {
const struct ieee80211_tdma_param *tdma =
(const struct ieee80211_tdma_param *)se->se_ies.tdma_ie;
+ const struct ieee80211_tdma_state *ts = vap->iv_tdma;
if (tdma == NULL)
fail |= MATCH_TDMA_NOIE;
+ else if (tdma->tdma_version != ts->tdma_version)
+ fail |= MATCH_TDMA_VERSION;
else if (tdma->tdma_slot != 0)
fail |= MATCH_TDMA_NOTMASTER;
else if (tdma_isfull(tdma))
@@ -1062,9 +1066,10 @@ match_bss(struct ieee80211vap *vap,
fail & MATCH_CC ? '$' :
#ifdef IEEE80211_SUPPORT_TDMA
fail & MATCH_TDMA_NOIE ? '&' :
- fail & MATCH_TDMA_NOTMASTER ? ':' :
- fail & MATCH_TDMA_NOSLOT ? '@' :
- fail & MATCH_TDMA_LOCAL ? '#' :
+ fail & MATCH_TDMA_VERSION ? 'v' :
+ fail & MATCH_TDMA_NOTMASTER ? 's' :
+ fail & MATCH_TDMA_NOSLOT ? 'f' :
+ fail & MATCH_TDMA_LOCAL ? 'l' :
#endif
fail ? '-' : '+', ether_sprintf(se->se_macaddr));
printf(" %s%c", ether_sprintf(se->se_bssid),
@@ -1076,8 +1081,7 @@ match_bss(struct ieee80211vap *vap,
fail & MATCH_RATE ? '!' : ' ');
printf(" %4s%c",
(se->se_capinfo & IEEE80211_CAPINFO_ESS) ? "ess" :
- (se->se_capinfo & IEEE80211_CAPINFO_IBSS) ? "ibss" :
- "????",
+ (se->se_capinfo & IEEE80211_CAPINFO_IBSS) ? "ibss" : "",
fail & MATCH_CAPINFO ? '!' : ' ');
printf(" %3s%c ",
(se->se_capinfo & IEEE80211_CAPINFO_PRIVACY) ?
OpenPOWER on IntegriCloud