5 GHz Mesh Support in Mininet-WiFi (mesh_11ac.py)

54 views
Skip to first unread message

Kavin Kumar T

unread,
Mar 22, 2025, 5:21:00 AMMar 22
to mininet-wifi-discuss

Hi everyone,

I wanted to share a modified example of the default mesh.py in Mininet-WiFi that attempts to enable mesh communication in the 5 GHz band (802.11ac / channel 36). This setup is intended for anyone experimenting with higher-throughput mesh networks using 802.11ac.


🔧 Changes Made:

  • Switched from channel=5 (2.4 GHz) to channel=36 (5 GHz)

  • Changed ht_cap to 'HT40+'

  • Set wmediumd_mode=False to bypass RF propagation limitations during testing

  • Assigned IPs manually to mesh interfaces (staX-mp0) when needed

  • Optional: Tried patching format_freq() to avoid NoneType errors when using 5 GHz channels


Current Result:

Although the mesh interfaces are created and IPs are assigned, the 5 GHz mesh nodes are not forming links, and ping between them fails unless fallback to 2.4 GHz is used. If anyone has managed to get 802.11s mesh working over 5 GHz in Mininet-WiFi, I’d really appreciate your input or suggestions.

I've attached the modified mesh_11ac.py file for reference.

Thanks and Regards,
Kavin

mesh_11ac.py

Ramon Fontes

unread,
Mar 22, 2025, 7:30:14 AMMar 22
to Kavin Kumar T, mininet-wifi-discuss
Hello,

It works If you add the link as follows:
net.addLink(sta1, cls=mesh, ssid='meshNet', intf='sta1-wlan0',
channel=36, ht_cap='HT40+', mode="ac")

As you can see, I just added the ac mode and set the channel.

Since wmediumd doesn't support 5GHZ with HT40+ you also have to
disable it. I think I have to take one of my students to add support
to HT40+. At first it doesn't seem to be an hard task if we consider
https://mcsindex.com/.

Kavin Kumar T

unread,
Mar 22, 2025, 7:56:48 AMMar 22
to mininet-wifi-discuss
“Tested and confirmed — adding mode='ac' inside addLink() with wmediumd disabled works!”
Thank the maintainers for confirming and highlighting the HT40+ changes in future.

Kavin Kumar T

unread,
Mar 22, 2025, 9:48:15 AMMar 22
to mininet-wifi-discuss

Hi everyone,

Following up on my previous discussion where I shared the modified mesh_11ac.py to simulate Wi-Fi mesh over 5 GHz using mode='ac', I’m now working on simulating a new profile which is based on 802.11ah (HaLow) for sub-GHz mesh networking for my research work:


✅ Progress So Far:
  • My system supports sub-GHz frequencies (902–928 MHz), confirmed via iw list:

    Frequencies: * 902.5 MHz * ... * 927.5 MHz
  • mac80211_hwsim also exposes these frequencies under Band 5 also confirmed in iw reg get.

  • Mesh interface mode (mesh point) is supported.


❓ Questions:
  1. How do we correctly assign a mesh interface to a channel in the 902–928 MHz range in addLink()?

    • For example, should I use:

      net.addLink(sta1, cls=mesh, intf='sta1-wlan1', mesh_id='halowNet', freq=915, ht_cap='HT20', mode='11ah')

      or is channel=<custom> preferred?

  2. Is mode='11ah' officially supported or just a label?

    • I don’t see 11ah listed in Mininet-WiFi’s docs, but I’d like to simulate the MCS0–7 behavior and long preamble/guard interval as closely as possible.

  3. How should I configure bandwidth (1/2/4 MHz) in the absence of native 802.11ah support?

    • Should I shape traffic externally using tc qdisc, or is there a Mininet-WiFi method?

Thanks & Regards,
Kavin

Ramon Fontes

unread,
Mar 22, 2025, 9:51:13 AMMar 22
to Kavin Kumar T, mininet-wifi-discuss
802.11ah is not supported yet because I haven't had the chance to try it out yet. I am aware about some support of s1g by mac80211_hwsim but I still have to investigate it.

--
You received this message because you are subscribed to the Google Groups "mininet-wifi-discuss" group.
To unsubscribe from this group and stop receiving emails from it, send an email to mininet-wifi-dis...@googlegroups.com.
To view this discussion visit https://groups.google.com/d/msgid/mininet-wifi-discuss/cc1f6086-8144-4954-a85c-49ba1d2861d0n%40googlegroups.com.

Kavin Kumar T

unread,
Mar 30, 2025, 3:39:24 PMMar 30
to mininet-wifi-discuss

Hi Prof. Ramon Fontes,

Thank you for your reply.

I’m currently working on a multi-radio mesh setup as part of my research, and I’ve encountered a blocker related to HT40+ support in the 5 GHz band using wmediumd.

As you mentioned:

"Since wmediumd doesn't support 5GHZ with HT40+, you also have to disable it. I think I have to take one of my students to add support to HT40+. At first it doesn't seem to be a hard task if we consider https://mcsindex.com/."

I wanted to kindly check if there have been any updates or progress on this front, or if you could share any guidance or suggestions for implementing this support myself. I’d be happy to develop the necessary changes and contribute them back to the community.

Looking forward to your advice.

Code Snippet:
net = Mininet_wifi(link=wmediumd, wmediumd_mode=interference)

info("*** Creating nodes (Wi-Fi `mp0`, HaLow simulate `mp1`)\n")
sta1 = net.addStation('sta1', wlans=2, position='10,10,0', txAntennas=[2, 1],rxAntennas=[2, 1],ht_capab=['[HT40+]', '[HT20]'])
sta2 = net.addStation('sta2', wlans=2, position='50,10,0', txAntennas=[2, 1],rxAntennas=[2, 1],ht_capab=['[HT40+]', '[HT20]'])
sta3 = net.addStation('sta3', wlans=2, position='90,10,0', txAntennas=[2, 1],rxAntennas=[2, 1],ht_capab=['[HT40+]', '[HT20]'])

info("*** Configuring Propagation Model\n")
net.setPropagationModel(model="logDistance", exp=4)

info("*** Configuring nodes\n")
net.configureNodes()

# Wi-Fi mesh on `wlan0`
sta1.params['range'][0] = 100
sta2.params['range'][0] = 100
sta3.params['range'][0] = 100
net.addLink(sta1, cls=mesh, ssid='wifi-mesh', intf='sta1-wlan0', channel=149, ht_cap='HT40+', mode="ac", txpower=24)
net.addLink(sta2, cls=mesh, ssid='wifi-mesh', intf='sta2-wlan0', channel=149, ht_cap='HT40+', mode="ac", txpower=24)
net.addLink(sta3, cls=mesh, ssid='wifi-mesh', intf='sta3-wlan0', channel=149, ht_cap='HT40+', mode="ac", txpower=24)

# HaLow simulate mesh on `wlan1`
sta1.params['range'][1] = 200
sta2.params['range'][1] = 200
sta3.params['range'][1] = 200
net.addLink(sta1, cls=mesh, ssid='halow-mesh', intf='sta1-wlan1', channel=11, mode='g', txpower=30)
net.addLink(sta2, cls=mesh, ssid='halow-mesh', intf='sta2-wlan1', channel=11, mode='g', txpower=30)
net.addLink(sta3, cls=mesh, ssid='halow-mesh', intf='sta3-wlan1', channel=11, mode='g', txpower=30)

# Call the regulatory domain utility here
set_regulatory_domain_to_us(net)

info("*** Starting Network\n")
net.start()

Thanks & Regards,
Kavin

Ramon Fontes

unread,
Mar 30, 2025, 3:50:08 PMMar 30
to Kavin Kumar T, mininet-wifi-discuss
Dear Kumar,

Unfortunately, I haven't made any progress on this yet. We're currently managing multiple ongoing tasks that need to be completed before we can focus on HT40+ support. As for contributions, both the community and I would greatly appreciate them—they are more than welcome! I recommend tracking the packets around this line in the code: https://github.com/ramonfontes/wmediumd/blob/mininet-wifi/wmediumd/wmediumd.c#L338.

Kavin Kumar T

unread,
Mar 31, 2025, 6:10:30 AMMar 31
to mininet-wifi-discuss
Dear Prof. Ramon Fontes,

Thanks for your quick response and i will explore wmediumd code.

Meanwhile, as i have showed in the previous code snippet, since 11ah is not supported, simply considered as 11g and channel 11. This seems reasonable for mesh link comparisons for now.
# HaLow simulate mesh on `wlan1`
sta1.params['range'][1] = 200
sta2.params['range'][1] = 200
sta3.params['range'][1] = 200
net.addLink(sta1, cls=mesh, ssid='halow-mesh', intf='sta1-wlan1', channel=11, mode='g', txpower=30)
net.addLink(sta2, cls=mesh, ssid='halow-mesh', intf='sta2-wlan1', channel=11, mode='g', txpower=30)
net.addLink(sta3, cls=mesh, ssid='halow-mesh', intf='sta3-wlan1', channel=11, mode='g', txpower=30)

However, for Wi-Fi mesh simulation, i am wondering without this HT40+ limitation with wmediumd any other way quick way to simulate for now.
# Wi-Fi mesh on `wlan0`
sta1.params['range'][0] = 100
sta2.params['range'][0] = 100
sta3.params['range'][0] = 100
net.addLink(sta1, cls=mesh, ssid='wifi-mesh', intf='sta1-wlan0', channel=149, ht_cap='HT40+', mode="ac", txpower=24)
net.addLink(sta2, cls=mesh, ssid='wifi-mesh', intf='sta2-wlan0', channel=149, ht_cap='HT40+', mode="ac", txpower=24)
net.addLink(sta3, cls=mesh, ssid='wifi-mesh', intf='sta3-wlan0', channel=149, ht_cap='HT40+', mode="ac", txpower=24)

I have tried multiple options, but none of those working and finally end up similar to HaLow simulate (11g) one that will not be helpful for my multi-radio/link research work. Kindly help if any better option for the same
#channel=149, ht_cap='HT40+', mode="ac", txpower=24 => Ping and iPerf traffic fails
#channel=149, ht_cap='HT20', mode="n", txpower=24 => same as 11ac (Ping, iPerf fails)
#channel=149, ht_cap='HT20', mode="ac", txpower=24 => same as 11ac (Ping, iPerf fails)
#channel=149, ht_cap='HT40+', mode="n", txpower=24 => same as 11ac (Ping, iPerf fails)

#channel=1, mode='g', txpower=24 => Works, but same as HaLow simulate
#channel=1, mode='n', txpower=24 => Error as follow
#channel=1, ht_cap='HT40+', mode="n", txpower=24 => Error as follow
#channel=1, ht_cap='HT20', mode="n", txpower=24 => Error as follow

'''net.addLink(sta1, cls=mesh, ssid='wifi-mesh', intf='sta1-wlan0', channel=1, ht_cap='HT40+', mode="n", txpower=24)
File "/usr/local/lib/python3.10/dist-packages/mininet_wifi-2.6-py3.10.egg/mn_wifi/net.py", line 651, in addLink
link = cls(node=node1, **params)
File "/usr/local/lib/python3.10/dist-packages/mininet_wifi-2.6-py3.10.egg/mn_wifi/link.py", line 1911, in __init__
self.configureMesh()
File "/usr/local/lib/python3.10/dist-packages/mininet_wifi-2.6-py3.10.egg/mn_wifi/link.py", line 1940, in configureMesh
self.mesh_join(self.ssid, self.format_freq(), self.ht_cap)
File "/usr/local/lib/python3.10/dist-packages/mininet_wifi-2.6-py3.10.egg/mn_wifi/link.py", line 231, in format_freq
return int(format(self.freq, '.3f').replace('.', ''))
TypeError: unsupported format string passed to NoneType.__format__'''

#channel=1, freq=2.4, band=20, mode="g", txpower=24 => Works, but same as HaLow simulate
#channel=1, freq=2.4, band=20, mode="n", txpower=24 => Error as above
#channel=1, freq=2.4, band=40, mode="n", txpower=24 => Error as above

#channel=36, ht_cap='HT40+', mode="ac", txpower=24 => same as channel 149


PS: Attached my working code for reference. 

Thanks & Regards,
Kavin
kavin_multi_radio_simulation.py

Ramon Fontes

unread,
Mar 31, 2025, 6:53:04 AMMar 31
to Kavin Kumar T, mininet-wifi-discuss
Hi Kumar,

I just noticed that hwsim has some support for MLO (https://github.com/torvalds/linux/blob/cbe2691bee4e54024b9985ef78e740d9655d92f3/drivers/net/wireless/virtual/mac80211_hwsim.c#L70). However, as you know, I haven't had the chance to test it yet.

hwsim supports many features, just as hostap (hostapd + wpa_supplicant) does, but I can't cover everything. That’s why contributions from the community are always welcome!

Till now I was submitting patches to the Linux Kernel towards a wmediumd support for IEEE 802154 - https://patchwork.kernel.org/project/linux-wpan/patch/20250331103924.1490...@gmail.com/ :/.

Looking forward to any insights you might have!

--
Ramon


Reply all
Reply to author
Forward
0 new messages