wiki:CSMAMAC

Version 9 (modified by chunter, 14 years ago) (diff)

--

Carrier-Sense Medium Access Reference Design (CSMAMAC)

The CSMAMAC is serves as the user-level MAC layer in reference design. The basic algorithm is simple:

  • Do I have a packet to send?
    • If the medium is idle, send it, enter a timeout, and wait for an acknowledgment from the destination
    • If the medium is busy, enter a backoff period and wait for the medium to become idle
  • Did I receive a data packet?
    • If the packet pass checksum and is addressed to me, send an acknowledgment
  • Did no know acknowledgment happen during a timeout period?
    • If the maximum number of retransmits has not occurred, enter a backoff and try retransmitting
    • If the maximum number of retransmits has occurred, drop the packet
  • Did I wait through a backoff period?
    • If the medium is busy, retransmit, increment the total number of resends, enter a timeout, and wait for an acknowledgment from the destination
    • If the medium is busy, enter a backoff period and wait for the medium to become idle

This simple algorithm encompasses much of the behavior in commercial 802.11 MAC/PHY chipsets. This algorithm lends itself nicely to a state diagram, which in turn, translates into C-code that can be executed in the PowerPC of the FPGA on WARP.

Life of a Packet

Idle

Accepted Packet from Source

Medium State

Transmit Packet via PHY

Set TIMEOUT Timer

Set BACKOFF Timer

Received Packet via PHY

Checksum

Destination Address

Packet Type

Clear TIMEOUT

Deliver Packet to Sink

Timer Expired

Timer Type

Medium State

Maximum Resends

Drop Packet

Increment Resend Counter