My midterm code is composed of 2 patches in Rietveld issues 11685043 and 11480044 . The first is to remove previous 802.11p-related code in src/wifi. then implement WAVE 802.11p MAC defined by IEEE 802.11p-2010 in src/wave, the second is partial implementation of WAVE 1609.4 MAC defined by IEEE 1609.4-2010 in src/wave.
To run examples, the command is ./waf --run wave-simple-device (or wave-simple-ocb or wave-simple-vsa. To run test suites, the command is ./test.py -s wave (or ocb). Besides that, users can read wave.rst document and wiki page.
For more information, The code is hosted on github website, and the main WAVE MAC wiki page is recommended. This midterm page will introduce what has been implemented until now, how the code is implemented, what are uncertain, and what are out of scope).
The patch of 802.11p implementation removes previous 802.11p-related code in src/wifi, which was based on an old and unsuitable 1609.4-2006 standard and only partially implemented, then adds the MAC portion of the 802.11p-2010 standard, that allows stations to send data packets directly.
The main features are 1) provide outside the context of a Bss (OCB) mode of high MAC defined in the standard, 2) use specific EDCA parameters, 3) provide vendor specific action frames and allow users to send management information over VSAs. Further study is needed to verify that this implementation of 802.11p is accurate and can undertake a large number of nodes.
partial 1609.4 Implementation
The patch of 1609.4 implementation is to complete 1609.4-2010 standard based on 802.11p to deal with multiple channels operation for vehicular environment. It would build on the previous patch.The implemented features are 1) provide a NetDevice with special APIs, 2) allowusers to route different packets by different ways, 3) define standard channel coordination mechanism, user can inherit to overwrite for optimization research,4) provide two simple channel access assignment mechanisms.Because of time limit of this midterm review, some important features are notfinished, including 1) the support of VSAs frame in multiple channels environment, 2) the most important channel access assignment named AlternatingAccess. Besides that, some details not defined in the standard will need more consideration and tests.
In wave module, the helpers include QosWaveMacHelper, NqosWaveHelper, Wifi80211pHelper and WaveHelper. NqosWaveMacHelper and NqosWaveMacHelper are used to create MAC entities of WAVE. Wifi80211pHelper is used to create 802.11p devices that follow the 802.11p-2010 standard. WaveHelper is used to create WAVE devices that follow the 802.11p-2010 and 1609.4-2010 standards which are the MAC and PHY layers of the WAVE architecture. The relation of them is described as below.
WifiHelper ----------use----------> WifiMacHelper ^ ^ ^ ^ | | | | | | inherit inherit | | | | | | QosWifiMacHelper NqosWifiMacHelper | | ^ ^ | | | | inherit inherit inherit inherit | | | | WaveHelper Wifi80211pHelper QosWaveMacHelper NqosWaveHelper
Although Wifi80211Helper can use any subclasses inheriting from WifiMacHelper, we force user shall use subclasses inheriting from QosWaveMacHelper or NqosWaveHelper.
Although WaveHelper can use any subclasses inheriting from WifiMacHelper, we force user shall use subclasses inheriting from QosWaveMacHelper. NqosWaveHelper is also not permitted, because 1609.4 standard requires the support for priority.
Because some details are not define in the standard, the implementation is partially based on my personal knowledge. Some of the code needs modification or refactoring.
(1) WaveNetDevice inherits from NetDevice rather than WifiNetDevice which causes duplicated code. (2) 802.11p device supports 802.11a with 10MHz or 20MHz. But wave devices do not support 802.11a 20MHz. (3) The immediate access defined in 1609.4 is implemented simply, not considering channel guard interval. (4) The current test suite is not extensive enough, which should be refactored.
Besides some code that is not implemented well described in open issues, there are some important features are not implement yet which will be finished after midterm.
(1) implement vsa-repeater class. (2) add support for transmit parameter control. (3) support AlternatingAccess. (4) complete some examples to show performance.