xref: /openbsd-src/share/man/man9/rssadapt.9 (revision 90211f923b3a2a262f8eeff5aa3585839da2410c)
1*90211f92Snaddy.\"	$OpenBSD: rssadapt.9,v 1.8 2015/02/16 16:38:54 naddy Exp $
2061a67c2Sdamien.\"     $NetBSD: rssadapt.9,v 1.4 2004/12/08 18:35:56 peter Exp $
3061a67c2Sdamien.\"
4061a67c2Sdamien.\" Copyright (c) 2004 David Young.  All rights reserved.
5061a67c2Sdamien.\"
6061a67c2Sdamien.\" This code is by David Young.
7061a67c2Sdamien.\"
8061a67c2Sdamien.\" Redistribution and use in source and binary forms, with or without
9061a67c2Sdamien.\" modification, are permitted provided that the following conditions
10061a67c2Sdamien.\" are met:
11061a67c2Sdamien.\" 1. Redistributions of source code must retain the above copyright
12061a67c2Sdamien.\"    notice, this list of conditions and the following disclaimer.
13061a67c2Sdamien.\" 2. Redistributions in binary form must reproduce the above
14061a67c2Sdamien.\"    copyright notice, this list of conditions and the following
15061a67c2Sdamien.\"    disclaimer in the documentation and/or other materials
16061a67c2Sdamien.\"    provided with the distribution.
17061a67c2Sdamien.\" 3. The name of David Young may not be used to endorse or promote
18061a67c2Sdamien.\"    products derived from this software without specific prior
19061a67c2Sdamien.\"    written permission.
20061a67c2Sdamien.\"
21061a67c2Sdamien.\" THIS SOFTWARE IS PROVIDED BY David Young ``AS IS'' AND ANY
22061a67c2Sdamien.\" EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
23061a67c2Sdamien.\" THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
24061a67c2Sdamien.\" PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL David
25061a67c2Sdamien.\" Young BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
26061a67c2Sdamien.\" EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED
27061a67c2Sdamien.\" TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
28061a67c2Sdamien.\" DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
29061a67c2Sdamien.\" ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
30061a67c2Sdamien.\" OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
31061a67c2Sdamien.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
32061a67c2Sdamien.\" POSSIBILITY OF SUCH DAMAGE.
33061a67c2Sdamien.\"
34*90211f92Snaddy.Dd $Mdocdate: February 16 2015 $
35061a67c2Sdamien.Dt RSSADAPT 9
36061a67c2Sdamien.Os
37061a67c2Sdamien.Sh NAME
38061a67c2Sdamien.Nm rssadapt ,
39061a67c2Sdamien.Nm ieee80211_rssadapt_choose ,
40061a67c2Sdamien.Nm ieee80211_rssadapt_input ,
41061a67c2Sdamien.Nm ieee80211_rssadapt_lower_rate ,
42061a67c2Sdamien.Nm ieee80211_rssadapt_raise_rate ,
43061a67c2Sdamien.Nm ieee80211_rssadapt_updatestats
44061a67c2Sdamien.Nd rate adaptation based on received signal strength
45061a67c2Sdamien.Sh SYNOPSIS
46061a67c2Sdamien.In net80211/ieee80211_var.h
47061a67c2Sdamien.In net80211/ieee80211_rssadapt.h
48061a67c2Sdamien.Ft void
49061a67c2Sdamien.Fn ieee80211_rssadapt_input "struct ieee80211com *ic" \
50f22d9adcSdamien"st construct ieee80211_node *ni" "struct ieee80211_rssadapt *ra" "int rssi"
51061a67c2Sdamien.Ft void
52061a67c2Sdamien.Fn ieee80211_rssadapt_lower_rate "struct ieee80211com *ic" \
53f22d9adcSdamien"const struct ieee80211_node *ni" "struct ieee80211_rssadapt *ra" \
54f22d9adcSdamien"const struct ieee80211_rssdesc *id"
55061a67c2Sdamien.Ft void
56061a67c2Sdamien.Fn ieee80211_rssadapt_raise_rate "struct ieee80211com *ic" \
57f22d9adcSdamien"struct ieee80211_rssadapt *ra" "const struct ieee80211_rssdesc *id"
58061a67c2Sdamien.Ft void
59061a67c2Sdamien.Fn ieee80211_rssadapt_updatestats "struct ieee80211_rssadapt *ra"
60061a67c2Sdamien.Ft int
61061a67c2Sdamien.Fn ieee80211_rssadapt_choose "struct ieee80211_rssadapt *ra" \
62f22d9adcSdamien"const struct ieee80211_rateset *rs" "const struct ieee80211_frame *wh" \
63f22d9adcSdamien"u_int len" "int fixed_rate" "const char *dvname" "int do_not_adapt"
64061a67c2Sdamien.Sh DESCRIPTION
65061a67c2SdamienThe
66061a67c2Sdamien.Nm
67061a67c2Sdamienmodule provides rapid adaptation of transmission data rate to 802.11
68061a67c2Sdamiendevice drivers based on received-signal strength
69061a67c2Sdamien.Pq RSS .
70061a67c2SdamienA driver needs only to provide
71061a67c2Sdamien.Nm
72061a67c2Sdamienwith indications of RSS and failure/success of transmissions for
73061a67c2Sdamieneach 802.11 client or peer.
74061a67c2SdamienFor each transmit packet,
75061a67c2Sdamien.Nm
76061a67c2Sdamienchooses the transmission data rate that offers the best expected
77061a67c2Sdamienthroughput, given the packet's length and destination.
78061a67c2Sdamien.Pp
79061a67c2Sdamien.Nm
80061a67c2Sdamienmodels an 802.11 channel very simply
81061a67c2Sdamien.Po
82061a67c2Sdamiensee also the
83061a67c2Sdamien.Sx BUGS
84061a67c2Sdamiensection
85061a67c2Sdamien.Pc .
86061a67c2SdamienIt assumes that the packet-error rate
87061a67c2Sdamien.Pq PER
88061a67c2Sdamienis determined by the signal-to-noise ratio
89061a67c2Sdamien.Pq S/N
90061a67c2Sdamienat the receiver, the transmission data rate, and the packet length.
91061a67c2SdamienThe S/N determines the choice of data rate that yields the lowest
92061a67c2SdamienPER for all packets of a certain length.
93061a67c2Sdamien.Sh FUNCTIONS
94061a67c2Sdamien.Bl -tag -width Ds -compact
95061a67c2Sdamien.It Fn ieee80211_rssadapt_choose "ra" "rs" "wh" "len" "fixed_rate" "dvname" \
96061a67c2Sdamien"do_not_adapt"
97061a67c2Sdamien.Pp
98061a67c2SdamienChoose the transmission data rate for a packet.
99061a67c2Sdamien.Pp
100061a67c2Sdamien.Bl -tag -width "do_not_adapt" -compact
101061a67c2Sdamien.It Fa ra
102061a67c2SdamienOrdinarily, the
103061a67c2Sdamien.Nm
104061a67c2Sdamienstate object belonging to the node which is the packet destination.
105061a67c2SdamienHowever, if the destination is a broadcast/multicast address, then
106061a67c2Sdamien.Fa ra
107061a67c2Sdamienbelongs to the BSS node,
108*90211f92Snaddy.Va ic->ic_bss .
109061a67c2Sdamien.It Fa rs
110061a67c2SdamienA list of eligible data rates for the node; for example, the
111061a67c2Sdamienrates negotiated when the node associated with the network.
112061a67c2Sdamien.It Fa len
113061a67c2SdamienThe packet length in bytes, including the 802.11 header and
114061a67c2Sdamienframe check sequence
115061a67c2Sdamien.Pq FCS .
116061a67c2Sdamien.It Fa fixed_rate
117061a67c2SdamienIf the operator has set the data rate using, for example,
118061a67c2Sdamien.Ic "ifconfig wi0 media ds1" ,
119061a67c2Sdamienthen
120061a67c2Sdamien.Fa fixed_rate
121061a67c2Sdamientells the index of that rate in
122061a67c2Sdamien.Fa rs .
123061a67c2Sdamien.Nm
124061a67c2Sdamienobeys a fixed data rate whenever the 802.11 standard allows it:
125061a67c2Sdamiensometimes the standard requires multicast/broadcast packets to be
126061a67c2Sdamientransmitted at a so-called
127061a67c2Sdamien.Dq basic rate .
128061a67c2Sdamien.It Fa dvname
129061a67c2SdamienThe device driver uses
130061a67c2Sdamien.Fa dvname
131061a67c2Sdamiento indicate the name of the
132061a67c2Sdamieninterface for the purpose of diagnostic and debug messages.
133061a67c2SdamienThe driver sets
134061a67c2Sdamien.Fa dvname
135061a67c2Sdamiento
136061a67c2Sdamien.Dv NULL
137061a67c2Sdamienwhen no messages are desired.
138061a67c2Sdamien.It Fa do_not_adapt
139061a67c2SdamienIf
140061a67c2Sdamien.Fa do_not_adapt
141061a67c2Sdamienis non-zero, then
142061a67c2Sdamien.Fn ieee80211_rssadapt_choose
143061a67c2Sdamienwill choose the highest rate in
144061a67c2Sdamien.Fa rs
145061a67c2Sdamienthat suits the destination, regardless of the RSS.
146061a67c2Sdamien.El
147061a67c2SdamienThe return value of
148061a67c2Sdamien.Fn ieee80211_rssadapt_choose
149061a67c2Sdamienis an index into
150061a67c2Sdamien.Fa rs ,
151061a67c2Sdamienindicating its choice of transmit data rate.
152061a67c2Sdamien.Pp
153061a67c2Sdamien.It Fn ieee80211_rssadapt_input "ic" "ni" "ra" "rssi"
154061a67c2SdamienThe RSS serves as a rough estimate of the S/N at each node.
155061a67c2SdamienA driver provides RSS updates using
156061a67c2Sdamien.Fn ieee80211_rssadapt_input ,
157061a67c2Sdamienwhose arguments are:
158061a67c2Sdamien.Pp
159061a67c2Sdamien.Bl -tag -width "rssi" -compact
160061a67c2Sdamien.It Fa ic
161061a67c2SdamienThe wireless interface's 802.11 state object.
162061a67c2Sdamien.It Fa ni
163061a67c2SdamienThe 802.11 node whose RSS the driver is updating.
164061a67c2Sdamien.It Fa ra
165061a67c2SdamienThe node's
166061a67c2Sdamien.Nm
167061a67c2Sdamienstate object.
168061a67c2Sdamien.It Fa rssi
169061a67c2SdamienThe node's received signal strength indication.
170061a67c2SdamienThe range of
171061a67c2Sdamien.Fa rssi
172061a67c2Sdamienis from 0 to 255.
173061a67c2Sdamien.El
174061a67c2Sdamien.Pp
175061a67c2Sdamien.It Fn ieee80211_rssadapt_lower_rate "ic" "ni" "ra" "id"
176061a67c2Sdamien.It Fn ieee80211_rssadapt_raise_rate "ic" "ra" "id"
177061a67c2SdamienDrivers call
178061a67c2Sdamien.Fn ieee80211_rssadapt_raise_rate
179061a67c2Sdamienand
180061a67c2Sdamien.Fn ieee80211_rssadapt_lower_rate
181061a67c2Sdamiento indicate transmit successes and failures, respectively.
182061a67c2Sdamien.Pp
183061a67c2Sdamien.Bl -tag -width Ds -compact
184061a67c2Sdamien.It Fa ic
185061a67c2SdamienThe 802.11 state object.
186061a67c2Sdamien.It Fa ni
187061a67c2SdamienThe neighbor to whom the driver transmitted.
188061a67c2Sdamien.It Fa ra
189061a67c2SdamienThe neighbor's
190061a67c2Sdamien.Nm
191061a67c2Sdamienstate object.
192061a67c2Sdamien.It Fa id
193061a67c2SdamienDisplays statistics on the transmission attempt.
194061a67c2Sdamien.El
195061a67c2Sdamien.Pp
196061a67c2Sdamien.It Fn ieee80211_rssadapt_updatestats "ra"
197061a67c2SdamienAn 802.11 node is eligible for its RSS thresholds to decay every
198061a67c2Sdamien1/10 to 10 seconds.
199061a67c2SdamienIt is eligible more often (every 1/10 second) at high packet rates,
200061a67c2Sdamienand less often (every 10 seconds) at low packet rates.
201061a67c2SdamienA driver assists
202061a67c2Sdamien.Nm
203061a67c2Sdamienin tracking the exponential-average packet rate by calling
204061a67c2Sdamien.Fn ieee80211_rssadapt_updatestats
205061a67c2Sdamienevery 1/10th second for each node's
206061a67c2Sdamien.Vt ieee80211_rssadapt
207061a67c2Sdamienobject.
208061a67c2Sdamien.Pp
209061a67c2Sdamien.Bl -tag -width Ds -compact
210061a67c2Sdamien.It Fa ra
211061a67c2SdamienThe neighbor's
212061a67c2Sdamien.Nm
213061a67c2Sdamienstate object.
214061a67c2Sdamien.El
215061a67c2Sdamien.El
216061a67c2Sdamien.Sh ALGORITHM
217061a67c2Sdamien.Nm
218061a67c2Sdamienmonitors the RSS from neighboring 802.11 nodes, recording the
219061a67c2Sdamienexponential average RSS in each neighbor's
220061a67c2Sdamien.Vt ieee80211_rssadapt
221061a67c2Sdamienstructure.
222061a67c2Sdamien.Nm
223061a67c2Sdamienuses transmit success/failure feedback from the
224061a67c2Sdamiendevice driver to fill a table of RSS thresholds.
225061a67c2SdamienThe table is indexed by packet size,
226061a67c2Sdamien.Va L ,
227061a67c2Sdamienand a data rate,
228061a67c2Sdamien.Va R ,
229061a67c2Sdamiento find out the minimum exponential-average RSS that a node must show before
230061a67c2Sdamien.Nm
231061a67c2Sdamienwill indicate that a packet
232061a67c2Sdamien.Va L
233061a67c2Sdamienbytes long can be transmitted R bits per second with optimal expected
234061a67c2Sdamienthroughput.
235061a67c2Sdamien.Pp
236061a67c2SdamienWhen the driver indicates a unicast packet is transmitted unsuccessfully
237061a67c2Sdamien.Po
238061a67c2Sdamienthat is, the NIC received no ACK for the packet
239061a67c2Sdamien.Pc ,
240061a67c2Sdamien.Nm
241061a67c2Sdamienwill move the corresponding RSS threshold toward the exponential
242061a67c2Sdamienaverage RSSI at the time of transmission.
243061a67c2SdamienThus several consecutive transmit failures for the same
244061a67c2Sdamien.Ao
245061a67c2Sdamien.Va L ,
246061a67c2Sdamien.Va R
247061a67c2Sdamien.Ac
248061a67c2Sdamientuple will ensure that the RSS threshold rises high enough that
249061a67c2Sdamienrate
250061a67c2Sdamien.Va R
251061a67c2Sdamienis abandoned for packets
252061a67c2Sdamien.Va L
253061a67c2Sdamienbytes long.
254061a67c2SdamienWhen the driver indicates a successful transmission,
255061a67c2Sdamienthe RSS threshold corresponding to the same packet length, but the
256061a67c2Sdamiennext higher data rate, is lowered slightly.
257061a67c2SdamienThe RSS threshold is said to
258061a67c2Sdamien.Dq decay .
259061a67c2SdamienThis ensures that occasionally
260061a67c2Sdamien.Nm
261061a67c2Sdamienindicates the driver should try the next higher data rate,
262061a67c2Sdamienjust in case conditions at the receiver have changed
263061a67c2Sdamien.Po
264061a67c2Sdamienfor example, noise levels have fallen
265061a67c2Sdamien.Pc
266061a67c2Sdamienand a higher data rate can be supported at the same RSS level.
267061a67c2Sdamien.Pp
268061a67c2SdamienThe rate of decay is controlled.
269061a67c2SdamienIn an interval of 1/10th second
270061a67c2Sdamiento 10 seconds, only one RSS threshold per neighbor may decay.
271061a67c2SdamienThe interval is connected to the exponential-average rate that packets
272061a67c2Sdamienare being transmitted.
273061a67c2SdamienAt high packet rates, the interval is shortest.
274061a67c2SdamienIt is longest at low packet rates.
275061a67c2SdamienThe rationale for this is that RSS thresholds should not decay
276061a67c2Sdamienrapidly if there is no information from packet transmissions to
277061a67c2Sdamiencounteract their decay.
278061a67c2Sdamien.Sh DATA STRUCTURES
279061a67c2SdamienAn
280061a67c2Sdamien.Vt ieee80211_rssdesc
281061a67c2Sdamiendescribes a transmission attempt.
282061a67c2Sdamien.Bd -literal -offset indent
283061a67c2Sdamienstruct ieee80211_rssdesc {
284061a67c2Sdamien        u_int                    id_len;
285061a67c2Sdamien        u_int                    id_rateidx;
286061a67c2Sdamien        struct ieee80211_node   *id_node;
287061a67c2Sdamien        u_int8_t                 id_rssi;
288061a67c2Sdamien};
289061a67c2Sdamien.Ed
290061a67c2Sdamien.Pp
291061a67c2Sdamien.Fa id_len
292061a67c2Sdamienis the length, in bytes, of the transmitted packet.
293061a67c2Sdamien.Fa id_node
294061a67c2Sdamienpoints to the neighbor's
295061a67c2Sdamien.Vt ieee8021_node ,
296061a67c2Sdamienand
297061a67c2Sdamien.Fa id_rssi
298061a67c2Sdamienis the exponential-average RSS at the time the packet was
299061a67c2Sdamientransmitted.
300061a67c2Sdamien.Fa id_rateidx
301061a67c2Sdamienis an index into the destination neighbor's rate-set,
302*90211f92Snaddy.Fa id_node->ni_rates ,
303061a67c2Sdamienindicating the transmit data rate for the packet.
304061a67c2Sdamien.Pp
305061a67c2Sdamien.Vt ieee80211_rssadapt
306061a67c2Sdamiencontains the rate-adaptation state for a neighboring 802.11 node.
307061a67c2SdamienOrdinarily a driver will
308061a67c2Sdamien.Dq subclass
309061a67c2Sdamien.Vt ieee80211_node .
310061a67c2SdamienThe
311061a67c2Sdamien.Vt ieee80211_rssadapt
312061a67c2Sdamienstructure will be a subclass member.
313061a67c2SdamienIn this way, every node's
314061a67c2Sdamien.Nm
315061a67c2Sdamiencondition is independently tracked and stored in its node object.
316061a67c2Sdamien.Bd -literal -offset 4n
317061a67c2Sdamienstruct ieee80211_rssadapt {
318061a67c2Sdamien        u_int16_t               ra_avg_rssi;
319061a67c2Sdamien        u_int32_t               ra_nfail;
320061a67c2Sdamien        u_int32_t               ra_nok;
321061a67c2Sdamien        u_int32_t               ra_pktrate;
322061a67c2Sdamien        u_int16_t               ra_rate_thresh[IEEE80211_RSSADAPT_BKTS]
323061a67c2Sdamien                                              [IEEE80211_RATE_SIZE];
324061a67c2Sdamien        struct timeval          ra_last_raise;
325061a67c2Sdamien        struct timeval          ra_raise_interval;
326061a67c2Sdamien};
327061a67c2Sdamien.Ed
328061a67c2Sdamien.Pp
329061a67c2Sdamien.Fa ra_avg_rssi
330061a67c2Sdamienis the exponential-average RSS, shifted left 8 bits.
331061a67c2Sdamien.Fa ra_nfail
332061a67c2Sdamienindicates the number of transmit failures in the current update interval;
333061a67c2Sdamien.Fa ra_nok
334061a67c2Sdamienthe number of transmit successes in the current update interval.
335061a67c2Sdamien.Fa ra_pktrate
336061a67c2Sdamienindicates the exponential average number of transmit failure/success
337061a67c2Sdamienindications over past update intervals.
338061a67c2SdamienThis approximates the rate of packet-transmission.
339061a67c2Sdamien.Fa ra_rate_thresh
340061a67c2Sdamiencontains RSS thresholds that are indexed by
341db1a25dfSjmc.Aq packet length, data rate
342061a67c2Sdamientuples.
343061a67c2SdamienWhen this node's exponential-average RSS exceeds
344061a67c2Sdamien.Fa ra_rate_thresh[i][j] ,
345061a67c2Sdamienthen packets at most 128 x 8^i bytes long are eligible to be
346061a67c2Sdamientransmitted at the rate indexed by j.
347061a67c2Sdamien.Pp
348061a67c2Sdamien.Fa ra_last_raise
349061a67c2Sdamienand
350061a67c2Sdamien.Fa ra_raise_interval
351061a67c2Sdamienare used to control the rate that RSS thresholds
352061a67c2Sdamien.Dq decay .
353061a67c2Sdamien.Fa ra_last_raise
354061a67c2Sdamienindicates when
355061a67c2Sdamien.Fn ieee80211_rssadapt_raise_rate
356061a67c2Sdamienwas last called and
357061a67c2Sdamien.Fa ra_raise_interval
358061a67c2Sdamienindicates the minimum period between consecutive calls to
359061a67c2Sdamien.Fn ieee80211_rssadapt_raise_rate .
360061a67c2SdamienIf
361061a67c2Sdamien.Fn ieee80211_rssadapt_raise_rate
362061a67c2Sdamienis called more than once in any period, the second and subsequent
363061a67c2Sdamiencalls are ignored.
364061a67c2Sdamien.Sh CODE REFERENCES
365061a67c2SdamienThis section describes places within the
366061a67c2Sdamien.Ox
367061a67c2Sdamiensource tree where actual code implementing or using
368061a67c2Sdamien.Nm
369061a67c2Sdamiencan be found.
370061a67c2SdamienAll pathnames are relative to
371061a67c2Sdamien.Pa /usr/src .
372061a67c2Sdamien.Pp
373061a67c2SdamienThe code for
374061a67c2Sdamien.Nm
375061a67c2Sdamienis in the file
376061a67c2Sdamien.Pa sys/net80211/ieee80211_rssadapt.c .
377061a67c2Sdamien.Pp
3781ae0ddabSdamien.Xr ath 4
379061a67c2Sdamiencontains a reference implementation.
380061a67c2SdamienSee
3811ae0ddabSdamien.Pa sys/dev/ic/ath.c .
382061a67c2Sdamien.Sh SEE ALSO
3831ae0ddabSdamien.Xr ath 4 ,
384d3603060Sjmc.Xr ieee80211 9
385061a67c2Sdamien.Rs
386061a67c2Sdamien.%A Javier del Prado Pavon
387061a67c2Sdamien.%A Sunghyun Choi
388061a67c2Sdamien.%T "Link Adaptation Strategy for IEEE 802.11 WLAN via Received Signal \
389061a67c2SdamienStrength Measurement"
390061a67c2Sdamien.%J "ICC'03"
391061a67c2Sdamien.%P pp. 1108-1113
392061a67c2Sdamien.%C Anchorage, Alaska
393061a67c2Sdamien.%D May 2003
394061a67c2Sdamien.Re
395061a67c2Sdamien.Sh HISTORY
396061a67c2Sdamien.Nm
397061a67c2Sdamienfirst appeared in
398061a67c2Sdamien.Nx
399061a67c2Sdamienand was ported to
400061a67c2Sdamien.Ox
401061a67c2Sdamienby
402f0641c22Sschwarze.An Todd C. Miller Aq Mt millert@OpenBSD.org
403061a67c2Sdamien.Sh AUTHORS
404f0641c22Sschwarze.An David Young Aq Mt dyoung@NetBSD.org
405061a67c2Sdamien.Sh BUGS
406061a67c2SdamienTo cope with interference from microwave ovens, frequency-hopping
407061a67c2Sdamienradios, and other sources of RF pulse-trains and bursts,
408061a67c2Sdamien.Nm
409061a67c2Sdamienshould adapt the fragmentation threshold as well as the data rate.
410061a67c2Sdamien.Pp
411061a67c2SdamienFor improved throughput,
412061a67c2Sdamien.Nm
413061a67c2Sdamienshould indicate to drivers when they should use the 802.11b
414061a67c2Sdamienshort-preamble.
415061a67c2Sdamien.Pp
416061a67c2SdamienThe constants in
417061a67c2Sdamien.Fn ieee80211_rssadapt_updatestats
418061a67c2Sdamienshould be configurable.
419