2019 SDN上机第4次作业

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

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

2. 启动并安装插件

进入ODL文件夹,运行./karaf

安装feature

打开控制器ui

3. 用Python脚本搭建如下拓扑,连接OpenDayLight控制器


Python脚本

from mininet.topo import Topo

class MyTopo( Topo ):
    "Simple topology example."

    def __init__( self ):
        "Create custom topo."

        # Initialize topology
        Topo.__init__( self )
        
          
        # add switches  
        sw = self.addSwitch('s1')
                
        # add hosts
	h1 = self.addHost('h1')
        h2 = self.addHost('h2')
        h3 = self.addHost('h3')

	# add links
	self.addLink(h1,sw,1,1)
        self.addLink(h2,sw,1,2)
        self.addLink(h3,sw,1,3)       

topos = { 'mytopo': ( lambda: MyTopo() ) } 

新建的py脚本文件权限要改为可执行

命令行输入:

sudo mn --custom /home/lxt/mininet/fattree.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后恢复

选择PUT方式下发流表,node/openflow:1,table:0,flow:1
id:1,in-port:2(交换机连接h2的端口),ethernet-type:0x0800(表示以太网帧是ip协议)

layer-3-match:ipv4-match 三层匹配为ipv4匹配,ipv4-source:数据包源ip匹配项(这里由于port2进入的数据包只可能是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 硬超时,流表项下发后生效时长,这里设置为20
cookie 可不填,为方便在ovs中查找下发成功的流表项可以设置成容易找的到值如0x02(要填16进制)
table_id 流表id 默认为0

先在mininet中执行h2 ping h3,再send

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


通过OpenDayLight的北向接口下发流表

利用OpenDayLight北向接口查看已下发的流表

原文地址:https://www.cnblogs.com/LIN5516558/p/11908793.html