mininet中流表操作(2021.6.25)


前提條件:ryu與mininet連接。通過以下拓撲

__author__ = 'jmh081701'
from mininet.topo import Topo
class MyTopo(Topo):
    def __init__(self):
        Topo.__init__(self)
        left=[]
        left.append(self.addHost("h1"))
        left.append(self.addHost("h2"))
        right=[]
        right.append(self.addHost("h3"))
        right.append(self.addHost("h4"))
        switchs=[]
        switchs.append(self.addSwitch("s1"))
        switchs.append(self.addSwitch("s2"))

        self.addLink(left[0],switchs[0])
        self.addLink(left[1],switchs[0])
        self.addLink(right[0],switchs[1])
        self.addLink(right[1],switchs[1])
        self.addLink(switchs[0],switchs[1])


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

1.dpctl dump-flows查看所有交換機的靜態流表

 

 pingall后,再次查看。發現s1和s2的流表。

 

 

下面是很簡單的數據包轉發過程示意圖:

h1 ping h2操作的圖示如下,控制器下發流表策略,s1生成一條流表,告訴s1怎么轉發數據包,s1把數據包轉發給h2。

 

 h1 ping h3的情況,數據包走向:h1->s1(通過c0生成 ‘數據包轉發給s2’ 的流表)->s2(通過c0生成 ‘數據包轉發給h3’ 的流表)->h3

 2.dpctl del-flows刪除所有流表

所有流表為空

 

 此時,h1 ping h2 是ping不通的

3.手動添加流表

添加兩條流表:數據包從1號port進 2號port出;數據包從2號port進 ,1號port出。h1 ping h2。

 

 但是h1 ping h3 是不通的,因為s1的3號port沒有流表涉及。

 

 4.刪除包含指定字段的所有流表

刪除s1的in_port=2字段的流表。 sh表示針對某個交換機操作。

 

 也可以這樣,刪除所有包含in_port=2字段的流表。

 

 5.添加丟棄數據包的流表

例如讓交換機丟棄從2號port發來的所有數據包

 

 6.當然也可以設置流表優先級。

 dpctl add-flow priority=0,in_port=2,actions=drop

此時pingall是可以ping通的。

因為添加的丟棄數據包的流表優先級(priority=0)比控制器下發的流表優先級(priority=1)低。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM