COAP uses OpenFlow to enable SDN style management of residential APs. Following are the main components of the COAP framework.

-
- Controller: The COAP controller is implemented over the Java based open source SDN controller, Floodlight and currently runs on a standard linux server for our deployment. All the COAP controller modules (StatsManager, COAPEngine and ConfigManager) are implemented as modules within Floodlight. The controller uses OpenFlow with COAP-specific protocol extensions to collect data from the gateways as well as apply the configuration updates.
-
- Protocol extensions to OpenFlow:The OpenFlow communication protocol currently consists of capabilities to exchange switch related statistics (e.g., statistics per switch port, flow, queue etc.). We augment this feature to also exchange different COAP related wireless specific statistics (e.g., airtime usage, link performance, non-WiFi activity). To transmit wireless configuration updates to gateways (e.g., switch channel, throttle airtime), we extend the OpenFlow protocol to use a mechanism analogous to the one used to send switch configuration updates (e.g., adding a flow-related rule).
-
- Wireless Gateways: In our current implementation using OpenWrt based WiFi gateways, we use the open-source click framework to implement the WiFi and non-WiFi statistics gathering capabilities of the BasicStatsReporter and DiagnosticStatsReporter modules. Airshark provides the non-WiFi device detection capabilities using commodity WiFi cards. The OpenFlow module interfaces with Airshark and click as well as communicates with the SDN controller. We have instrumented the ath9k wireless driver to support APIs related to airtime management. For example, to throttle the airtime access of a gateway, we disable the transmit queue (using the AR_Q_TXD register) to block packet transmissions for the required duration. Across vendors, the underlying implementation of this feature can be driver specific and transparent to the COAP API. The APConfigManager module interfaces with the OpenWrt configuration tool (luci) to perform AP level configurations (e.g., channel, transmit power and traffic shaping). This interface can easily be modified for other platforms.