1. 解压安装OpenDayLight控制器(本次实验统一使用Beryllium版本)
OpenDayLight是java实现的,因此需要先配置java环境,
sudo gedit ~/.bashrc
export JAVA_HOME=/usr/local/java/jdk1.8.0_201
export JRE_HOME=${JAVA_HOME}/jre
export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib
export PATH=${JAVA_HOME}/bin:$PATH
先执行第一条命令,然后把后面的语句保存到bashrc文档
OpenDaylight官网
https://www.opendaylight.org/
OpenDaylight Beryllium版本下载地址,本次实验请安装下面这个版本↓↓↓↓↓
2.启动并安装插件
安装命令
feature:install odl-restconf
feature:install odl-l2switch-switch-ui
feature:install odl-openflowplugin-all
feature:install odl-mdsal-apidocs
feature:install odl-dlux-core
feature:install odl-dlux-node
feature:install odl-dlux-yangui
3. 用Python脚本搭建如下拓扑,连接OpenDayLight控制器
建立如下拓扑
python拓扑代码:
from mininet.topo import Topo
class Mytopo(Topo):
def __init__(self):
Topo.__init__(self)
sw=self.addSwitch('s1')
count=1
for i in range(3):
host = self.addHost('h{}'.format(count))
self.addLink(host,sw,1,count)
count = count + 1
topos = {'mytopo': (lambda:Mytopo())}
执行命令
sudo mn --custom /home/mowei/1.py --topo mytopo --controller=remote,ip=127.0.0.1,port=6633 --switch ovsk,protocols=OpenFlow13
拓扑:
4. 在控制器提供的WEB UI中下发流表使h2 20s内ping不通h3,20s后恢复
ODL具体设置:
get要改成put,node/openflow:1,table/0,flow/不超过1024,flow id为1,in-port为2,type为0x0800(2048),目的地址为10.0.0.3/32
查看
node/openflow:1 交换机编号
table/0 流表编号
flow/不超过1024,不冲突即可 流表项编号
GET为查询流表,下发流表要修改为PUT
配置match
id=:流表项id,任意值,不冲突即可
in-port:流表项匹配的进入端口,这里需填h1对应的port号
ethernet-type:以太网类型0x0800表示以太网帧是ip协议
layer-3-match:ipv4-match 三层匹配为ipv4匹配
ipv4-source:数据包源ip匹配项(这里由于port2进入的数据包只可能是h2发送的所以可以不填)
ipv4-destination:数据包目的ip匹配项
配置instructions
instruction list这是流表项匹配到数据报后要执行的指令
order=:0 指令id0
instruction=:apply-actions-case 执行动作
新增action list=:
action drop-action-case 丢包动作
超时效果图:
5.借助Postman通过OpenDayLight的北向接口下发流表,再利用OpenDayLight北向接口查看已下发的流表
(1)通过preview查看刚刚下发的流表项的json格式,可以调用北向接口传送json数据来对ODL下发指令(如果刚刚下发的流表项内容找不到了可以通过node id, table id, flow id, GET回来,然后把GET按钮切换成PUT按钮查看preview)
(2)安装Postman下发并查看流表
下载解压Postman压缩包
./Postman
用以上命令打开postman,将preview里的url复制到地址栏,消息方式选PUT,IP为控制器所在的PC的IP,type选择Basic Auth ,用户名和密码是ODL的登录账号和密码都是admin
(3)修改put为get,点击send后查看body,ody中将消息格式设置成json,上传方式设置为raw,将preview中的消息粘贴在文本框内,可以看到参数都是在ODL里面设置的为了避免和之前ODL下发过的重合,在这把流表项id改为2或者删除之前发的流表项,修改消息内id的同时url后的flow id也要改为2,否则会收到error,点击send后下发成功,
发送成功后改为GET并send查看刚刚下发的流表项: