| 4185 | } |
| 4186 | |
| 4187 | static void |
| 4188 | list_txpow(int s) |
| 4189 | { |
| 4190 | struct ieee80211req_chaninfo *achans; |
| 4191 | uint8_t reported[IEEE80211_CHAN_BYTES]; |
| 4192 | struct ieee80211_channel *c, *prev; |
| 4193 | int i, half; |
| 4194 | |
| 4195 | getchaninfo(s); |
| 4196 | achans = malloc(IEEE80211_CHANINFO_SPACE(chaninfo)); |
| 4197 | if (achans == NULL) |
| 4198 | errx(1, "no space for active channel list"); |
| 4199 | achans->ic_nchans = 0; |
| 4200 | memset(reported, 0, sizeof(reported)); |
| 4201 | for (i = 0; i < chaninfo->ic_nchans; i++) { |
| 4202 | c = &chaninfo->ic_chans[i]; |
| 4203 | /* suppress duplicates as above */ |
| 4204 | if (isset(reported, c->ic_ieee) && !verbose) { |
| 4205 | /* XXX we assume duplicates are adjacent */ |
| 4206 | assert(achans->ic_nchans > 0); |
| 4207 | prev = &achans->ic_chans[achans->ic_nchans-1]; |
| 4208 | /* display highest power on channel */ |
| 4209 | if (c->ic_maxpower > prev->ic_maxpower) |
| 4210 | *prev = *c; |
| 4211 | } else { |
| 4212 | achans->ic_chans[achans->ic_nchans++] = *c; |
| 4213 | setbit(reported, c->ic_ieee); |
| 4214 | } |
| 4215 | } |
| 4216 | if (!verbose) { |
| 4217 | half = achans->ic_nchans / 2; |
| 4218 | if (achans->ic_nchans % 2) |
| 4219 | half++; |
| 4220 | |
| 4221 | for (i = 0; i < achans->ic_nchans / 2; i++) { |
| 4222 | print_txpow(&achans->ic_chans[i]); |
| 4223 | print_txpow(&achans->ic_chans[half+i]); |
| 4224 | printf("\n"); |
| 4225 | } |
| 4226 | if (achans->ic_nchans % 2) { |
| 4227 | print_txpow(&achans->ic_chans[i]); |
| 4228 | printf("\n"); |
| 4229 | } |
| 4230 | } else { |
| 4231 | for (i = 0; i < achans->ic_nchans; i++) { |
| 4232 | print_txpow_verbose(&achans->ic_chans[i]); |
| 4233 | printf("\n"); |
| 4234 | } |
| 4235 | } |
| 4236 | free(achans); |
| 4237 | } |
| 4238 | |
| 4239 | static void |
| 4240 | list_keys(int s) |
no test coverage detected