mac80211 is the Linux stack for wireless hardware that requires MLME implementation in software. Currently, mac80211 does not implement any kind of suspend/resume feature which leads to the following problems even with a short suspend/resume cycle:
- hardware configuration (channel settings, encryption keys, filters, ...) breaks because hardware is reset
- associations are assumed to be still valid although the computer may have been suspended for a long time, this leads to problems because mac80211 continually tries to communicate with the AP although it is long gone.
Support for key hardware removal/upload has been added to mac80211 recently, but the other configuration parameters need to be identified and restored to the driver (and thus hardware) at resume time. Additionally, API needs to be defined for drivers to call mac80211's suspend/resume functions at the right spot. It might be possible to have mac80211 register suspend/resume hooks itself but could well lead to ordering problems like trying to do settings on hardware that has not resumed yet.
This project requires getting familiar with mac80211 internals but should be fairly straight-forward because of the limited interaction with the code.