• 2019 SDN上机第4次作业


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

    OpenDayLight是java实现的,因此需要先配置java环境,

    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
    

    先执行第一条命令,然后把后面的语句保存到bashrc文档
    OpenDaylight官网
    https://www.opendaylight.org/
    OpenDaylight Beryllium版本下载地址,本次实验请安装下面这个版本↓↓↓↓↓

    2.启动并安装插件

    安装命令

    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 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())}
    

    执行命令

    sudo mn --custom /home/mowei/1.py --topo mytopo --controller=remote,ip=127.0.0.1,port=6633 --switch ovsk,protocols=OpenFlow13
    


    拓扑:

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

    ODL具体设置:

    get要改成put,node/openflow:1,table/0,flow/不超过1024,flow id为1,in-port为2,type为0x0800(2048),目的地址为10.0.0.3/32
    

    查看

    node/openflow:1 交换机编号
    table/0 流表编号
    flow/不超过1024,不冲突即可 流表项编号
    GET为查询流表,下发流表要修改为PUT

    配置match

    id=:流表项id,任意值,不冲突即可
    in-port:流表项匹配的进入端口,这里需填h1对应的port号
    ethernet-type:以太网类型0x0800表示以太网帧是ip协议
    layer-3-match:ipv4-match 三层匹配为ipv4匹配
    ipv4-source:数据包源ip匹配项(这里由于port2进入的数据包只可能是h2发送的所以可以不填)
    ipv4-destination:数据包目的ip匹配项


    配置instructions

    instruction list这是流表项匹配到数据报后要执行的指令
    order=:0 指令id0
    instruction=:apply-actions-case 执行动作
    新增action list=:
    action drop-action-case 丢包动作

    超时效果图:

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

    (1)通过preview查看刚刚下发的流表项的json格式,可以调用北向接口传送json数据来对ODL下发指令(如果刚刚下发的流表项内容找不到了可以通过node id, table id, flow id, GET回来,然后把GET按钮切换成PUT按钮查看preview)


    (2)安装Postman下发并查看流表

    下载解压Postman压缩包

    ./Postman
    

    用以上命令打开postman,将preview里的url复制到地址栏,消息方式选PUT,IP为控制器所在的PC的IP,type选择Basic Auth ,用户名和密码是ODL的登录账号和密码都是admin

    (3)修改put为get,点击send后查看body,ody中将消息格式设置成json,上传方式设置为raw,将preview中的消息粘贴在文本框内,可以看到参数都是在ODL里面设置的为了避免和之前ODL下发过的重合,在这把流表项id改为2或者删除之前发的流表项,修改消息内id的同时url后的flow id也要改为2,否则会收到error,点击send后下发成功,

    发送成功后改为GET并send查看刚刚下发的流表项:

  • 相关阅读:
    C++11之std::future对象使用说明
    C++ time_t与格式化日期时间字符串的转换
    pthread_cond_wait 详解
    C++之future和promise
    hiredis 保存二进制类型文件
    redis 超详细的Redis五种数据结构详解(理论+实战)
    条件变量:pthread_cond_wait使用while循环判断的理解
    c++11 为什么使用ref,和引用的区别
    结构体数组使用StructLinq
    linux中cat、more、less、tail、head命令
  • 原文地址:https://www.cnblogs.com/yangminting/p/11932236.html
Copyright © 2020-2023  润新知