intrig-unicamp / mininet-wifi

Emulator for Software-Defined Wireless Networks
https://mn-wifi.readthedocs.io/
Other
447 stars 241 forks source link

Is it possible to set bitrate of station's network interface and run in 802.11ac? #394

Closed Rick-Wang12 closed 3 years ago

Rick-Wang12 commented 3 years ago

Hi, I'm using mininet-wifi for simulation, below picture is my experiment structure.

Screen Shot 2021-06-30 at 11 41 37 PM


I can connect two VM through mininet-wifi VM, but I found that the bitrate in mininet-wifi station is only 6Mbs as below

bitrate

I found that the maximum rate supported is 54Mbs as below picture, if there is any way to set bitrate?

supported_bit_rate

Besides, if i can set station to run 802.11ac? I tried to add mode="ac" in my code but packets captured by wireshark show that it run as 802.11a (I captured packets by following command)

sh ifconfig hwsim0 up
xterm sta1
sudo iw dev ap1-wlan1 interface add mon0 type monitor
sudo ifconfig mon0 up
sudo wireshark

wireshark


Following code is I used in this experiment, if I miss anything?

!/usr/bin/python

'This example runs stations in AP mode'

import sys

from mininet.log import setLogLevel, info
from mn_wifi.link import wmediumd
from mn_wifi.cli import CLI
from mn_wifi.net import Mininet_wifi
from mn_wifi.wmediumdConnector import interference
from mininet.link import Intf 

def topology(args):
    'Create a network.'
    net = Mininet_wifi(link=wmediumd, wmediumd_mode=interference)

  info("*** Creating nodes\n")
  if '-m' in args:
      sta1 = net.addStation('sta1', mac='00:00:00:00:00:01',
                            ip='192.168.0.1/24')
  else:
      sta1 = net.addStation('sta1', mac='00:00:00:00:00:01',
                            ip='192.168.0.1/24', position='20,60,0')

  ap1 = net.addStation('ap1', mac='02:00:00:00:01:00',
                       ip='192.168.0.10/24', position='40,60,0')

  net.setPropagationModel(model="logDistance", exp=4.5)

  info("*** Configuring wifi nodes\n")
  net.configureWifiNodes()

  ap1.setMasterMode(intf='ap1-wlan0', ssid='ap1-ssid', channel='36', mode='ac')

  info("*** Adding Link\n")

  if '-p' not in args:
      info("*** Plotting Graph\n")
      net.plotGraph(max_x=120, max_y=120)

  if '-m' in args:
      net.startMobility(time=1)
      net.mobility(sta1, 'start', time=2, position='20.0,60.0,0.0')
      net.mobility(sta1, 'stop', time=6, position='100.0,60.0,0.0')
      net.stopMobility(time=7)

  Intf('enp0s8', node=ap1) 
  Intf('enp0s9', node=sta1) 
  info("*** Starting network\n")
  net.build()

  ap1.cmd('echo 1 > /proc/sys/net/ipv4/ip_forward')

  ap1.cmd("ip addr add 10.0.1.254/24 brd + dev enp0s8") 
  sta1.cmd("ip addr add 10.0.2.254/24 brd + dev enp0s9")

  ap1.setIP('192.168.0.10/24', intf='ap1-wlan0')

  sta1.cmd("ip route add default via 192.168.0.10")
  ap1.cmd("ip route add default via 192.168.0.1") 

  info("*** Running CLI\n")
  CLI(net)

  info("*** Stopping network\n")
  net.stop()

if __name__ == '__main__':
    setLogLevel('info')
    topology(sys.argv)
ramonfontes commented 3 years ago

Hi,

You can set the bitrate with iw.

Regarding 802.11ac I suggest you to read the hostapd doc. Hostapd supports ac mode by using 802.11a with some extra flags.

Rick-Wang12 commented 3 years ago

Hi Ramon,

Thanks for your respond, I will work on it.

Rick-Wang12 commented 3 years ago

Hi Ramon,

I follow your suggestion and modify my code, now I can run 802.11ac, but I found that even I set parameter loss=0 in addLink(), still have packets lost in transmission, does parameter "loss" mean packet loss rate?

掉包

import sys
from mininet.log import setLogLevel, info
from mn_wifi.cli import CLI
from mn_wifi.net import Mininet_wifi

def topology(args):
    "Create a network."
    net = Mininet_wifi()

    info("*** Creating nodes\n") 
    sta1_args, sta2_args = dict(), dict()
    server = net.addStation('server', mac='00:00:00:00:00:01' )
    client = net.addStation('client', mac='00:00:00:00:00:02' )
    ap1 = net.addAccessPoint('ap1', ssid='ssid-ap1', mode='ac', channel=36 )
    c1 = net.addController('c1')
    net.setPropagationModel(model="logDistance", exp=4.5)

    info("*** Configuring wifi nodes\n")
    net.configureWifiNodes()

    info("*** Creating links\n")
    net.addLink(ap1, server, bw=200, loss=20 )
    net.addLink(ap1, client, bw=200, loss=20 )

    if '-p' in args:
        net.plotGraph(max_x=100, max_y=100)

    info("*** Starting network\n")
    net.build()
    c1.start()
    ap1.start([c1])

    info("*** Running CLI\n")
    CLI(net)

    info("*** Stopping network\n")
    net.stop()

if __name__ == '__main__':
    setLogLevel('info')
    topology(sys.argv)

Besides, I also found a parameter "error_prob" in example file "wmediumd_error_prob.py", does "error_prob" mean packet loss rate? if thus, what's different between "error_prob" and "loss"?

ramonfontes commented 3 years ago

https://github.com/intrig-unicamp/mininet-wifi/commit/4b87796d09429c5d3e0c118ac634aedf8ac529e9 solves the issue with the loss parameter.