Mininet流表操作

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/weixin_36372879/article/details/86371583

参考链接:https://www.bilibili.com/video/av24111964/?p=5
mininet脚本代码

#!/usr/bin/python

from mininet.net import Mininet
from mininet.node import Controller, RemoteController, OVSController
from mininet.node import CPULimitedHost, Host, Node
from mininet.node import OVSKernelSwitch, UserSwitch
from mininet.node import IVSSwitch
from mininet.cli import CLI
from mininet.log import setLogLevel, info
from mininet.link import TCLink, Intf
from subprocess import call

def myNetwork():

    net = Mininet( topo=None,
                   build=False,
                   ipBase='10.0.0.0/8')

    info( '*** Adding controller\n' )
    c0=net.addController(name='c0',
                      controller=RemoteController,
                      ip='127.0.0.1',
                      protocol='tcp',
                      port=6633)

    info( '*** Add switches\n')
    s2 = net.addSwitch('s2', cls=OVSKernelSwitch, dpid='0000000000000002')
    s1 = net.addSwitch('s1', cls=OVSKernelSwitch, dpid='0000000000000001')

    info( '*** Add hosts\n')
    h3 = net.addHost('h3', cls=Host, ip='10.0.0.3', defaultRoute=None)
    h2 = net.addHost('h2', cls=Host, ip='10.0.0.2', defaultRoute=None)
    h1 = net.addHost('h1', cls=Host, ip='10.0.0.1', defaultRoute=None)

    info( '*** Add links\n')
    net.addLink(s1, h1)
    net.addLink(s1, h2)
    net.addLink(s1, s2)
    net.addLink(s2, h3)

    info( '*** Starting network\n')
    net.build()
    info( '*** Starting controllers\n')
    for controller in net.controllers:
        controller.start()

    info( '*** Starting switches\n')
    net.get('s2').start([c0])
    net.get('s1').start([c0])

    info( '*** Post configure switches and hosts\n')

    CLI(net)
    net.stop()

if __name__ == '__main__':
    setLogLevel( 'info' )
    myNetwork()

使用命令启动脚本。

sudo mn --custom test_ryu.py --topo mytopo --controller=remote,ip=127.0.0.1,port=6633

如果出现Caught exception. Cleaning up… Exception: Invalid topo name mytopo错误的话,需要在代码里面更改topo名称

TOPOS = {'mytopo' : (lambda : myNetwork())}

在这里插入图片描述
这样就建立完成了。

查看流表

dpctl dump-flows
在这里插入图片描述

通信原理:
h1发送信息给s1,s1会上报给控制器,由控制器对数据进行处理,控制器给交换机下发流表。相关的数据根据流表将数据包发送出去。当数据包到达s2的时候,s2也会给控制器上报一个消息,这时候控制器也会给s2下发流表数据

删除流表

dpctl del-flows
在这里插入图片描述

这时候就会发现,两个交换机里面的流表是空的。
对某一个流表进行单独的操作:

sh ovs-ofctl del-flows s1 in_port=2

dpctl del-flows in_port=1
dpctl del-flows in_port=2

手动添加流表

dpctl add-flow in_port=1,actions=output:2
dpctl add-flow in_port=2,actions=output:1

可以看到h1又能够ping通h2了
在这里插入图片描述
在这里插入图片描述

添加丢弃数据包的流表

让交换机丢弃从二号端口发来的所有数据包

dpctl add-flow in_port=2,actions=drop

增加之后,主机将无法通信

猜你喜欢

转载自blog.csdn.net/weixin_36372879/article/details/86371583
今日推荐