Subject: Re: CVS commit: src/sys
To: Atsushi Onoe <onoe@sm.sony.co.jp>
From: David Young <dyoung@pobox.com>
List: source-changes
Date: 10/14/2003 22:54:58
On Wed, Oct 15, 2003 at 08:44:09AM +0900, Atsushi Onoe wrote:
> > Modified Files:
> > 	src/sys/dev/ic: ath.c
> > 	src/sys/net80211: ieee80211.c
> > 
> > Log Message:
> > Do not index arrays using enum constants, since enums can be
> > re-ordered and extended. Instead, use a switch-statement or a
> > key->value table with appropriate bounds-checking.
> 
> The enum ieee80211_phymode is also used as index for ic_sup_rates[]
> of ieee80211com, and the enum constants are explicitly assigned their
> value for this reason.
> 
> Though the log message itself looks correct, the change (at least for
> ieee80211.c) doesn't make sense to me.

I see what you're saying, but ic_sup_rates is a little different
case than the others.  It does not matter which rate table
ic_sup_rates[IEEE80211_MODE_11A] selects, as long as it is a different
table than ic_sup_rates[IEEE80211_MODE_11B] selects. Also, ic_sup_rates[]
is protected from an overflow because its size is IEEE80211_MODE_MAX.

Compare with ieee80211_phymode_name. If
ieee80211_phymode_name[IEEE80211_MODE_11A] selects a different
mode string than "11a", that is bad. Moreover, it is very bad if
ieee80211_phymode_name[mode] goes off the end of the list.

Dave

-- 
David Young             OJC Technologies
dyoung@ojctech.com      Urbana, IL * (217) 278-3933