1. 解压安装OpenDayLight控制器(本次实验统一使用Beryllium版本)

  • 配置java环境

  • 安装OpenDayLight控制器

2. 启动并安装插件

cd distribution-karaf-0.4.4-Beryllium-SR4/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控制器

  • python代码
from mininet.topo import Topo

class Topo2( Topo ):

    def __init__( self ):

        # Initialize topology
Topo.__init__( self ) # add switches and hosts
sw1 = self.addSwitch('s1')
sw2 = self.addSwitch('s2') h1 = self.addHost('h1')
h2 = self.addHost('h2')
h3 = self.addHost('h3') # add links
self.addLink(h1,sw1,1,1)
self.addLink(h2,sw1,1,2)
self.addLink(h3,sw1,1,3) topos = { 'mytopo': ( lambda: Topo2() ) }
  • 连通性

  • 可执行

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

  • 下发流表设置过程



  • 解释

id:流表项id,任意值,不冲突即可

in-port:流表项匹配的进入端口,这里需填h2对应的port号

ethernet-type:以太网类型0x0800表示以太网帧是ip协议

layer-3-match:ipv4-match 三层匹配为ipv4匹配

ipv4-source:数据包源ip匹配项(这里由于port1进入的数据包只可能是h2发送的所以可以不填)

ipv4-destination:数据包目的ip匹配项

新增instruction list这是流表项匹配到数据报后要执行的指令

order:0 指令id0

instruction:apply-actions-case 执行动作

新增action list

action drop-action-case 丢包动作(转发动作为output-action 并要在output-node-connector填写转发端口)

order:0 动作id0

flow-name 流表项名字,可不填

priority 流表项优先级,要大于odl下发的默认流表,这里设置成最大65535

hard-timeout 硬超时,流表项下发后生效时长

cookie 可不填,为方便在ovs中查找下发成功的流表项可以设置成容易找的到值如0x02(要填16进制)

table_id 流表id 默认为0

  • 查询链路连接情况

  • h2 ping h3,发生延时

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

  • 安装运行postman,下发流表json格式
http://127.0.0.1:8181/restconf/config/opendaylight-inventory:nodes/node/openflow:1/flow-node-inventory:table/0/flow/1

{
"flow": [
{
"id": "1",
"match": {
"in-port": "1",
"ethernet-match": {
"ethernet-type": {
"type": "0x0800"
}
},
"ipv4-destination": "10.0.0.3/32"
},
"priority": "65535",
"hard-timeout": "25",
"cookie": "2",
"table_id": "0"
}
]
}
  • 将preview的url复制到地址栏,输入odl的默认账号和密码admin

  • 将preview的消息粘贴在文本框中,修改id和url里的flow为2,防止与之前的流表重合,点击send后下发成功,然后改为GET并send查看刚下发的流表

2019 SDN上机第4次作业的更多相关文章

  1. 2019 SDN上机第7次作业

    2019 SDN上机第7 次作业 basic补充`/* -- P4_16 -- */ include <core.p4> include <v1model.p4> const ...

  2. 2019 SDN上机第6次作业

    2019 SDN上机第6次作业 1.实验拓扑 (1)实验拓扑 (2)使用Python脚本完成拓扑搭建 from mininet.topo import Topo from mininet.net im ...

  3. 2019 SDN上机第5次作业

    2019 SDN上机第5次作业 1.浏览RYU官网学习RYU控制器的安装和RYU开发入门教程,提交你对于教程代码的理解,包括但不限于: 描述官方教程实现了一个什么样的交换机功能? 答:官方教程实现了一 ...

  4. 2019 SDN上机第四次作业

    2019 SDN上机第4次作业 1. 解压安装OpenDayLight控制器(本次实验统一使用Beryllium版本) 修改环境变量 2. 启动并安装插件 3. 用Python脚本搭建如下拓扑,连接O ...

  5. 2019 SDN上机第三次作业

    2019 SDN上机第三次作业 实验一 利用Mininet仿真平台构建如下图所示的网络拓扑,配置主机h1和h2的IP地址(h1:10.0.0.1,h2:10.0.0.2),测试两台主机之间的网络连通性 ...

  6. 2019 SDN上机第六次作业

    1.实验拓扑 (1)实验拓扑 (2)使用python脚本完成拓扑搭建 from mininet.topo import Topo class Mytopo(Topo): def __init__(se ...

  7. 2019 SDN上机第五次作业

    1.浏览RYU官网学习RYU控制器的安装和RYU开发入门教程,提交你对于教程代码的理解,包括但不限于: 描述官方教程实现了一个什么样的交换机功能? 实现将接收到的数据包发送到所有端口 控制器设定交换机 ...

  8. 2019 SDN上机第3次作业

    1. 利用Mininet仿真平台构建如下图所示的网络拓扑,配置主机h1和h2的IP地址(h1:10.0.0.1,h2:10.0.0.2),测试两台主机之间的网络连通性 创建拓扑 配置主机h1和h2的I ...

  9. 2019 SDN上机第2次作业

    1.利用mininet创建如下拓扑,要求拓扑支持OpenFlow 1.3协议,主机名.交换机名以及端口对应正确,请给出拓扑Mininet执行结果,展示端口连接情况 1.1拓扑 1.2 代码 #!/us ...

随机推荐

  1. ASP.NET Core 中使用负载均衡时获取客户端 IP

    在使用负载均衡的情况下,通过 context.Connection.RemoteIpAddress 获取到的是负载均衡的 IP 地址,需要通过 X-Forwarded-For 请求头才能获取到客户端的 ...

  2. 大话设计模式Python实现-单例模式

    单例模式(Singleton Pattern):保证类仅有一个实例,并提供一个访问它的全局访问点. 下面是单例模式的demo: #!/usr/bin/env python # -*- coding:u ...

  3. 详解JAVA8函数式接口{全}

    1: 函数式接口 1.1 概念 1.2 格式 1.3@FunctionalInterface注解 1.4 调用自定义函数接口 2:函数式编程 2.1:lambda的延迟执行 2.2 使用Lambda作 ...

  4. oracle学习笔记(十九) 子程序——存储过程

    子程序--存储过程 我们可以使用子程序来封装一下我们需要的操作,子程序又有存储过程,函数和触发器. 这里先学习存储过程~ 语法 create [or replace] procedure $proce ...

  5. C#函数的参数传递方式1(值传递与地址传递)

    using System; namespace class1 { class program { static void Main(string[] args) { //值传递引用,实际参数不会变化 ...

  6. hibernate关联关系(一对多)

    什么是关联(association) 关联指的是类之间的引用关系.如果类A与类B关联,那么被引用的类B将被定义为类A的属性. 案例:如何建立客户和订单一对多双向关联 先不建立客户和订单的关联关系,定义 ...

  7. django6-orm进阶操作

    1.创建django环境的脚本 在自定义脚本中操作orm ,但是自定义脚本中不具备django的环境 ###test.py 脚本,引入django的环境即可使用orm操作数据库import os if ...

  8. docker挡板程序实现启动多个实例进程

    启动服务: docker-compose restart

  9. jQuery之概念以及基本使用

    1. jQuery的概述 1.1 jQuery的概念 jQuery是一个快速.简洁的JavaScript库,其设计的宗旨是“Write Less,Do More” jQuery主要是封装了JavaSc ...

  10. JavaScript操作数据库JS操作Access数据库

    avaScript操作数据库JS操作Access数据库,跟其他语言操作差不多,总结了一下习惯代码,仅供参考学习.现在在F盘有文件abc.mdf,表名为Student,一共2个字段,Id数字类型主键,s ...