1. 解压安装OpenDayLight控制器(本次实验统一使用Beryllium版本)
2. 启动并安装插件
启动OpenDayLight控制器:
在命令行中打开OpenDayLight控制器
安装插件:
输入以下命令,进行插件安装
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控制器
创建Python脚本a.py,代码如下所示:
命令行运行
sudo mn --custom ./a.py --topo mytopo --controller=remote,ip=127.0.0.1,port=6633 --switch ovsk,protocols=OpenFlow13
结果
pingall测试连通性
4. 在控制器提供的WEB UI中下发流表使h2 20s内ping不通h3,20s后恢复
mininet查看链路连接情况:
火狐浏览器访问http://127.0.0.1:8181/index.html,进入ODL图形化界面
ODL下发流表项设置:
依次点击Yang UI>Opendaylight-inventory>config>nodes>table>flow:
id:流表项id,为任意值,不冲突即可
in-port:流表项匹配的进入端口,这里需填h2对应的port号
ethernet-type:以太网类型0x0800
layer-3-match:ipv4-match 三层匹配为ipv4匹配
ipv4-source:数据包源ip匹配项(这里由于port1进入的数据包只可能是h2发送的所以可以不填)ipv4-destination:数据包目的ip匹配项。
新增instruction list这是流表项匹配到数据报后要执行的指令
instruction:apply-actions-case 执行动作
action drop-action-case 丢包动作(转发动作为output-action 并要在output-node-connector填写转发端口)
priority 流表项优先级,要大于odl下发的默认流表,这里设置成最大65535
hard-timeout 硬超时,流表项下发后生效时长
table_id 流表id 默认为0
在mininet中进行h2 ping h3,点击send,由于设置了前20s不同,结果如图,icmp_seq会延迟20s
5. 借助Postman通过OpenDayLight的北向接口下发流表,再利用OpenDayLight北向接口查看已下发的流表。
把preview里的url复制到地址栏,消息方式选择PUT,type设置为Basic Auth,填写账户和密码。
将preview的消息粘贴在文本框中,修改id和url里的flow为2,防止与之前的流表重合,点击send后下发成功,然后改为GET并send查看刚下发的流表,如下图