Skip to content

Integrating own MAC layer model into the EMANE stack question #242

@vivianchiong

Description

@vivianchiong

Hello,

I have a question that I could not quite find the answer to on other issues.

I have a MAC layer model (C++ code) that I would like to test in the EMANE environment for the same reasons as others – to benefit from the framework’s scalability and flexibility of large-scale network emulation and test our design’s performance in different scenarios before needing to buy real radio hardware. This model is based on TDMA, and I’ve modified the open-source TDMA radio model slightly and configured the FrameworkPHY layer to match our own physical layer model’s behavior (thanks to your help!). But beyond this, we want to plugin in our MAC layer model into something that can run in EMANE nodes without conflating our MAC layer model’s API with EMANE’s radio model plugin API.

I would like to be able to treat our MAC layer model of code like a black box that does, indeed, generally do what EMANE radio models typically do (e.g. queuing, fragmentation/assembly, TDMA scheduling, etc.) but come time for the model to interact with higher layers (e.g. sending received packets up to the Virtual Transport to reach the user) or lower layers (e.g. sending packets down to the FrameworkPHY for OTA transmission), our model would use a defined API to speak to those surrounding layers for upstream/downstream data/control functionalities.

The reason for us is because we don’t want to over-rely on the EMANE framework or couple our software with EMANE-only constructs resulting in breaking our implementation when we put the same black box MAC layer model onto real radios. However, we also don’t want to have to re-solve challenges that you and other developers at Adjacent Link have already solved when writing the open-source TDMA radio model.

How can we integrate our model with EMANE? (I imagine we can’t just write the name of our MAC layer model's lib file into an EMANE XML, since it would need to adhere to EMANE’s APIs.) I have thought of a few potential solution angles and listed them below. Any insights or recommendations on what solution(s) are possible/feasible/ideal would be greatly appreciated!

  1. Wrap our MAC layer model code into a ShimLayer that sits, for example, between the Virtual Transport and a custom, lightweight radio model (if a radio model is even necessary), all of which sits on top of the FrameworkPHY. This ShimLayer would be quite heavy though, and from what I've seen, ShimLayers tend to be more lightweight.
  2. Integrate our MAC layer model into a custom radio model that derives from MACLayerImplementor, while architecting it in a way that keeps EMANE interfaces/constructs separated from the rest to avoid the coupling concern previously mentioned.
  3. Run our MAC layer model as a separate black box application, and have it interface with and drive the FrameworkPHY layer and EMANE somehow.

Thank you so much!

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions