mininet中下发流表

mininet中下发流表

  1. 使用postman下发流表参考了这篇文章SDN-Postman及python编程对流表的操作

  2. 在mininet/custom文件夹中创建自己的拓扑,touch po.py,内容如下:

    from mininet.topo import Topo
    from mininet.net import Mininet
    from mininet.node import RemoteController
    from mininet.link import TCLink
    from mininet.util import dumpNodeConnections
    
    class MyTopo(Topo):
        def __init__(self):
            Topo.__init__(self)
    
            host1 = self.addHost('h1')
            host2 = self.addHost('h2')
            host3 = self.addHost('h3')
            host4 = self.addHost('h4')
            switch1 = self.addSwitch('s1')
            switch2 = self.addSwitch('s2')
            switch3 = self.addSwitch('s3')
    
            self.addLink(host1,switch1)
            self.addLink(host2,switch2)
            self.addLink(host3,switch3)
            self.addLink(host4,switch3)
            self.addLink(switch1,switch2)
            self.addLink(switch1,switch3)
            self.addLink(switch2,switch3)
    topos = {'mytopo':(lambda:MyTopo())}
    
    
  3. cd到mininet/custom文件夹下,执行su root进入root权限,执行mn --custom po.py --topo mytopo --controller=remote,ip=192.168.40.154,port=6633 --switch ovsk,protocols=OpenFlow10 --mac运行自己的拓扑文件。
    如果不cd到custom文件夹的话,就需要提供自定义拓扑文件的绝对地址。ip就是控制器的ip地址,在这里就是我本地ubuntu虚拟机的地址,ifconfig就可以查看。
    最后我使用的是protocols=OpenFlow10,使用protocols=OpenFlow13时得注意,执行dpctl命令时可能会遇到ovs-ofctl:version negotiation failed (we support version 0x01, peer supports version 0x04)问题,解决方案参考这个链接,就是执行sudo ovs-ofctl -O OpenFlow13 dump-flows s1
    之后在mininet交互行中执行py net.get('h1').cmd('ifconfig h1-eth0 10.1')依次为四个主机分配ip地址。

    拓扑图如下:
    在这里插入图片描述

  4. 我使用postman下发的流表内容是:

    <?xml version="1.0" encoding="UTF-8" standalone="no"?>
    <flow xmlns="urn:opendaylight:flow:inventory">
    <priority>200</priority>
    <flow-name>Foo1</flow-name>
    <idle-timeout>0</idle-timeout>
    <hard-timeout>0</hard-timeout>
    <match>
    <ethernet-match>
    <ethernet-type>
    <type>2048</type>
    </ethernet-type>
    </ethernet-match>
    <ipv4-destination>10.0.0.3/32</ipv4-destination>
    </match>
    <id>1</id>
    <table_id>0</table_id>
    <instructions>
    <instruction>
    <order>0</order>
    <apply-actions>
    <action>
    <order>0</order>
    <drop-action></drop-action>
    </action>
    </apply-actions>
    </instruction>
    </instructions>
    </flow>
    
  5. 下发成功之后,pingall可以发现,h1、h2、h4和h3ping不通,但是其他三台主机都能互相ping通。

  6. 单独为某个交换机执行流表操作:

    1. 下发流表: sh ovs-ofctl add-flow s3 dl_type=0x0800,nw_dst=10.0.0.3,priority=300,table=0,actions=drop
    2. 删除流表:sh ovs-ofctl del-flows s3 nw_dst=10.0.0.3
    3. 查看流表:sh ovs-ofctl dump-flows s3
  7. 操作所有交换机的流表:

    1. 查看流表dpctl dump-flows
    2. 删除流表:dpctl del-flows in_port=1
    3. 添加流表:dpctl add-flow in_port=1,action=output:2,3
  8. 如果是在mininet交互命令中添加主机并通信:

    1. py net.addHost('h5')
    2. py net.addLink(s1,net.get('h5'))
    3. py s1.attach('s1-eth0')
    4. 给主机分配地址:py net.get('h5').cmd('ifconfig h5-etn0 10.5')
  9. 这篇文章也很好Mininet中文使用教程

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值