Mininet-wifi自定义拓扑

时间:2017-03-28 12:48:42

标签: python wifi sdn mininet topology

起初我想要创建一个复杂的拓扑(更多的交换机相互连接),但即使是这个简单的拓扑也无法正常工作。我无法获得有效的连接,例如。 'h1 ping h2'

这是拓扑: topology

他是应该创建等效拓扑的脚本:

!/usr/bin/python

"""
Setting the position of Nodes (only for Stations and Access Points) and providing mobility.

"""

from mininet.net import Mininet
from mininet.node import Controller, RemoteController, OVSKernelAP
from mininet.link import TCLink
from mininet.cli import CLI
from mininet.log import setLogLevel

def topology():

    "Create a network."
    net = Mininet( controller=Controller, link=TCLink, accessPoint=OVSKernelAP )

    print "*** Creating nodes"
    h1 = net.addHost( 'h1', mac='00:00:00:00:00:01', ip='10.0.0.1/8' )
    h2 = net.addHost( 'h2', mac='00:00:00:00:00:11', ip='10.0.1.1/8' )

    sta1 = net.addStation( 'sta1', mac='00:00:00:00:00:02', ip='10.0.0.2/8', position='50,50,0' )
    sta2 = net.addStation( 'sta2', mac='00:00:00:00:00:03', ip='10.0.0.3/8', position='40,50,0')
    sta3 = net.addStation( 'sta3', mac='00:00:00:00:00:04', ip='10.0.0.4/8', position='20,50,0' )

    ap1 = net.addAccessPoint( 'ap1', ssid= 'new-ssid', mode= 'g', channel= '5', position='25,50,0', range='35' )
    ap2 = net.addAccessPoint( 'ap2', ssid= 'new-ssid', mode= 'g', channel= '5', position='75,50,0', range='35' )

    c1 = net.addController( 'c1' )

    s1 = net.addSwitch('s1')

    #net.runAlternativeModule('../module/mac80211_hwsim.ko')

    print "*** Configuring wifi nodes"
    net.configureWifiNodes()

    print "*** Associating and Creating links"

    net.addLink(ap1, s1)
    net.addLink(ap2, s1)
    net.addLink(s1, c1)
    #net.addLink(ap1, ap2)

    net.addLink(s1, h1)
    net.addLink(s1, h2)

    net.addLink(ap1, sta1)
    net.addLink(ap1, sta2)
    net.addLink(ap1, sta3)

    print "*** Starting network"
    net.build()
    c1.start()
    ap1.start( [c1] )
    ap2.start( [c1] )

    """uncomment to plot graph"""
    net.plotGraph(max_x=100, max_y=100)

    net.startMobility(startTime=0)
    net.mobility(sta1, 'start', time=1, position='0.0,50.0,0.0')
    net.mobility(sta1, 'stop', time=30, position='100.0,50.0,0.0')
    net.stopMobility(stopTime=31)

    print "*** Running CLI"
    CLI( net )

    print "*** Stopping network"
    net.stop()

if __name__ == '__main__':
    setLogLevel( 'info' )
    topology()

如前所述,我甚至无法ping h1和h2 :( 我甚至尝试使用RemoteController但得到了相同的结果。 知道什么可能是错的吗?

1 个答案:

答案 0 :(得分:2)

请考虑以下更改:

from mininet.node import Controller, RemoteController, OVSKernelAP, OVSSwitch
net = Mininet( controller=Controller, link=TCLink, accessPoint=OVSKernelAP, switch=OVSSwitch )
c1 = net.addController( 'c1', controller=Controller )
s3 = net.addSwitch('s3')

删除:
net.addLink(s1, c1)

添加
s3.start( [c1] )

请注意,如果您使用相同的ID(例如s1,ap1)设置ap和switch,则默认情况下它们将具有相同的DPID。所以,我不得不将s1重命名为s3。另一方面,您可以在添加节点时将DPID定义为参数。