diff --git a/sys/netproto/802_11/ieee80211_rssadapt.h b/sys/netproto/802_11/ieee80211_rssadapt.h --- a/sys/netproto/802_11/ieee80211_rssadapt.h +++ b/sys/netproto/802_11/ieee80211_rssadapt.h @@ -61,9 +61,12 @@ uint32_t ra_nok; /* exponential average packets/second */ uint32_t ra_pktrate; - /* RSSI threshold for each Tx rate */ + /* RSSI threshold for each Tx rate. + * Must be indexed by [0..rs_nrates-1]; rs_nrates can be up to + * IEEE80211_RATE_MAXSIZE (15) once XRATES are merged, so the array + * must be sized by RATE_MAXSIZE, not RATE_SIZE (8). */ uint16_t ra_rate_thresh[IEEE80211_RSSADAPT_BKTS] - [IEEE80211_RATE_SIZE]; + [IEEE80211_RATE_MAXSIZE]; }; #define IEEE80211_RSSADAPT_SUCCESS 1 diff --git a/sys/netproto/802_11/wlan/ieee80211_rssadapt.c b/sys/netproto/802_11/wlan/ieee80211_rssadapt.c --- a/sys/netproto/802_11/wlan/ieee80211_rssadapt.c +++ b/sys/netproto/802_11/wlan/ieee80211_rssadapt.c @@ -238,7 +238,7 @@ struct ieee80211_rssadapt_node *ra = ni->ni_rctls; u_int pktlen = iarg; const struct ieee80211_rateset *rs = &ra->ra_rates; - uint16_t (*thrs)[IEEE80211_RATE_SIZE]; + uint16_t (*thrs)[IEEE80211_RATE_MAXSIZE]; int rix, rssi; if ((ticks - ra->ra_ticks) > ra->ra_rs->interval) { @@ -275,7 +275,7 @@ rssadapt_lower_rate(struct ieee80211_rssadapt_node *ra, int pktlen, int rssi) { uint16_t last_thr; - uint16_t (*thrs)[IEEE80211_RATE_SIZE]; + uint16_t (*thrs)[IEEE80211_RATE_MAXSIZE]; u_int rix; thrs = &ra->ra_rate_thresh[bucket(pktlen)]; @@ -294,7 +294,7 @@ static void rssadapt_raise_rate(struct ieee80211_rssadapt_node *ra, int pktlen, int rssi) { - uint16_t (*thrs)[IEEE80211_RATE_SIZE]; + uint16_t (*thrs)[IEEE80211_RATE_MAXSIZE]; uint16_t newthr, oldthr; int rix;