mininet实现自定义拓扑结构--基于两个数据中心的网络拓扑--fattree.py

来源:互联网 发布:数据库前置机 编辑:程序博客网 时间:2024/05/17 22:33

前言

基于两个数据中心的网络拓扑是最常见的、也是最基本的一种网络拓扑结构,这里先拿这个作为练习。
其网络拓扑结构图如下:
这里写图片描述

一、首先编写生成拓扑结构的python代码fattree.py文件

#创建网络拓扑,代码可以直接使用from mininet.topo import Topofrom mininet.net import Mininetfrom mininet.node import RemoteController,CPULimitedHostfrom mininet.link import TCLinkfrom mininet.util import dumpNodeConnectionsclass MyTopo( Topo ):    "Simple topology example."    def __init__( self ):        "Create custom topo."        # Initialize topology        Topo.__init__( self )        L1 = 2        L2 = L1 * 2         L3 = L2        c = []        a = []        e = []          # add core ovs          for i in range( L1 ):                sw = self.addSwitch( 'c{}'.format( i + 1 ) )                c.append( sw )        # add aggregation ovs        for i in range( L2 ):                sw = self.addSwitch( 'a{}'.format( L1 +i + 1 ) )                a.append( sw )        # add edge ovs        for i in range( L3 ):                sw = self.addSwitch( 'e{}'.format( L1 +L2 + i + 1 ) )                e.append( sw )        # add links between core and aggregation ovs        for i in range( L1 ):                sw1 = c[i]                for sw2 in a[i/2::L1/2]:                                            self.addLink( sw2, sw1 )        # add links between aggregation and edge ovs        for i in range( 0, L2, 2 ):                for sw1 in a[i:i+2]:                    for sw2 in e[i:i+2]:                        self.addLink( sw2, sw1 )        #add hosts and its links with edge ovs        count = 1        for sw1 in e:                for i in range(2):                    host = self.addHost( 'h{}'.format( count ) )                    self.addLink( sw1, host )                    count += 1    topos = { 'mytopo': ( lambda: MyTopo() ) }

在home目录创建fattree.py文件之后,写入上述代码保存。

二、启动floodlight

java -jar target/floodlight.jar
* 注:当然前提是floodlight编译并配置成功,可以参考我前面的博客。
启动好之后floodlight会自动输出debug信息,不要关闭,另打开一个终端,输入mininet命令。
注:具体mininet+floodlight的环境搭建,可以参考我前面的一篇博客: mininet+floodlight 配置,链接:http://blog.csdn.net/xueer767/article/details/72910643

三、启动mininet

sudo mn --custom ~/fattree3.py --topo mytopo --controller=remote,ip=10.0.0.2 --switch ovsk,protocols=OpenFlow13

具体参数含义可以运行 sudo mn -help 查看,下面只简单列举这里使用到的几个参数。
–custom自定义拓扑的phyton文件
–topo指定加载拓扑的名字
–controller=remote,ip=远程控制器IP地址
–switch of交换机 protocols=OpenFlow协议版本(10或13)

启动之后,会看到
这里写图片描述

然后进入浏览器,打开http://10.10.14.3:8080/ui/index.html
就可以看到相应的交换机和主机信息。
如下:
首页显示(switch和host信息):
首页

首页2
交换机信息
switch
拓扑结构
topo