• 2019 SDN上机第6次作业


    1.实验拓扑

    实验拓扑

    Python脚本:

    from mininet.topo import Topo
    
    class MyTopo(Topo):
    
        def __init__(self):
    
            # initilaize topology
            Topo.__init__(self)
    
            # add hosts and switches
            h1 = self.addHost('h1')
            h2 = self.addHost('h2')
            h3 = self.addHost('h3')
            h4 = self.addHost('h4')
            h5 = self.addHost('h5')
            h6 = self.addHost('h6')
            s1 = self.addSwitch('s1')
            s2 = self.addSwitch('s2')
    
            # add links
            self.addLink(h1, s1, 1, 1)
            self.addLink(h2, s1, 1, 2)
            self.addLink(h3, s1, 1, 3)
            self.addLink(s1, s2, 4, 4)
            self.addLink(h4, s2, 1, 1)
            self.addLink(h5, s2, 1, 2)
            self.addLink(h6, s2, 1, 3)
            
    topos = {'mytopo': (lambda: MyTopo())}
    

    使用命令sudo mn --custom topo.py --topo mytopo --controller=remote,ip=127.0.0.1,port=6633 --switch ovsk,protocols=OpenFlow13创建拓扑:

    2.使用Ryu的REST API下发流表实现和第2次实验同样的VLAN

    下发流表之前:

    打开RYU GUI界面:ryu-manager gui_topology.py


    红框内的地址在浏览器中打开:

    下发流表

    采取shell文件编辑流表脚本(s1):

    #h1-s2
    curl -X POST -d '{
    
        "dpid": 1,
        "priority": 1,
        "match":{
    	"in_port": 1
    
        },
    
        "actions":[
    	{
    	    "type": "PUSH_VLAN",
    	    
    	     "ethertype": 33024
    	},
    	{
    
                "type": "SET_FIELD",
    
    	    "field": "vlan_vid",
    
                "value": 4096   
    	},
            {
    
                "type":"OUTPUT",
    
                "port": 4
    
            }
    
        ]
    
     }' http://localhost:8080/stats/flowentry/add
    
    
    #h2-s2
    curl -X POST -d '{
    
        "dpid": 1,
        "priority": 1,
        "priority": 1,
                  
        "match":{
    	"in_port": 2
    
        },
    
        "actions":[
    	{
    	    "type": "PUSH_VLAN",
    	    
    	     "ethertype": 33024
    	},
    	{
    
                "type": "SET_FIELD",
    
    	    "field": "vlan_vid",
    
                "value": 4097   
    	},
            {
    
                "type":"OUTPUT",
    
                "port": 4
    
        
    	}
       ]
    
     }' http://localhost:8080/stats/flowentry/add
    
    
    #h3-s2
    curl -X POST -d '{
    
        "dpid": 1,
        "priority": 1,
    
        "match":{
    	"in_port": 3
    
        },
    
        "actions":[
    	{
    	    "type": "PUSH_VLAN",
    	    
    	     "ethertype": 33024
    	},
    	{
    
                "type": "SET_FIELD",
    
    	    "field": "vlan_vid",
    
                "value": 4098   
    	},
            {
    
                "type":"OUTPUT",
    
                "port": 4
    
            }
    
        ]
    
     }' http://localhost:8080/stats/flowentry/add
    
    
    #vlan = 0(=4096-vlan_vid) -> s2:eth1  
    # h1 - > h4
    curl -X POST -d '{
    
        "dpid": 1,
        "priority": 1,
    
        "match":{
    
            "dl_vlan": "0"    # Describe sum of VLAN-ID(e.g. 5) | OFPVID_PRESENT(0x1000)
    
        },
    
        "actions":[
    	{
    	    "type": "POP_VLAN",
    	},
            {
    
                "type":"OUTPUT",
    
                "port": 1
    
            }
    
        ]
    
     }' http://localhost:8080/stats/flowentry/add
    
    #vlan = 1(=vlan_vid-4096) -> s2:eth2 
    # h2 - > h5
    curl -X POST -d '{
    
        "dpid": 1,
        "priority": 1,
    
        "match":{
    
            "dl_vlan": "1"    # Describe sum of VLAN-ID(e.g. 5) | OFPVID_PRESENT(0x1000)
    
        },
    
        "actions":[
            {
    
                "type": "POP_VLAN",
            },
    	
            {
    
                "type":"OUTPUT",
    
                "port": 2
    
            }
    
        ]
    
     }' http://localhost:8080/stats/flowentry/add
    
    #vlan = 2(=vlan_vid-4096) -> s2:eth3  
    # h3 - > h6
    curl -X POST -d '{
    
        "dpid": 1,
        "priority": 1,
    
        "match":{
    
            "dl_vlan": "2"    # Describe sum of VLAN-ID(e.g. 5) | OFPVID_PRESENT(0x1000)
    
        },
    
        "actions":[
            {
                "type": "POP_VLAN",
            },
            {
    
                "type":"OUTPUT",
    
                "port": 3
    
            }
    
        ]
    
     }' http://localhost:8080/stats/flowentry/add
    
    
    
    

    使用sh all.sh执行下发流表的命令
    "dpid":1都改为"dpid": 2就可以下发s2的流表

    在RYU界面查看流表:

    s1:

    s2:

    下发流表之后再次pingall:


    由结果可知,流表已经成功正确地下发。

    3.对比两种方法,写出你的实验体会

    采用Ryu控制器的REST API下发的流表是直接编辑json格式的流表,界面会更清楚且容易理解。

  • 相关阅读:
    SQL SERVER怎样将某个服务器上面的数据自动备份到另一台服务器上面(异地备份)
    jboss eap 6.2 ear包 下使用log4j日志
    配置jboss EAP 6.4 数据库连接超时时间
    java解析XML
    META-INF下文件读取
    Java J2EE读取配置文件
    EJB Remote/Local 绑定和JNDI Lookup
    Cypress web自动化27-Debugging调试你的代码
    Cypress web自动化26-mochawesome-merge合并json报告
    Cypress web自动化25-生成mochawesome-report合并报告
  • 原文地址:https://www.cnblogs.com/xzhcode/p/11985475.html
Copyright © 2020-2023  润新知