1.实验拓扑
2019 SDN上机第2次作业
要求
使用Python脚本完成拓扑搭建,并连接ryu控制器。
from mininet.topo import Topo
class MyTopo( Topo ):
"Simple topology example."
def __init__( self ):
# Initialize topology
Topo.__init__( self )
sw1 = self.addSwitch('s1')
sw2 = self.addSwitch('s2')
h1 = self.addHost('h1')
h2 = self.addHost('h2')
h3 = self.addHost('h3')
h4 = self.addHost('h4')
h5 = self.addHost('h5')
h6 = self.addHost('h6')
self.addLink(h1,sw1,1,1)
self.addLink(h2,sw1,1,2)
self.addLink(h3,sw1,1,3)
self.addLink(sw1,sw2,4,4)
self.addLink(h4,sw2,1,1)
self.addLink(h5,sw2,1,2)
self.addLink(h6,sw2,1,3)
topos = { 'mytopo': ( lambda: MyTopo() ) }
sudo mn --custom ./sdn2.py --topo mytopo --controller=remote,ip=127.0.0.1,port=6633 --switch ovsk,protocols=OpenFlow13
输入以下命令连接ryu控制器
ryu-manager ofctl_rest.py
2.使用Ryu的REST API下发流表实现和第2次实验同样的VLAN
curl -X POST -d '{
"dpid": 1,
"priority":1,
"match":{
"in_port":1 #端口1
},
"actions":[
{
"type": "PUSH_VLAN", # 给进入交换机的包打上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":{
"dl_vlan": "0"
},
"actions":[
{
"type": "POP_VLAN", # 给进入交换机的包去除 vlan_tag
},
{
"type": "OUTPUT",
"port": 1
}
]
}' http://localhost:8080/stats/flowentry/add
逐个执行
也可以合并在一起执行
查看流表
可以看到控制器端显示下发的流表已被接收
可以ping通相同VLAN的,如实验2
3.对比两种方法,写出你的实验体会
curl相比于之前的方法实际上是用远程管理的方法来下发流表,相比ovs-ofctl 这种方法,通用性更高。
全部sh命令见链接