前提條件: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)低。