1. 程式人生 > >Mininet流表操作

Mininet流表操作

參考連結: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

增加之後,主機將無法通訊