#!/usr/bin/env python

 #from mininet.cli import CLI
#from mininet.link import Link
#from mininet.net import Mininet
#from mininet.node import RemoteController
#from mininet.trm import makeTerm
from mininet.topo import Topo
class spanning_tree( Topo ):
def __init__( self ):
Topo.__init__(self)
host1 = self.addHost('h1')
host2 = self.addHost('h2')
host3 = self.addHost('h3') switch1 = self.addSwitch( 's1' )
switch2 = self.addSwitch( 's2' )
switch3 = self.addSwitch( 's3' ) self.addLink(switch1, host1)
self.addLink(switch2, host2)
self.addLink(switch3, host3) self.addLink(switch1, switch2)
self.addLink(switch2, switch3)
self.addLink(switch1, switch3) topos = {'mytopo': ( lambda:spanning_tree())}

环路拓扑结构,可能造成广播风暴:

手动编写的拓扑

 #!/usr/bin/env python

 from mininet.cli import CLI
from mininet.node import Node
from mininet.link import Link
from mininet.net import Mininet
from mininet.node import RemoteController
from mininet.term import makeTerm if '__main__' == __name__:
net = Mininet(controller=RemoteController) c0 = net.addController('c0') s1 = net.addSwitch('s1')
s2 = net.addSwitch('s2')
s3 = net.addSwitch('s3') h1 = net.addHost('h1')
h2 = net.addHost('h2')
h3 = net.addHost('h3') Link(s1, h1)
Link(s2, h2)
Link(s3, h3) Link(s1, s2)
Link(s2, s3)
Link(s1, s3) net.build()
c0.start()
s1.start([c0])
s2.start([c0])
s3.start([c0]) net.terms.append(makeTerm(c0))
net.terms.append(makeTerm(s1))
net.terms.append(makeTerm(s2))
net.terms.append(makeTerm(s3))
net.terms.append(makeTerm(h1))
net.terms.append(makeTerm(h2))
net.terms.append(makeTerm(h3)) CLI(net)
net.stop()

图像化生成的脚本:

#!/usr/bin/python

from mininet.net import Mininet
from mininet.node import Controller, RemoteController, OVSController
from mininet.node import CPULimitedHost, Host, Node
from mininet.node import OVSKernelSwitch, UserSwitch
from mininet.node import IVSSwitch
from mininet.cli import CLI
from mininet.log import setLogLevel, info
from mininet.link import TCLink, Intf
from subprocess import call def myNetwork(): net = Mininet( topo=None,
build=False,
ipBase='10.0.0.0/8') info( '*** Adding controller\n' )
c0=net.addController(name='c0',
controller=Controller,
protocol='tcp',
port=6633) info( '*** Add switches\n')
s2 = net.addSwitch('s2', cls=OVSKernelSwitch)
s1 = net.addSwitch('s1', cls=OVSKernelSwitch)
s3 = net.addSwitch('s3', cls=OVSKernelSwitch) info( '*** Add hosts\n')
h2 = net.addHost('h2', cls=Host, ip='10.0.0.2', defaultRoute=None)
h1 = net.addHost('h1', cls=Host, ip='10.0.0.1', defaultRoute=None)
h3 = net.addHost('h3', cls=Host, ip='10.0.0.3', defaultRoute=None) info( '*** Add links\n')
net.addLink(h1, s1)
net.addLink(s1, s2)
net.addLink(s1, s3)
net.addLink(s2, s3)
net.addLink(h2, s2)
net.addLink(s3, h3) info( '*** Starting network\n')
net.build()
info( '*** Starting controllers\n')
for controller in net.controllers:
controller.start() info( '*** Starting switches\n')
net.get('s2').start([c0])
net.get('s1').start([c0])
net.get('s3').start([c0]) info( '*** Post configure switches and hosts\n') CLI(net)
net.stop() if __name__ == '__main__':
setLogLevel( 'info' )
myNetwork()

根据miniedit绘制拓扑生成的脚本:

#!/usr/bin/python

from mininet.net import Mininet
from mininet.node import Controller, RemoteController, OVSController
from mininet.node import CPULimitedHost, Host, Node
from mininet.node import OVSKernelSwitch, UserSwitch
from mininet.node import IVSSwitch
from mininet.cli import CLI
from mininet.log import setLogLevel, info
from mininet.link import TCLink, Intf
from subprocess import call def myNetwork(): net = Mininet( topo=None,
build=False,
ipBase='10.0.0.0/8') info( '*** Adding controller\n' )
c0=net.addController(name='c0',
controller=Controller,
protocol='tcp',
port=6633) info( '*** Add switches\n')
s10 = net.addSwitch('s10', cls=OVSKernelSwitch)
s3 = net.addSwitch('s3', cls=OVSKernelSwitch)
s14 = net.addSwitch('s14', cls=OVSKernelSwitch)
s19 = net.addSwitch('s19', cls=OVSKernelSwitch)
s4 = net.addSwitch('s4', cls=OVSKernelSwitch)
s20 = net.addSwitch('s20', cls=OVSKernelSwitch)
s9 = net.addSwitch('s9', cls=OVSKernelSwitch)
s11 = net.addSwitch('s11', cls=OVSKernelSwitch)
s12 = net.addSwitch('s12', cls=OVSKernelSwitch)
s15 = net.addSwitch('s15', cls=OVSKernelSwitch)
s1 = net.addSwitch('s1', cls=OVSKernelSwitch)
s6 = net.addSwitch('s6', cls=OVSKernelSwitch)
s5 = net.addSwitch('s5', cls=OVSKernelSwitch)
s16 = net.addSwitch('s16', cls=OVSKernelSwitch)
s17 = net.addSwitch('s17', cls=OVSKernelSwitch)
s7 = net.addSwitch('s7', cls=OVSKernelSwitch)
s2 = net.addSwitch('s2', cls=OVSKernelSwitch)
s18 = net.addSwitch('s18', cls=OVSKernelSwitch)
s8 = net.addSwitch('s8', cls=OVSKernelSwitch)
s13 = net.addSwitch('s13', cls=OVSKernelSwitch) info( '*** Add hosts\n')
h15 = net.addHost('h15', cls=Host, ip='10.0.0.15', defaultRoute=None)
h6 = net.addHost('h6', cls=Host, ip='10.0.0.6', defaultRoute=None)
h16 = net.addHost('h16', cls=Host, ip='10.0.0.16', defaultRoute=None)
h10 = net.addHost('h10', cls=Host, ip='10.0.0.10', defaultRoute=None)
h7 = net.addHost('h7', cls=Host, ip='10.0.0.7', defaultRoute=None)
h8 = net.addHost('h8', cls=Host, ip='10.0.0.8', defaultRoute=None)
h14 = net.addHost('h14', cls=Host, ip='10.0.0.14', defaultRoute=None)
h1 = net.addHost('h1', cls=Host, ip='10.0.0.1', defaultRoute=None)
h9 = net.addHost('h9', cls=Host, ip='10.0.0.9', defaultRoute=None)
h4 = net.addHost('h4', cls=Host, ip='10.0.0.4', defaultRoute=None)
h12 = net.addHost('h12', cls=Host, ip='10.0.0.12', defaultRoute=None)
h5 = net.addHost('h5', cls=Host, ip='10.0.0.5', defaultRoute=None)
h2 = net.addHost('h2', cls=Host, ip='10.0.0.2', defaultRoute=None)
h11 = net.addHost('h11', cls=Host, ip='10.0.0.11', defaultRoute=None)
h3 = net.addHost('h3', cls=Host, ip='10.0.0.3', defaultRoute=None)
h13 = net.addHost('h13', cls=Host, ip='10.0.0.13', defaultRoute=None) info( '*** Add links\n')
net.addLink(s1, s5)
net.addLink(s1, s7)
net.addLink(s1, s9)
net.addLink(s1, s11)
net.addLink(s2, s5)
net.addLink(s2, s7)
net.addLink(s2, s9)
net.addLink(s2, s11)
net.addLink(s3, s6)
net.addLink(s3, s8)
net.addLink(s3, s10)
net.addLink(s3, s12)
net.addLink(s4, s6)
net.addLink(s4, s8)
net.addLink(s4, s10)
net.addLink(s4, s12)
net.addLink(s5, s13)
net.addLink(s6, s14)
net.addLink(s6, s13)
net.addLink(s5, s14)
net.addLink(s7, s15)
net.addLink(s8, s16)
net.addLink(s8, s15)
net.addLink(s7, s16)
net.addLink(s9, s17)
net.addLink(s10, s18)
net.addLink(s10, s17)
net.addLink(s9, s18)
net.addLink(s11, s19)
net.addLink(s12, s20)
net.addLink(s12, s19)
net.addLink(s11, s20)
net.addLink(s13, h1)
net.addLink(s13, h2)
net.addLink(s14, h3)
net.addLink(s14, h4)
net.addLink(s15, h5)
net.addLink(s15, h6)
net.addLink(s16, h7)
net.addLink(s16, h8)
net.addLink(s17, h9)
net.addLink(s17, h10)
net.addLink(s18, h11)
net.addLink(s18, h12)
net.addLink(s19, h13)
net.addLink(s19, h14)
net.addLink(s20, h16)
net.addLink(s20, h15) info( '*** Starting network\n')
net.build()
info( '*** Starting controllers\n')
for controller in net.controllers:
controller.start() info( '*** Starting switches\n')
net.get('s10').start([])
net.get('s3').start([c0])
net.get('s14').start([])
net.get('s19').start([])
net.get('s4').start([c0])
net.get('s20').start([])
net.get('s9').start([])
net.get('s11').start([])
net.get('s12').start([])
net.get('s15').start([])
net.get('s1').start([c0])
net.get('s6').start([])
net.get('s5').start([])
net.get('s16').start([])
net.get('s17').start([])
net.get('s7').start([])
net.get('s2').start([c0])
net.get('s18').start([])
net.get('s8').start([])
net.get('s13').start([]) info( '*** Post configure switches and hosts\n') CLI(net)
net.stop() if __name__ == '__main__':
setLogLevel( 'info' )
myNetwork()

手动编写的fat-tree拓扑结构:

#!/usr/bin/env python

from mininet.cli import CLI
from mininet.node import Node
from mininet.link import Link
from mininet.net import Mininet
from mininet.node import RemoteController
from mininet.term import makeTerm if '__main__' == __name__:
net = Mininet(controller=RemoteController) c0 = net.addController('c0') s1 = net.addSwitch('s1')
s2 = net.addSwitch('s2')
s3 = net.addSwitch('s3')
s4 = net.addSwitch('s4')
s5 = net.addSwitch('s5')
s6 = net.addSwitch('s6')
s7 = net.addSwitch('s7')
s8 = net.addSwitch('s8')
s9 = net.addSwitch('s9')
s10 = net.addSwitch('s10')
s11 = net.addSwitch('s11')
s12 = net.addSwitch('s12')
s13 = net.addSwitch('s13')
s14 = net.addSwitch('s14')
s15 = net.addSwitch('s15')
s16 = net.addSwitch('s16')
s17 = net.addSwitch('s17')
s18 = net.addSwitch('s18')
s19 = net.addSwitch('s19')
s20 = net.addSwitch('s20') h1 = net.addHost('h1')
h2 = net.addHost('h2')
h3 = net.addHost('h3')
h4 = net.addHost('h4')
h5 = net.addHost('h5')
h6 = net.addHost('h6')
h7 = net.addHost('h7')
h8 = net.addHost('h8')
h9 = net.addHost('h9')
h10 = net.addHost('h10')
h11 = net.addHost('h11')
h12 = net.addHost('h12')
h13 = net.addHost('h13')
h14 = net.addHost('h14')
h15 = net.addHost('h15')
h16 = net.addHost('h16') Link(s1, s5)
Link(s1, s7)
Link(s1, s9)
Link(s1, s11)
Link(s2, s5)
Link(s2, s7)
Link(s2, s9)
Link(s2, s11)
Link(s3, s6)
Link(s3, s8)
Link(s3, s10)
Link(s3, s12)
Link(s2, s11)
Link(s4, s6)
Link(s4, s8)
Link(s4, s10)
Link(s4, s12)
Link(s5, s13)
Link(s5, s14)
Link(s6, s13)
Link(s6, s14)
Link(s7, s15)
Link(s7, s16)
Link(s8, s15)
Link(s8, s16)
Link(s9, s17)
Link(s9, s18)
Link(s10, s17)
Link(s10, s18)
Link(s11, s19)
Link(s11, s20)
Link(s12, s19)
Link(s12, s20)
s = [s13, s14, s15, s16, s17, s18, s19, s20]
h = [h1, h2, h3, h4, h5, h6, h7, h8, h9, h10, h11, h12, h13, h14, h15, h16]
j = 0
count = 0
for i in range(0, len(s)):
count = 0
while count < 2:
Link(s[i], h[j])
j += 1
count += 1 net.build()
c0.start()
s1.start([c0])
s2.start([c0])
s3.start([c0])
s4.start([c0]) # net.terms.append(makeTerm(c0))
# net.terms.append(makeTerm(s1))
# net.terms.append(makeTerm(s2))
# net.terms.append(makeTerm(s3))
# net.terms.append(makeTerm(h1))
# net.terms.append(makeTerm(h2))
# net.terms.append(makeTerm(h3)) CLI(net)
net.stop()

开源fat-tree拓扑结构:

from mininet.net import Mininet
from mininet.node import Controller, RemoteController
from mininet.cli import CLI
from mininet.log import setLogLevel, info
from mininet.link import Link, Intf, TCLink
from mininet.topo import Topo
from mininet.util import dumpNodeConnections
import logging
import os logging.basicConfig(level=logging.DEBUG)
logger = logging.getLogger( __name__ ) class HugeTopo(Topo):
logger.debug("Class HugeTopo")
CoreSwitchList = []
AggSwitchList = []
EdgeSwitchList = []
HostList = []
iNUMBER = 0 def __init__(self):
logger.debug("Class HugeTopo init")
iNUMBER = 4 self.iNUMBER = iNUMBER
self.iCoreLayerSwitch = iNUMBER
self.iAggLayerSwitch = iNUMBER * 2
self.iEdgeLayerSwitch = iNUMBER * 2
self.iHost = self.iEdgeLayerSwitch * 2 Topo.__init__(self) def createTopo(self):
logger.debug("Start create Core Layer Switch")
self.createCoreLayerSwitch(self.iCoreLayerSwitch)
logger.debug("Start create Agg Layer Switch")
self.createAggLayerSwitch(self.iAggLayerSwitch)
logger.debug("Start create Edge Layer Switch")
self.createEdgeLayerSwitch(self.iEdgeLayerSwitch)
logger.debug("Satrt create Host")
self.createHost(self.iHost) def createCoreLayerSwitch(self, NUMBER):
logger.debug("Create Core Layer")
for x in range(1, NUMBER+1):
PERFIX = ""
if x >= int(10):
PERFIX = ""
self.CoreSwitchList.append(self.addSwitch(PERFIX + str(x))) def createAggLayerSwitch(self, NUMBER):
logger.debug("Create Agg Layer")
for x in range(1, NUMBER+1):
PERFIX = ""
if x >= int(10):
PERFIX = ""
self.AggSwitchList.append(self.addSwitch(PERFIX + str(x))) def createEdgeLayerSwitch(self, NUMBER):
logger.debug("Create Edge Layer")
for x in range(1, NUMBER+1):
PERFIX = ""
if x >= int(10):
PERFIX = ""
self.EdgeSwitchList.append(self.addSwitch(PERFIX + str(x)))
def createHost(self, NUMBER):
logger.debug("Create Host")
for x in range(1, NUMBER+1):
PERFIX = ""
if x >= int(10):
PERFIX = ""
self.HostList.append(self.addHost(PERFIX + str(x))) def createLink(self):
logger.debug("Create Core to Agg")
for x in range(0, self.iAggLayerSwitch, 2):
self.addLink(self.CoreSwitchList[0], self.AggSwitchList[x], bw=1000, loss=5)
self.addLink(self.CoreSwitchList[1], self.AggSwitchList[x], bw=1000, loss=5) for x in range(1, self.iAggLayerSwitch, 2):
self.addLink(self.CoreSwitchList[2], self.AggSwitchList[x], bw=1000, loss=5)
self.addLink(self.CoreSwitchList[3], self.AggSwitchList[x], bw=1000, loss=5) logger.debug("Create Agg to Edge")
for x in range(0, self.iAggLayerSwitch, 2):
self.addLink(self.AggSwitchList[x], self.EdgeSwitchList[x], bw=100)
self.addLink(self.AggSwitchList[x], self.EdgeSwitchList[x+1], bw=100)
self.addLink(self.AggSwitchList[x+1], self.EdgeSwitchList[x], bw=100)
self.addLink(self.AggSwitchList[x+1], self.EdgeSwitchList[x+1], bw=100) logger.debug("Create Edge to Host")
for x in range(0, self.iEdgeLayerSwitch):
self.addLink(self.EdgeSwitchList[x], self.HostList[2*x])
self.addLink(self.EdgeSwitchList[x], self.HostList[2*x+1]) def enableSTP():
for x in range(1, 5):
cmd = "ovs-vsctl set Bridge %s stp_enable=true" % ("" + str(x))
os.system(cmd)
print cmd
for x in range(1, 9):
cmd = "ovs-vsctl set Bridge %s stp_enable=true" % ("" + str(x))
os.system(cmd)
print cmd
cmd = "ovs-vsctl set Bridge %s stp_enable=true" % ("" + str(x))
os.system(cmd)
print cmd def iperfTest(net, topo):
logger.debug("Start iperfTest:")
h1000, h1015, h1016 = net.get(topo.HostList[0], topo.HostList[14], topo.HostList[15]) h1000.popen('iperf -s -u -i 1 > iperf_server_differentPod_result', shell=True)
h1015.popen('iperf -s -u -i 1 > iperf_server_samePod_result', shell=True)
h1016.cmdPrint('iperf -c' + h1000.IP() + ' -u -t 10 -i 1 -b 100m')
h1016.cmdPrint('iperf -c' + h1015.IP() + ' -u -t 10 -i 1 -b 100m') def pingTest(net):
logger.debug("Start Test all network")
net.pingAll() def createTopo():
logging.debug("LV1 Create HugeTopo")
topo = HugeTopo()
topo.createTopo()
topo.createLink() logging.debug("LV1 Start Mininet")
CONTROLLER_IP = "192.168.116.128"
CONTROLLER_PORT = 6633
net = Mininet(topo=topo, link=TCLink, controller=None)
net.addController('controller', controller=RemoteController,ip=CONTROLLER_IP, port=CONTROLLER_PORT)
net.start() logger.debug("LV1 dumpNode")
enableSTP()
dumpNodeConnections(net.hosts) pingTest(net)
iperfTest(net, topo) CLI(net)
net.stop() if __name__ == '__main__':
setLogLevel('info')
if os.getuid() != 0:
logger.debug("You are not root")
elif os.getuid() == 0:
createTopo()

sdn的更多相关文章

  1. SDN/NFV运营商商业化部署

    三大运营商发布未来网络架构,并逐步加快SDN/NFV商业化部署的步伐.中国联通发布其新一代网络架构<CUBE-Net 2.0白皮书>,并与20多家合作伙伴共同启动了“新一代网络”合作研发计 ...

  2. SDN/NFV若干问题

    1.首先谈一谈网络技术和组网技术的关系 网络可分为两层:业务网.承载网.业务网主要是组织业务系统,而承载网主要是用来传输信息流:包括传送网(点到点数据专线).数据网(端到端连接).内容分发网(点到多点 ...

  3. 解读SDN的东西、南北向接口

    北向接口(Northbound Interface)是为厂家或运营商进行接入和管理网络的接口,即向上提供的接口. 南向接口(Southbound Interface)是提供对其他厂家网元的管理功能,支 ...

  4. SDN:motivation

    今天公交车上看了会SDN一本介绍性的书籍,具体名字不记得了.我想,我已经在实验室呆了很久的时间的,接触SDN也有一段时间了.对SDN的一些基本的知识还是需要好好整理一番.当然,这里只是一个随笔,想到什 ...

  5. SDN与NFV技术在云数据中心的规模应用探讨

    Neo 2016-1-29 | 发表评论 编者按:以云数据中心为切入点,首先对SDN领域中的叠加网络.SDN控制器.VxLAN 3种重要技术特点进行了研究,接下来对NFV领域中的通用服务器性能.服务链 ...

  6. SDDC-SDN-SDS

    SDDCSDNSDS软件定义存储是一个较大的行业发展趋势,这个行业还包括软件定义网络(SDN)和软件定义数据中心(SDDC). SDDC依赖于虚拟化和云计算技术, SDDC的目标是虚拟化数据中心的一切 ...

  7. SDN三种模型解析

    数十年前,计算机科学家兼网络作家Andrew S. Tanenbaum讽刺标准过多难以选择,当然现在也是如此,比如软件定义网络模型的数量也很多.但是在考虑部署软件定义网络(SDN)或者试点之前,首先需 ...

  8. 浅谈SDN和NFV之间的关系

    一个行业固定设备的折旧周期很长,任何变革的发生都绝非易事,但是网络却一次性面临两项革新--软件定义网络(SDN)和网络功能虚拟化(NFV),在变革网络的过程中,二者若想取得成功可能会依赖彼此的技术,或 ...

  9. SDN跟网络虚拟化的完美结合

    SDN跟网络虚拟化的完美结合 之前说过,所谓的“SDN最适合的领域是数据中心”的说法,笔者认为更准确的说法应该是SDN最适合的领域是数据中心中的网络虚拟化应用.为什么说SDN 非常适合用在网络虚拟化中 ...

  10. 深度解析SDN——利益、战略、技术、实践(实战派专家力作,业内众多专家推荐)

    深度解析SDN——利益.战略.技术.实践(实战派专家力作,业内众多专家推荐) 张卫峰 编   ISBN 978-7-121-21821-7 2013年11月出版 定价:59.00元 232页 16开 ...

随机推荐

  1. JMeter学习-033-JMeter BeanShell 脚本应用实例之参数变量修改

    BeanShell脚本是JMeter自动化测试过程中不可或缺的提升技能之一,BeanShell脚本编写类似于Java脚本.它可以获取.修改系统定义或用户定义的变量值,同时也可以进行一些相应的测试数据处 ...

  2. android中使用startactivityforresult跳转Activity后需要重写onBackPressed()方法

    在android项目中经常会用startactivityforresult从一个Activity跳转到另一个Activity(这里指Activity_A和Activity_B),你可以从Activit ...

  3. netstrem获取302后的地址,可用来截图,加载实际跨域文件

    直接放代码,老外博客看来的,老外还是牛逼,这都用出来了:http://jessewarden.com/2009/03/handling-crossdomainxml-and-302-redirects ...

  4. LeetCode Find All Anagrams in a String

    原题链接在这里:https://leetcode.com/problems/find-all-anagrams-in-a-string/ 题目: Given a string s and a non- ...

  5. jQuery点击收缩展开滑动显示内容竖直手风琴代码

    <div class="position"> <div class="positiontop"> <span class=&quo ...

  6. kafka windows环境搭建 测试

    http://www.cnblogs.com/alvingofast/p/kafka_deployment_on_windows.html 照着例子搭建成功

  7. 查看apache、linux、kernel、nginx等版本

    查看apache版本 /usr/sbin/apachectl -v httpd -v 安装目录,使用apachectl -v   查看mysql版本 mysql –help | grep Distri ...

  8. how-to-install-siege-on-centos-7

    https://www.joedog.org/siege-home/ https://roastahost.com/how-to-install-siege-on-centos-7/ (Works!) ...

  9. mongo3.2

    arbiter配置文件 processManagement: fork: true net: bindIp: 172.16.10.1,127.0.0.1 port: storage: dbPath: ...

  10. Java:批量插入、修改数据到数据库中的用法

    在java中使用JDBC实现批处理的对象一般是使用PrepareStatement对象. 如何使用: Class.forName("Oracle.jdbc.driver.OracleDriv ...