I am writing to ask for a technical clarification regarding the tests I am conducting with Mininet-WiFi integrated with SUMO.
I am observing an unexpected behavior in the measured throughput:
when the stations are static, the iperf tests show very high values (up to 1 Gbit/s);
however, when the stations are moving (controlled by SUMO), the throughput drops drastically, stabilizing around 6–13 Mbit/s, even though the same network configuration (transmit power, range, propagation model, etc.) is maintained.
I have verified that this limitation is not related to traffic shaping (HTB/IFB) or transmission power. It appears instead to be linked to how wmediumd handles the radio channel during position updates.
In particular, it seems that the position changes generated by SUMO (for example with --step-length 1.0) cause abrupt variations in SNR, which make the Wi-Fi rate control algorithm (Minstrel) fall back to very low modulation rates (MCS 0–1).
I would like to ask whether:
this behavior is expected within Mininet-WiFi’s radio model, or if it indicates a synchronization issue between SUMO and wmediumd; and
there are recommended strategies to mitigate it (e.g., interpolating positions, using shorter update intervals, tuning the propagation parameters, or adjusting SUMO’s step length).
I am happy to provide logs, scripts, or test outputs (iwconfig, iw link, iperf) if that would help with the analysis.
Thank you very much for your time and for your attention.
Best regards,
Elena Ventura
Thank you for your reply and for pointing me to the documentation.
I would like to ask for a quick clarification regarding the difference I am observing between the two wireless medium options in Mininet-WiFi.
When I run my scenario without wmediumd, the throughput remains very high (close to 1 Gbit/s), both with static and mobile stations.
However, when I enable wmediumd (in interference mode) and keep the same network parameters, the throughput drops significantly (around 6–13 Mbit/s) as soon as the stations start moving, while it stays much higher when they are static.
Is this behavior expected, given that wmediumd simulates real channel effects such as path loss and rate adaptation?
For the work I am doing, it is essential that the mobile stations are able to connect and exchange a much larger amount of data — we are talking about around 1 Gbit/s, so they cannot be limited to just 7 Mbit/s.Hi Ramon
First of all, I’d like to apologize if this question sounds repetitive or if I already asked something similar — I’m truly trying to understand the behavior correctly
I need to use SUMO together with wmediumd to ensure that each station connects in real time to an access point. When a station enters the AP’s coverage area, it starts transmitting with iPerf, and when it moves out of range, it automatically stops.
this is the code i wrote to implement it
#!/usr/bin/env python3
import sys
sys.path.insert(0, "/home/User/Progetti/mininet-wifi/mininet-wifi/mn_wifi/sumo")
from mininet.log import setLogLevel, info
from mn_wifi.cli import CLI
from mn_wifi.net import Mininet_wifi
from mn_wifi.node import OVSKernelAP
from mininet.node import RemoteController
from runner import sumo
from mn_wifi.link import wmediumd, ITSLink
from mn_wifi.wmediumdConnector import interference, wmediumd_mode
#from mn_wifi.wmediumdConnector import WmediumdMode
from mn_wifi.wmediumdConnector import error_prob
def topology():
"Create a network with Ryu + SUMO cars"
net = Mininet_wifi(controller=RemoteController,
accessPoint=OVSKernelAP,link=wmediumd, wmediumd_mode=interference)
info("*** Adding Ryu controller\n")
c0 = net.addController('c0', controller=RemoteController,
ip='127.0.0.1', port=6633)
info("*** Creating nodes\n")
# Access Point connesso al controller
ap1 = net.addAccessPoint('ap1', ssid='new-ssid', mode='ac', channel='36',
vht_capab='[VHT80]', ht_capab='[HT40+]',
position='50,20,0', range=40, txpower=20)
# Host cablato
h1 = net.addHost('h1', ip='10.0.0.10/8')
# Auto mobili controllate da SUMO (solo 4)
for id in range(0, 4):
net.addCar('car%s' % (id+1), wlans=1, mode='ac') # wlans=1 basta
info("*** Configuring Propagation Model\n")
net.setPropagationModel(model="logDistance", exp=2.0) #2.8
net.configureNodes()
info("*** Creating links\n")
net.addLink(ap1, h1)
"""
for car in net.cars:
net.addLink(car, intf=car.wintfs[0].name,
cls=ITSLink, band=20, channel=181)
"""
info("*** Starting SUMO\n")
net.useExternalProgram(program=sumo, port=8813,
extra_params=["--start --delay 1000 --step-length 0.1"],
clients=1, exec_order=0)
info("*** Starting network\n")
net.build()
c0.start()
ap1.start([c0])
#AGGIUNTA: configurazione ap per le slice -------------------
ap1 = net.get('ap1')
ap1.cmd("bash /home/elena/Progetti/mininet-wifi/mininet-wifi/SETUP/wlan1_setupIfb4_moreMbit.sh")
info("*** Slice configurate automaticamente su ap1\n")
#------------------------------------------------------------
#AGGIUNTA: avvio server iperf da h1--------------------------
h1 = net.get('h1')
# questo lo devo eseguire in bg perche senno si blocca e non parte la simulazione grafica
h1.cmd("xterm -hold -e 'iperf -s -i 2' & echo $! > /tmp/h1.pid")
info("*** Avviato iperf server su h1\n")
#------------------------------------------------------------
# IP dinamici per le auto
for id, car in enumerate(net.cars):
car.setIP('10.0.0.{}/8'.format(id+1),
intf=car.wintfs[0].name)
# Telemetria: auto + AP
net.telemetry(nodes=net.cars + [ap1], data_type='position',
min_x=0, min_y=0, max_x=100, max_y=40)
info("*** Running CLI\n")
CLI(net)
#chiusura del server ipef h1 --------------------------------
try:
pid = h1.cmd("cat /tmp/h1.pid").strip()
if pid:
h1.cmd("kill -9 " + pid)
info("*** Iperf server su h1 terminato\n")
except:
pass
#------------------------------------------------------------
# scrittura su file di timestamp START-END delle car --------
with open("times.csv", "w") as f:
all_starts = [car.start_time for car in net.cars if hasattr(car, "start_time")]
all_ends = [car.end_time for car in net.cars if hasattr(car, "end_time")]
if all_starts and all_ends:
sim_start = min(all_starts)
sim_end = max(all_ends)
f.write(f"{sim_start},{sim_end}\n\n")
for car in net.cars:
if hasattr(car, "start_time") and hasattr(car, "end_time"):
f.write(f"{car.start_time},{car.end_time}\n")
#------------------------------------------------------------
info("*** Stopping network\n")
net.stop()
if __name__ == '__main__':
setLogLevel('info')
topology()
In this setup, the mobility works perfectly, but each car shows:
Even though I explicitly set txpower=20 and mode='ac'.
As a result, iperf reports around 6–7 Mbit/s, even at very short distances.
few months ago i did the same work but with static station, the topology is the same ( except for the movement part )
#!/usr/bin/env python3In this version, mobility is static but throughput reaches up to 1 Gbit/s, as expected. IT HAS NO LIMITS!
Are Tx-Power and Bit Rate (as shown by iwconfig) the parameters that directly determine the throughput in Mininet-WiFi when wmediumd is active?
Is the low throughput (≈7 Mbit/s) an expected effect of the interference model, or could it mean that wmediumd is ignoring the txpower settings?
In your experience, is there a way to keep SUMO mobility active but allow higher link rates (for example, using error_prob or a different propagation model)?
Thank you for your time and patience,
Elena