1 安装OpenDayLight控制器,启动并安装插件
2 用Python脚本搭建如下拓扑:
from mininet.topo import Topo
class Mytopo(Topo):
def __init__(self):
Topo.__init__(self)
sw=self.addSwitch('s1')
h1=self.addHost('h1')
h2=self.addHost('h2')
h3=self.addHost('h3')
self.addLink(sw,h1)
self.addLink(sw,h2)
self.addLink(sw,h3)
topos = {'mytopo': (lambda:Mytopo())}
pingall,显示各主机都连通:
控制器端拓扑图:
3 在控制器提供的WEB UI中下发流表使h2 20s内ping不通h3,20s后恢复
下发流表过程:
in-port=2
:对2号端口进来的数据进行限制
instructio n: apply-actions-case (执行动作)
action : drop-action-case (丢包动作)
hard-timeout:硬超时,在流表下发之后改时间内的报文都会执行上文设置的丢弃动作
流表内容设置好之后点击SEND,成功之后流表就会生效,在20秒内h2 无法ping通h3
Preview:
http://127.0.0.1:8181/restconf/config/opendaylight-inventory:nodes/node/openflow:1/flow-node-inventory:table/0/flow/2
{
"flow": [
{
"id": "2",
"match": {
"in-port": "2",
"ethernet-match": {
"ethernet-type": {
"type": "0x0800"
}
},
"ipv4-destination": "10.0.0.3/32"
},
"instructions": {
"instruction": [
{
"order": "0",
"apply-actions": {
"action": [
{
"order": "0",
"drop-action": {}
}
]
}
}
]
},
"flow-name": "flow111",
"hard-timeout": "20",
"table_id": "0"
}
]
}
links:
在下发流表前,icmp_seq=1和icmp_seq=2的报文正常通信。
在这时下发流表,之后的20秒都无法ping通:
4 借助Postman通过OpenDayLight的北向接口下发流表,再利用OpenDayLight北向接口查看已下发的流表。
将preview的url复制到地址栏,输入odl的默认账号和密码admin
使用PUT方法 下发流表:
使用GET方法 查看刚刚下发的流表项