* Fix tx parameters for a node according to ``association state''. */
| 241 | * Fix tx parameters for a node according to ``association state''. |
| 242 | */ |
| 243 | void |
| 244 | ieee80211_node_setuptxparms(struct ieee80211_node *ni) |
| 245 | { |
| 246 | struct ieee80211vap *vap = ni->ni_vap; |
| 247 | enum ieee80211_phymode mode; |
| 248 | |
| 249 | if (ni->ni_flags & IEEE80211_NODE_VHT) { |
| 250 | if (IEEE80211_IS_CHAN_5GHZ(ni->ni_chan)) |
| 251 | mode = IEEE80211_MODE_VHT_5GHZ; |
| 252 | else |
| 253 | mode = IEEE80211_MODE_VHT_2GHZ; |
| 254 | } else if (ni->ni_flags & IEEE80211_NODE_HT) { |
| 255 | if (IEEE80211_IS_CHAN_5GHZ(ni->ni_chan)) |
| 256 | mode = IEEE80211_MODE_11NA; |
| 257 | else |
| 258 | mode = IEEE80211_MODE_11NG; |
| 259 | } else { /* legacy rate handling */ |
| 260 | if (IEEE80211_IS_CHAN_ST(ni->ni_chan)) |
| 261 | mode = IEEE80211_MODE_STURBO_A; |
| 262 | else if (IEEE80211_IS_CHAN_HALF(ni->ni_chan)) |
| 263 | mode = IEEE80211_MODE_HALF; |
| 264 | else if (IEEE80211_IS_CHAN_QUARTER(ni->ni_chan)) |
| 265 | mode = IEEE80211_MODE_QUARTER; |
| 266 | /* NB: 108A should be handled as 11a */ |
| 267 | else if (IEEE80211_IS_CHAN_A(ni->ni_chan)) |
| 268 | mode = IEEE80211_MODE_11A; |
| 269 | else if (IEEE80211_IS_CHAN_108G(ni->ni_chan) || |
| 270 | (ni->ni_flags & IEEE80211_NODE_ERP)) |
| 271 | mode = IEEE80211_MODE_11G; |
| 272 | else |
| 273 | mode = IEEE80211_MODE_11B; |
| 274 | } |
| 275 | ni->ni_txparms = &vap->iv_txparms[mode]; |
| 276 | } |
| 277 | |
| 278 | /* |
| 279 | * Set/change the channel. The rate set is also updated as |
no outgoing calls
no test coverage detected