This repo is the OMNeT++ project for MLO implementation. We use OMNeT++ v6.0.3 and INET v4.5.2. The MLO framework is mostly implemented on top of the existing 802.11 mechanisms in INET.
src
and simulations
folders include the source code for implemented/extended modules, and example simulation setups and configurations, respectively. Here, we describe the main modules in the source files. The following project tree also shows an overview of these modules, excluding the files.
├───src
│ ├───common
│ ├───lmac
│ │ ├───llc
│ │ ├───mac
│ │ │ ├───channelaccess
│ │ │ ├───contention
│ │ │ └───coordinationfunction
│ │ └───portal
│ ├───umac
│ ├───protocolbase
│ └───node
└───simulations
Under src/node
, you can find the implementation of MLO station (endpoint) and access point. They are encapsulation of several other modules as described in the respective .ned files. The figure below shows the implementation of the MLO station. For simplicity, the details beyond MAC layer implementation are excluded.
MLOStation
follows a similar structure with the main OMNeT++ module WirelessHost
that represents a generic implementation of TCP/IP stack over wireless interfaces. It simply encapsulates MLOLinkLayerNodeBase
(under src/protocolbase
), which is the main module encapsulating MLO-specific layers, e.g., U-MAC and multiple L-MAC instances. Therefore, you generally do not modify MLOStation
but MLOLinkLayerNodeBase
to extend 802.11 MAC layer with additional modules besides U-MAC and L-MAC.
MLOAccessPoint
is a reimplementation of the OMNeT++ module AccessPoint
with an additional U-MAC layer. Unlike the station, you can directly modify this to add new modules interplaying with MLO features, e.g., a packet scheduler, QoS classifier etc. Overall, it has the same MAC layer implementation with MLOStation
and additional bridging modules existing in OMNeT++. Any modifications in U-MAC and L-MAC implementations would directly be observed in both station and access point as they share the same modules presented in the following sections.
- Several Eclipse configuration files in the repo (.nedfolders, .nedexclusions, .oppbuildspec) represent the project settings that everyone needs to follow. Alternatively, you can check the correct settings on the following screenshot:
Additionally, inet4.5
should be added to the project references.
- You should manually add 802.11be as a supported protocol under Ethernet protocol group by modifying
Protocol.h
andProtocolGroup.h
(underinet/common/
). Since the supported protocols are listed under constant static variables, there is not a straightforward way to add new ones without modifying several other OMNeT++ modules that include these source files. Therefore, the following modifications are required for now:- In
inet/common/Protocol.h
, addstatic const Protocol ieee80211be;
as a new public variable underProtocol
class. - In
inet/common/Protocol.cc
, defineconst Protocol Protocol::ieee80211be("ieee80211be", "Wi-Fi 7", Protocol::LinkLayer);
as a constant variable. - In
inet/common/ProtocolGroup.cc
, extend the static variablestatic const ProtocolGroup::Protocols ethertypeProtocols
with{ Protocol::ieee80211be.getId(), &Protocol::ieee80211be }
.
- In