mininet2.2.1 + floodlight1.9 环境搭建
简介#
mininet是什么?##
Stanford 大学 Nick McKeown 教授领导的研究小组基于 Linux Container 架构,开发出了这套进程虚拟化的平台。在 Mininet 的帮助下,你可以轻易的在自己的笔记本上测试一个软件定义网络 (Software-Defined Networks),对基于 Openflow、Open vSwitch 的各种协议等进行开发验证,或者验证自己的想法。
最令人振奋的是,所有的代码几乎可以无缝迁移到真实的硬件环境中。在实验室里,一行命令就可以创建一个支持 SDN 的任意拓扑的网络结构,并可以灵活的进行相关测试,验证了设计的正确后,又可以轻松部署到真实的硬件环境中。目前 Mininet 已经作为官方的演示平台对各个版本的 Openflow 协议进行演示和测试。
floodlight是什么?##
Floodlight是Apache授权并且基于JAVA开发的企业级OpenFlow控制器,它的稳定性、易用性已经得到SDN专业人士以及爱好者们的一致好评,并因其完全开源,这让SDN网络世界变得更加有活力。控制器作为SDN网络中的重要组成部分,能集中地灵活控制SDN网络,为核心网络及应用创新提供了良好的扩展平台。
简言之,我们通过mininet对SDN网络拓扑进行模拟,在通过floodlight(SDN控制器)对所模拟出的网络进行控制。
本文介绍了在virtual box虚拟机中安装mininet2.2.1+floodlight0.91仿真环境的过程,直接在Ubuntu中的环境搭建也可以参考本文。
安装#
系统安装##
Ubuntu14.04下载地址,获取安装镜像选择Ubuntu14.04.4(amd64,LiveCD)。
虚拟机中安装64系统需要开启主板vt,具体安装过程不做赘述。
虚拟机的网络连接模式可以选择桥接模式,这样在本机中也可以通过网页浏览器观察floodlight控制器的情况。
虚拟机扩展工具安装:装好的虚拟机无法全屏,是因为在虚拟机系统里没有安装VirtualBox的增强驱动。首先启动虚拟机,点击设备,选择安装增强功能即可。本段参考地址。
floodlight安装##
首先安装1.7版本以上的java
sudo apt-get install openjdk-7-jkd
选择我们刚刚安装的java版本,如果是新系统,本步骤无需执行
sudo update-alternatives --config java
确认java版本
java -version
升级本地的更新源
sudo apt-get update
安装java,python的运行和开发环境
sudo apt-get install build-essential defualt-jdk ant python-dev
安装git
sudo apt-get install git
克隆floodlight
sudo git clone git://github.com/floodlight/floodlight.git
进入floodlight目录
cd floodlight
查看floodlight版本情况
sudo git tag
选择v2.2.1分支
git checkout -b v0.91 v0.91
编译floodlight
sudo ant
运行floodlight
sudo java -jar target/floodlight.jar
查看虚拟机的ip地址
ifconfig
打开Firefox浏览器,输入地址,即可在网页中看到floodlight控制器中所得到的信息。本操作也可以在安装此台虚拟机的主机中执行。
http://*虚拟机IP*:8080/ui/index.html
mininet安装##
新建终端,用apt-get安装mininet
sudo apt-get install mininet
升级mininet版本
sudo git-clone https://github.com/mininet/mininet
进入mininet目录
cd mininet
查看mininet版本情况
sudo git tag
选择v2.2.1分支
git checkout -b 2.2.1 2.2.1
完整安装mininet VM以及其他依赖关系,以及openflow wireshark分离器和pox。
sudo ./util/install.sh -a
查看mininet版本号
mn --version
mininet与floodlight的连接##
可选择的,这里选择FatTree的SDN拓扑结构。
进入mininet的custom目录
cd ~/mininet/custom
新建FatTree.py脚本
sudo gedit ./FatTree.py
脚本内容如下
"""Custom topology example
Adding the 'topos' dict with a key/value pair to generate our newly defined
topology enables one to pass in '--topo=mytopo' from the command line.
"""
from mininet.topo import Topo
class 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, bw=10, delay='5ms', loss=10, max_queue_size=1000, use_htb=True)
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, bw=10, delay='5ms', loss=10, max_queue_size=1000, use_htb=True)
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() ) }
保存并退出,运行mininet并连接floodlight
sudo mn --custom ~/mininet/custom/FatTree.py --topo mytopo --controller=remote,ip=*虚拟机IP*,port=6653
在网页中打开floodlight控制器,可以看到刚刚配置的FatTree拓扑。