我的平台:PC机器*1
平台细节:Ubuntu12.04+Floodlight+Mininet,其中,需要使用到虚拟机软件,我使用的是virtualbox。这样一来,整个环境如下:
PC机器上安装Floodlight,作为OpenFlow环境的控制器。
PC机器上virtualbox中运行Mininet的虚拟机,用来模拟出OpenFlow交换机,以及host,以及自定义的网络拓扑结构。
一 安装Floodlight
Sudo apt-get install git
git clone git://github.com/floodlight/floodlight.git
sudo apt-get install ant
配置java环境变量。从jdk官网下载linux_86版本并拷贝至任意目录下,解压至/usr/lib/jvm目录下,进行环境变量配置。
sudo gedit /etc/profile
添加以下代码:
export JAVA_HOME=/usr/lib/jvm/jdk1.8.0_31 //改为你的文件夹名称
export JRE_HOME=${JAVA_HOME}/jre
export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib
export PATH=${JAVA_HOME}/bin:$PATH
重新启动ubuntu系统或者执行source /etc/profile使配置生效。执行$: env |grep jdk,可以查看环境变量如下:
JRE_HOME=/usr/lib/jvm/jdk1.8.0_31/jre
PATH=/usr/lib/jvm/jdk1.8.0_31/bin:/usr/lib/lightdm/lightdm:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games
JAVA_HOME=/usr/lib/jvm/jdk1.8.0_31
CLASSPATH=.:/usr/lib/jvm/jdk1.8.0_31/lib:/usr/lib/jvm/jdk1.8.0_31/jre/lib
执行$: java-version显示如下:
java version "1.8.0_31"
Java(TM) SE Runtime Environment (build 1.8.0_31-b13)
Java HotSpot(TM) Client VM (build 25.31-b07, mixed mode)
则环境变量配置成功。
cd floodlight
ant
java -jar target/floodlight.jar #运行Floodlight
二 安装Mininet
Mininet主要是虚拟OpenFlow交换机以及host节点。并且能构造出自定义的拓扑。虚拟OpenFlow交换机主要是基于OpenvSwitch。
https://github.com/mininet/mininet/wiki/Mininet-VM-Images
这是Floodlight提供的镜像,自带了Floodlight控制器(开机自运行),以及Mininet,以及支持OpenFlow协议的wireshark,我们只用这个镜像来虚拟拓扑以及OpenFlow交换机,而不使用自带的Floodlight控制器,而把Floodlight控制器本PC上运行。经我测试,VM中自带的Floodlight控制器抓包有问题。而且这种构造比较符合OpenFlow的概念。
下载镜像,解压, 先将文件mininet-2.0.0-113012-amd64-ovf.zip复制到磁盘上,解压后产生.vmdk文件,再使用Virtualbox导入.vmdk文件。单击启动按钮,启动虚拟机,账号密码都为mininet.同时为网卡采用桥接方式。注:如果没有地址分配,执行下:
$ sudo dhclient eth1//对应网卡DHCP分配IP地址
$ ifconfig –a
注释:虚拟机为桥接方式。
四 整合
之后在VM中运行mininet,并指定与controller相连。
注释:两个虚拟机设置为桥接方式,处于一个网段。
sudo mn --controller=remote,ip=
查看PC上floodlight信息,可以发现有OpenFlow Switch与之相连。进入http://localhost:8080/ui/index.html
可以登录floodligt的web界面。如下图:
切换到mininet中,这个命令自带创建了一个OpenFlow交换机,两个host。
执行如下,看看结果:
mininet>nodes
mininet>dump
mininet>net
mininet>pingall
此时看拓扑的实际上h2 h3是能够ping通的。OpenFlow交换机初始执行的就是一个普通二层交换,现在我们加入一个流表,从哪个口进的包就从哪个口出去。
dpctl add-flow tcp:127.0.0.1:6634 in_port=1,actions=output:1
此时在floodlight的web界面中可以看到这个flow entry。此时执行pingall发现h2 h3就无法相互ping通了。
OK,that’s end.