TDMA support in FreeBSD
Overview
Sam Leffler leveraged the Atheros chipset capabilities to implement a TDMA scheme.
More information is available - http://people.freebsd.org/~sam/FreeBSD_TDMA-20090921.pdf. Here's one example where it was deployed - http://hpwren.ucsd.edu/news/20090516/
Example
Configure a TDMA master. Note that Sam observed some stability issues in 2GHz 20MHz operation on the legacy NICs. The clock rate is different (44MHz for 2GHz operation; 40MHz for 5GHz operation) which may have had something to do with it. It's also possible that some of the different MAC values programmed in based on the clock rate have an effect. In any case, please note that you may see strange issues in 2GHz operation that don't show up in 5GHz operation.
Until A-MSDU is implemented, aggregation will not work and the maximum throughput under 11n operation is approximately 50 megabits/second in each direction.
The master:
ifconfig wlan0 create wlandev ath0 wlanmode tdma -ampdu ifconfig wlan0 ssid ADRIAN_TDMA channel 48:ht/40 ifconfig wlan0 tdmaslotcnt 2 tdmaslot 0 tdmaslotlen 2500 ifconfig wlan0 192.168.4.1/24 up
The slave:
ifconfig wlan0 create wlandev ath0 wlanmode tdma -ampdu ifconfig wlan0 ssid ADRIAN_TDMA ifconfig wlan0 inet 192.168.4.2/24 up
You can use 'athdebug -i athX -o tdma 1' to monitor TDMA specific parameters, including the slot timing offset/drift and some debugging information (such as "transmit override receive" statistics.)
Known good chipsets
This isn't an exhaustive list - it's just what it has so far been tested on. If you can configure it, it should work.
- AR5413/AR5414
- AR5416
- AR9160
- AR9280
- AR9380
- AR9341 (SoC)
- AR9331 (SoC)
Known issues
None at this time.
Future work
- It would be good to support MCS rates and TX aggregation - to do it cleanly, it may be nice to first get 11n adhoc support as well as A-MSDU support into net80211.
- Supporting multiple slave stations would be nice. Read Sam's TDMA paper for some information about this.
- Map all the data transmit queues to one single hardware transmit queue. The burst time mechanism used to implement the slot time is per-DCU, rather than a global thing. So if multiple QoS levels are transmitting, you'll end up with multiple burst times running and you'll exceed your slot time.
- Add 4-addr support, so it can be used as a bridge.
Figure out how to use it in a classic STA<->AP setup with the AP in bridge mode; that doesn't seem to work right at the moment.