2019SDN上机第4次作业
一、作业要求
1、解压安装OpenDayLight控制器(本次实验统一使用Beryllium版本)
2、启动并安装插件
3、用Python脚本搭建给定的拓扑,并连接OpenDayLight控制器
4、在控制器提供的WEB UI中下发流表使h2 在20s内ping不通h3,20s后恢复
5、借助Postman通过OpenDayLight的北向接口下发流表,再利用OpenDayLight北向接 口查看已下发的流表
二、具体操作步骤与截图说明
1.解压并三个文件,在此不做截图
2、配置Java环境
在终端输入sudo gedit ~/.bashrc命令

对bashrc文件进行修改,在文件底部添加以下语句(Java_HOME的路径为安装的jdk所在的位置):

3、启动安装插件
进入OpenDayLigh的文件夹,运行./karaf (注意不能用sudo运行):

安装feature feature:install odl-restconf odl-l2switch-switch-ui odl-openflowplugin-all odl-mdsal-apidocs odl-dlux-core odl-dlux-node odl-dlux-yangui

4、用Python脚本搭建给定的拓扑,并连接OpenDayLight控制器
sdn2.py代码如下:
from mininet.topo import Topo
class Mytopo(Topo):
def __init__(self):
Topo.__init__(self)
sw=self.addSwitch('s1')
count=1
for i in range(3):
host = self.addHost('h{}'.format(count))
self.addLink(host,sw,1,count)
count = count + 1
topos = {'mytopo': (lambda:Mytopo())}
打开OpenDayLigh,在终端输入如下命令:
sudo mn --custom /home/muxi1/sdn2.py --topo mytopo --controller=remote,ip=127.0.0.1,port=6633 --switch ovsk,protocols=OpenFlow13

pingall测试连通性

5、火狐浏览器访问http://127.0.0.1:8181/index.html,进入ODL图形化界面


在控制器提供的WEB UI中下发流表使h2 在20s内ping不通h3,20s后恢复

分别设置nod、table、flow的值,如下图所示(其中node/openflow:1 交换机编号;table/0 流表编号;flow/不超过1024,不冲突即可流表项编号;GET为查询流表,下发流表要修改为PUT;点击加号添加流表项):

使h2在20s内ping不通h3首先要知道h2和h3分别连接ovs的哪个端口,在mininet中用links查询链路连接情况:

从链路连接情况可以看出,h2连接s1的2号端口,h3连接s1的3号端口
在Opendaylight下设置相关值,如下图所示:
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

借助Postman通过OpenDayLight的北向接口下发流表,再利用OpenDayLight北向接口查看已下发的流表。

http://127.0.0.1:8181/restconf/config/opendaylight-inventory:nodes/node/openflow:1/flow-node-inventory:table/0/flow/5
{
"flow": [
{
"id": "5",
"match": {
"in-port": "2",
"ethernet-match": {
"ethernet-type": {
"type": "0x0800"
}
},
"ipv4-destination": "10.0.0.3/32"
},
"instructions": {
"instruction": [
{
"order": "0",
"apply-actions": {
"action": [
{
"order": "0",
"drop-action": {}
}
]
}
}
]
},
"hard-timeout": "20",
"table_id": "0"
}
]
}
把preview里的url复制到地址栏,消息方式选择PUT,type设置为Basic Auth,并填写账户和密码
http://127.0.0.1:8181/restconf/config/opendaylight-inventory:nodes/node/openflow:1/flow-node-inventory:table/0/flow/1

将报文复制到Body内,Send

2019SDN上机第4次作业的更多相关文章
- 2019SDN上机第2次作业
1. 利用mininet创建如下拓扑,要求拓扑支持OpenFlow 1.3协议,主机名.交换机名以及端口对应正确,请给出拓扑Mininet执行结果,展示端口连接情况 创建拓扑: 拓扑支持OpenFlo ...
- 2019 SDN上机第7次作业
2019 SDN上机第7 次作业 basic补充`/* -- P4_16 -- */ include <core.p4> include <v1model.p4> const ...
- 2019 SDN上机第6次作业
2019 SDN上机第6次作业 1.实验拓扑 (1)实验拓扑 (2)使用Python脚本完成拓扑搭建 from mininet.topo import Topo from mininet.net im ...
- 2019 SDN上机第5次作业
2019 SDN上机第5次作业 1.浏览RYU官网学习RYU控制器的安装和RYU开发入门教程,提交你对于教程代码的理解,包括但不限于: 描述官方教程实现了一个什么样的交换机功能? 答:官方教程实现了一 ...
- 2019 SDN上机第四次作业
2019 SDN上机第4次作业 1. 解压安装OpenDayLight控制器(本次实验统一使用Beryllium版本) 修改环境变量 2. 启动并安装插件 3. 用Python脚本搭建如下拓扑,连接O ...
- 2019 SDN上机第三次作业
2019 SDN上机第三次作业 实验一 利用Mininet仿真平台构建如下图所示的网络拓扑,配置主机h1和h2的IP地址(h1:10.0.0.1,h2:10.0.0.2),测试两台主机之间的网络连通性 ...
- SDN上机第五次作业
2019 SDN上机第五次作业 1.浏览RYU官网学习RYU控制器的安装和RYU开发入门教程,提交你对于教程代码的理解,包括但不限于: 1.1描述官方教程实现了一个什么样的交换机功能? 答:官方教程实 ...
- 2019 SDN上机第六次作业
1.实验拓扑 (1)实验拓扑 (2)使用python脚本完成拓扑搭建 from mininet.topo import Topo class Mytopo(Topo): def __init__(se ...
- 2019 SDN上机第五次作业
1.浏览RYU官网学习RYU控制器的安装和RYU开发入门教程,提交你对于教程代码的理解,包括但不限于: 描述官方教程实现了一个什么样的交换机功能? 实现将接收到的数据包发送到所有端口 控制器设定交换机 ...
随机推荐
- day53-python之会话
from django.shortcuts import render,redirect # Create your views here. import datetime def login(req ...
- Ldr和bl指令
Ldr和bl在启动程序中,都是可以负责pc跳转的指令. 1)bl是地址无关指令,和什么地址无关呢?和当前的运行地址无关,链接器脚本中标明了一个运行地址,但是arm中的代码实际是从地址0开始运行的.这个 ...
- flask_mail使用
python3里发送邮件使用smtplib模块,内置得,不用下载安装,直接导入即可 smtplib使用实例 import smtplib from email.mime.text import MIM ...
- Java获取各种路径
(1).request.getRealPath("/");//不推荐使用获取工程的根路径(2).request.getRealPath(request.getRequestURI( ...
- suse12安装详解
1.部署步骤 1.1.启动安装程序 在启动页面上选择Installation,然后按Enter键,这将载入SUSE Linux服务器安装程序并以普通模式安装. 1.2.选择安装语言 Language和 ...
- Oracle 数据库中的GROUP BY与HAVING
一.GROUP BY GROUP BY语句用来与聚合函数(aggregate functions such as COUNT, SUM, AVG, MIN, or MAX.)联合使用来得到一个或多个列 ...
- C#使用托管程序连接Oracle数据库(Oracle.ManagedDataAccess.dll)
一.概述 Oracle Data Provider for .NET, Managed Driver: Oracle官方的托管数据库访问组件,单DLL,Oracle.ManagedDataAcces ...
- 完成一个springboot项目的完整总结一
一. 项目的基础环境的搭建 1.javaJDK的安装和配置环境变量 2.mysql 3.eclipse 二.项目高级环境的搭建 使用maven前,一定要先安装JDK 1) 解压maven到briup目 ...
- 【shell】1、变量的声明、引用及作用域
shell程序 以文件形式存放==批量的Linux命令集合==,该文件能够被Shell解释执行,这种文件就是Shell脚本程序 通常由一段Liunx命令.Shell命令.控制语句以及注释语句构成 Sh ...
- log4j+junit+maven
本文在开发第一个maven示例的基础上进行扩展. 日志级别测试 在src\main\resources文件夹下新建log4j.properties log4j.rootLogger = warn,st ...