from mininet.topo import Topo class MyTopo(Topo): def __init__(self): Topo.__init__(self) h1 = self.addHost('h1') h2 = self.addHost('h2') h3 = self.addHost('h3') h4 = self.addHost('h4') h5 = self.addHost('h5') h6 = self.addHost('h6') s1 = self.addSwitch('s1') s2 = self.addSwitch('s2') self.addLink(h1, s1, 1, 1) self.addLink(h2, s1, 1, 2) self.addLink(h3, s1, 1, 3) self.addLink(s1, s2, 4, 4) self.addLink(h4, s2, 1, 1) self.addLink(h5, s2, 1, 2) self.addLink(h6, s2, 1, 3) topos = {'mytopo': (lambda: MyTopo())}
sudo mn --custom ex.py --topo mytopo --controller=remote,ip=127.0.0.1,port=6633 --switch ovsk,protocols=OpenFlow13
python
curl -X POST -d '{ "dpid": 1, "priority":1, "match":{ "in_port":1 }, "actions":[ { "type": "PUSH_VLAN", # s1將從主機發來的數據包打上vlan_tag "ethertype": 33024 # 幀類型0x8100(=33024): 表示IEEE 802.1Q的VLAN數據幀 }, { "type": "SET_FIELD", "field": "vlan_vid", # 設置VLAN ID "value": 4096 # 設置vlan_id的值 }, { "type": "OUTPUT", "port": 4 } ] }' http://127.0.0.1:8080/stats/flowentry/add curl -X POST -d '{ "dpid": 1, "priority":1, "match":{ "in_port":2 }, "actions":[ { "type": "PUSH_VLAN", # s1將從主機發來的數據包打上vlan_tag "ethertype": 33024 # 幀類型0x8100(=33024): 表示IEEE 802.1Q的VLAN數據幀 }, { "type": "SET_FIELD", "field": "vlan_vid", # 設置VLAN ID "value": 4097 # 設置vlan_id的值 }, { "type": "OUTPUT", "port": 4 } ] }' http://127.0.0.1:8080/stats/flowentry/add curl -X POST -d '{ "dpid": 1, "priority":1, "match":{ "in_port":3 }, "actions":[ { "type": "PUSH_VLAN", # s1將從主機發來的數據包打上vlan_tag "ethertype": 33024 # 幀類型0x8100(=33024): 表示IEEE 802.1Q的VLAN數據幀 }, { "type": "SET_FIELD", "field": "vlan_vid", # 設置VLAN ID "value": 4098 # 設置vlan_id的值 }, { "type": "OUTPUT", "port": 4 } ] }' http://127.0.0.1:8080/stats/flowentry/add curl -X POST -d '{ "dpid": 1, "priority":1, "match":{ "dl_vlan": "0" }, "actions":[ { "type": "POP_VLAN", # 給進入交換機的包去除 vlan_tag }, { "type": "OUTPUT", "port": 1 } ] }' http://localhost:8080/stats/flowentry/add curl -X POST -d '{ "dpid": 1, "priority":1, "match":{ "dl_vlan": "1" }, "actions":[ { "type": "POP_VLAN", # 給進入交換機的包去除 vlan_tag }, { "type": "OUTPUT", "port": 2 } ] }' http://localhost:8080/stats/flowentry/add curl -X POST -d '{ "dpid": 1, "priority":1, "match":{ "dl_vlan": "2" }, "actions":[ { "type": "POP_VLAN", # 給進入交換機的包去除 vlan_tag }, { "type": "OUTPUT", "port": 3 } ] }' http://localhost:8080/stats/flowentry/add curl -X POST -d '{ "dpid": 2, "priority":1, "match":{ "in_port":1 }, "actions":[ { "type": "PUSH_VLAN", # s1將從主機發來的數據包打上vlan_tag "ethertype": 33024 # 幀類型0x8100(=33024): 表示IEEE 802.1Q的VLAN數據幀 }, { "type": "SET_FIELD", "field": "vlan_vid", # 設置VLAN ID "value": 4096 # 設置vlan_id的值 }, { "type": "OUTPUT", "port": 4 } ] }' http://127.0.0.1:8080/stats/flowentry/add curl -X POST -d '{ "dpid": 2, "priority":1, "match":{ "in_port":2 }, "actions":[ { "type": "PUSH_VLAN", # s1將從主機發來的數據包打上vlan_tag "ethertype": 33024 # 幀類型0x8100(=33024): 表示IEEE 802.1Q的VLAN數據幀 }, { "type": "SET_FIELD", "field": "vlan_vid", # 設置VLAN ID "value": 4097 # 設置vlan_id的值 }, { "type": "OUTPUT", "port": 4 } ] }' http://127.0.0.1:8080/stats/flowentry/add curl -X POST -d '{ "dpid": 2, "priority":1, "match":{ "in_port":3 }, "actions":[ { "type": "PUSH_VLAN", # s1將從主機發來的數據包打上vlan_tag "ethertype": 33024 # 幀類型0x8100(=33024): 表示IEEE 802.1Q的VLAN數據幀 }, { "type": "SET_FIELD", "field": "vlan_vid", # 設置VLAN ID "value": 4098 # 設置vlan_id的值 }, { "type": "OUTPUT", "port": 4 } ] }' http://127.0.0.1:8080/stats/flowentry/add curl -X POST -d '{ "dpid": 2, "priority":1, "match":{ "dl_vlan": "0" }, "actions":[ { "type": "POP_VLAN", # 給進入交換機的包去除 vlan_tag }, { "type": "OUTPUT", "port": 1 } ] }' http://localhost:8080/stats/flowentry/add curl -X POST -d '{ "dpid": 2, "priority":1, "match":{ "dl_vlan": "1" }, "actions":[ { "type": "POP_VLAN", # 給進入交換機的包去除 vlan_tag }, { "type": "OUTPUT", "port": 2 } ] }' http://localhost:8080/stats/flowentry/add curl -X POST -d '{ "dpid": 2, "priority":1, "match":{ "dl_vlan": "2" }, "actions":[ { "type": "POP_VLAN", # 給進入交換機的包去除 vlan_tag }, { "type": "OUTPUT", "port": 3 } ] }' http://localhost:8080/stats/flowentry/add
原來的方法沒有容錯率,只要錯了一小步就得從新開始,而使用ryu更容易理解而且在後面代碼中能夠修正一些錯誤,方便又實用。shell