335 chose to use the method described in [ji2004sslswn]_ |
335 chose to use the method described in [ji2004sslswn]_ |
336 where the backoff timer duration is lazily calculated whenever needed since it |
336 where the backoff timer duration is lazily calculated whenever needed since it |
337 is claimed to have much better performance than the simpler recurring timer |
337 is claimed to have much better performance than the simpler recurring timer |
338 solution. |
338 solution. |
339 |
339 |
|
340 The backoff procedure of DCF is described in section 9.2.5.2 of [ieee80211]_. |
|
341 |
|
342 * “The backoff procedure shall be invoked for a STA to transfer a frame |
|
343 when finding the medium busy as indicated by either the physical or |
|
344 virtual CS mechanism.” |
|
345 * “A backoff procedure shall be performed immediately after the end of |
|
346 every transmission with the More Fragments bit set to 0 of an MPDU of |
|
347 type Data, Management, or Control with subtype PS-Poll, even if no |
|
348 additional transmissions are currently queued.” |
|
349 |
|
350 Thus, if the queue is empty, a newly arrived packet should be transmitted |
|
351 immediately after channel is sensed idle for DIFS. If queue is not empty |
|
352 and after a successful MPDU that has no more fragments, a node should |
|
353 also start the backoff timer. |
|
354 |
|
355 Some users have observed that the 802.11 MAC with an empty queue on an |
|
356 idle channel will transmit the first frame arriving to the model |
|
357 immediately without waiting for DIFS or backoff, and wonder whether this |
|
358 is compliant. According to the standard, “The backoff procedure shall |
|
359 be invoked for a STA to transfer a frame when finding the medium busy |
|
360 as indicated by either the physical or virtual CS mechanism.” So in |
|
361 this case, the medium is not found to be busy in recent past and the |
|
362 station can transmit immediately. |
|
363 |
340 The higher-level MAC functions are implemented in a set of other C++ classes and |
364 The higher-level MAC functions are implemented in a set of other C++ classes and |
341 deal with: |
365 deal with: |
342 |
366 |
343 * packet fragmentation and defragmentation, |
367 * packet fragmentation and defragmentation, |
344 * use of the rts/cts protocol, |
368 * use of the rts/cts protocol, |