目录
1.解压安装OpenDayLight控制器(本次实验统一使用Beryllium版本)
通过如下语句打开编辑bashrc
sudo gedit ~/.bashrc
在最后加入如下代码
export JAVA_HOME=/usr/local/java/jdk1.8.0_201 export JRE_HOME=${JAVA_HOME}/jre export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib export PATH=${JAVA_HOME}/bin:$PATH
接着解压安装OpenDayLight控制器
2.启动并安装插件
通过进入解压的压缩包,执行./bin/karaf
通过以下语句安装插件
feature:install odl-restconf feature:install odl-l2switch-switch-ui feature:install odl-openflowplugin-all feature:install odl-mdsal-apidocs feature:install odl-dlux-core feature:install odl-dlux-node feature:install odl-dlux-yangui
3. 用Python脚本搭建如下拓扑,连接OpenDayLight控制器
创建SDN.py文件,代码如下
from mininet.topo import Topo from mininet.net import Mininet from mininet.node import RemoteController,CPULimitedHost from mininet.link import TCLink from mininet.util import dumpNodeConnections class Mytopo(Topo): def __init__(self): Topo.__init__(self) s=[] for i in range(1): sw = self.addSwitch('s{}'.format(i+1)) s.append(sw) count=1 for i in range(3): host = self.addHost('h{}'.format(count)) self.addLink(s[0],host) count += 1 topos = {'mytopo': (lambda:Mytopo())}
创建拓扑,结果如下所示
pingall,后点击reload,得到如图所示的结果
4. 在控制器提供的WEB UI中下发流表使h2 20s内ping不通h3,20s后恢复
从Yang UI进入到最终的flow选项
分别设置nod、table、flow的值,如图所示
使h2在20s内ping不通h3首先要知道h1和h3分别连接ovs的哪个端口,在mininet中用links查询链路连接情况
h2 连接s1的port2
h3 连接s1的port3
设置相关的值,如下图所示
在mininet中进行h2 ping h3,点击send,由于设置了前20s不同,结果如图,icmp_seq会延迟20.
5. 借助Postman通过OpenDayLight的北向接口下发流表,再利用OpenDayLight北向接口查看已下发的流表。
安装postman,并直接解压,进入postman界面。
通过preview查看刚刚下发的流表项的json格式,如下图
把preview里的url复制到地址栏,消息方式选择PUT,type设置为Basic Auth,填写账户和密码。
将preview的消息粘贴在文本框中,修改id和url里的flow为2,防止与之前的流表重合,点击send后下发成功,然后改为GET并send查看刚下发的流表,如下图