首页 > 其他分享 >OpenDaylight下发流表

OpenDaylight下发流表

时间:2024-12-14 20:31:50浏览次数:4  
标签:ovs 10.0 流表 s1 下发 id OpenDaylight nw

image-20241125161140946

实验一:单流表(v1.0)

下发流表实现h1和h2之间不能互通。

1、启动OpenDaylight

./karaf

image-20241127081148840

查看6633端口是否处于监听状态

netstat -an | grep 6633

image-20241213201252014

在物理机浏览器中访问虚拟机ip:8181/index.html登录OpenDaylight网页端。

账号密码都是admin。

image-20241127081226827

后面做实验的时候,出现过无法登录的情况,点击登录后,提示无法登录,重启也没用。后来发现,多等一会儿就能登录上了。

image-20241213202253369

需要注意的是,ODL资源开销比较大,我2G内存的虚拟机,ODL就占用了60%多的内存。

image-20241213202453142

image-20241213202457873

后来把虚拟机内存调到4G,启动ODL的速度明显变快了。

2、创建拓扑

重新打开一个终端,使用Mininet创建拓扑,并指定控制器为OpenDaylight1.0的控制器

mn --topo=single,3 --controller=remote,ip=127.0.0.1,port=6633 --switch ovsk,protocol=OpenFlow10

注意:OpenFlow10需区分大小写,不能写成openflow10

image-20241127081800092

在浏览器中刷新OpenDaylight的界面,查看是否出现了交换机。

image-20241127081909337

在Mininet交互界面中输入pingall,再次刷新OpenDaylight界面,出现了三台主机。

image-20241127083649657

image-20241127082248323

3、定义流表

在浏览器中访问OpenDaylight的Nodes页面,查看Node ID。记住这个Node ID。openflow:1

image-20241127084725545

打开Yang UI界面,展开opendaylight-inventory rev.2013-08-19

image-20241213210742598

补全node id。node id就是刚才Nodes页面要记住的那个ID。

openflow:1

image-20241213213415622

添加流表

image-20241213213445884

输入table id。由于是单流表,只有一个表项,所以就填0。

image-20241213213524882

定义流策略

以太帧中type字段值为0x0800表示上层协议使用的是IP协议。(下图中写成了0x800,不过也不影响)

h1到h2的流,源IP为h1的IP:10.0.0.1,目的IP为h2的IP:10.0.0.2

image-20241213211644646

往下滑~

定义流行为

image-20241213212040157

继续往下滑~

设置优先级,超时时间等参数

将cookie设置为10进制的10,待会再mininet中查看流表时,cookie=0xa的那条流表就是现在编辑的这条流表。

image-20241213212305735

下发流表

回到上方url板块,将动作类型更改为PUT,点击Send使用put方式下发流表。

image-20241213213556914

下方出现这样的提示表示下发成功

image-20241213212703094

在Mininet交互界面查看流表是否已下发

dpctl dump-flows
# 或
sh ovs-ofctl dump-flows s1

image-20241213213647130

寻找cookie=0xa或优先级priority=10的流表,可以看到刚刚下方的流表已经下发成功了。

验证流表是否生效

使用h1 ping h2不通,其他主机之间能够互通,流表生效。

image-20241127094448259

image-20241127094632337

4、删除流表

一定要记得把流表删除,不然以后做实验时,流表可能还在,影响做实验。

# 删除流表
sh ovs-ofctl del-flows s1 dl_type=0x0800,nw_src=10.0.0.1,nw_dst=10.0.0.2
# 查看流表
sh ovs-ofctl dump-flows s1

image-20241213214353173

再次测试连通性,h1和h2之间连通。

image-20241213214608346

实验环境不要关,可以接着做下一个实验。

实验二:多级流表(v1.3)

下发多级流表实现h1和h2之间不能互通。

1、创建topo

基于Open Flow v1.3下发多级流表。

如果第一个实验还没关,可以继续使用。(记得注意检查一下三台主机是否能ping通,我做实验时,将流表删除了,后面这条流表又自己出现了)

在mininet交互界面直接更改Open Flow的版本。

sh ovs-vsctl set bridge s1 protocols=OpenFlow13

image-20241213215113964

如果是重新开始,就先启动ODL,登录到web端,再使用以下命令创建一个topo。

mn --topo=single,3 --controller=remote,ip=127.0.0.1,port=6633 --switch ovsk,protocol=OpenFlow13

2、下发第一条流表

打开Yang UI界面,展开opendaylight-inventory rev.2013-08-19。

与单流表不同,到table时,需要再展开一层,到达flow。

image-20241213215909406

补全node id和table id。node id仍然与实验一中查询到的node id相同。table id设置为2。

# node-id
openflow:1
# table-id
2

image-20241213220257599

添加流表

设置flow id为1。

image-20241213220351965

image-20241213220535547

源IP为h1的IP,目的IP为h3的IP。

image-20241213220745915

往下滑

image-20241213221003435

继续往下滑,滑到底

cookie设置为11,待会查看流表时,该条流表的cookie=0xb。

image-20241213221204186

下发流表

image-20241213221419925

查看下发的流表

由于OpenFlow协议版本改为了1.3所以命令也需要做一些调整

sh ovs-ofctl -O OpenFlow13  dump-flows s1

image-20241213221811499

测试连通性,都能ping通,原因再书上P119页步骤12中有解释。还需要再下发一条流表。将table 0匹配到的流表交给table2处理。

image-20241213223755746

3、下发第二条流表

第二条流表与第一条流表类似。

table id设置为0,flow id设置为1.

image-20241213224244773

image-20241213224420670

image-20241213224537093

注意,这里与第一个流表不同。

image-20241213224915779

滑到最下面

image-20241213225151895

下发流表

image-20241213225226258

查看流表

sh ovs-ofctl -O OpenFlow13  dump-flows s1

image-20241213225311080

测试连通性,1,3不通,其他都同,说明流表生效。

image-20241213225413435

实验完成,删除流表,以免影响后续实验。

sh ovs-ofctl -O OpenFlow13 del-flows s1

image-20241213225735373

推出mininet交互界面,清楚缓存

mn -c

image-20241213225848458

问题

问题一:Mininet拓扑创建不成功

创建Mininet拓扑不成功,提示有一个控制器已经在端口6653上运行

image-20241125150720241

解决方法:

# 查看占用6653端口的进程
netstat -tulnp | grep :6653
# 停止该进程
kill -9 进程号
# 清理Mininet残留
mn -c

image-20241125151132457

问题二:无法连接控制器

重新打开一个终端,查看网桥是否已经连接上了控制器。

ovs-vsctl show

由于当时没连接成功的时候忘记做记录了,这次做实验没有遇到。哪次遇到了再补充。

删除控制器,再重新设置。

root@UbuntuDesktop:~# ovs-vsctl del-controller s1
root@UbuntuDesktop:~# ovs-vsctl show

再次在浏览器中查看拓扑图中是否显示了交换机s1。出现下图中的is_connected:true字样则表示连接成功。

image-20241125160318596

在Mininet交互界面执行pingall命令后,各主机之间互通,浏览器中显示出拓扑图。

image-20241125160655615

image-20241125152613960

问题三:新创建的topo无法ping通

新创建的topo,控制器也链接成功了,但是ping不通。

image-20241213204217258

又ping了一次,发现是只有h1和h2ping不通。估计是上次做的单流表实验的缓存还在。

通过sh ovs-ofctl dump-flows s1查看流表。发现确实是上次做的流表内容还在。

下面这条cookie=0xa,就是做单流表实验时最后设置的那个cokie值,设置为10进制的10,这里以16进制显示为0xa。(源为10.0.0.1,目的为10.0.0.2,动作为阻止drop)

cookie=0xa, duration=1432.332s, table=0, n_packets=4, n_bytes=392, idle_age=472, priority=27,ip,nw_src=10.0.0.1,nw_dst=10.0.0.2 actions=drop

image-20241213204725622

删除这条流表就行了。

# 删除指定流表
sh ovs-ofctl del-flows s1 "cookie=0xa/0xffffffff, priority=27, ip, nw_src=10.0.0.1, nw_dst=10.0.0.2"
  • cookie=0xa/0xffffffff 用来确保只删除具有特定cookie值的流表项。0xffffffff是掩码,它确保了我们只匹配这个确切的cookie值。
  • priority=27, ip, nw_src=10.0.0.1, nw_dst=10.0.0.2 指定了其他匹配条件,以确保仅删除这条流表项。

千万不要为了方便,直接这样删除。

sh ovs-ofctl del-flows s1 "nw_src=10.0.0.1,nw_dst=10.0.0.2"

其他的流表也被匹配到了,一并删除了。

image-20241213210353983

不过好在,重新ping了一遍,流表由自动生成了。

image-20241213210504121

问题四:做完实验一后,做实验二时,莫名奇妙多出一条流表

做完实验一接着做实验二,实验二下发第一条流表的时候,发现第一个实验的流表又冒出来了,导致h1和h2不通。

image-20241213223407235

再把它删掉,不过因为协议该为了1.3所以,命令也有些改变。删除后就能ping通了

sh ovs-ofctl -O OpenFlow13 del-flows s1 dl_type=0x0800,nw_src=10.0.0.1,nw_dst=10.0.0.2

image-20241213223607787

标签:ovs,10.0,流表,s1,下发,id,OpenDaylight,nw
From: https://www.cnblogs.com/chuangblog/p/18607139

相关文章

  • dhcp下发dls的地址
    publicstaticvoidmain(String[]args){//StringasciiString="Siemenssdlp://10.10.30.244:18443";//举例一个ASCII字符串StringasciiString="\u0001\u0007Siemens\u0003\u001asdlp://10.10.30.244:18443";......
  • 【域渗透】组策略下发上线机器
    一、操作利用gpmc.msc打开组策略,修改为强制,下面添加选择要上线的机器或用户  DefaultDomainPolicy点击选择编辑,添加的计算机就选择计算机配置,用户就选择用户配置,添加即时计划任务运行任务时账户不能选择域内账户包括域管,选择System如有弹窗提示输入密码点取消即可 ......
  • OpenDaylight安装和配置
    环境:Ubuntu14.04.6LTS(GNU/Linux4.4.0-142-genericx86_64)注意,需要确保虚拟机中安装有jdkroot@UbuntuDesktop:~#java-versionjavaversion"1.8.0_151"Java(TM)SERuntimeEnvironment(build1.8.0_151-b12)JavaHotSpot(TM)64-BitServerVM(build25.151-b12,......
  • 信号模拟源参数下发:一帧ROM数据+一帧PN16数据+1000帧AOC数据
    背景:裸数据的封装,通过PCIE通道传输,需要进行封装和提取。白话思路:分别开启模块的使能信号,使用状态机控制其使能的开启,随着地址增加,输出参数值。遇到的几个问题:(1)PN16程序设置使能开启接口(ena_1),ROM自带使能开启接口;(2)状态机的控制信号:地址控制使能的开启;(3)使能信号总是需要提......
  • 5、【实战中提升自己】华为 华三中小型企业网络架构搭建 【无线架构之无线业务部署(包
     1 拓扑与说明         某公司的网络架构,这样的架构在目前的网络中是在常见的,假设您接收一个这样的网络,应该如何部署,该实战系列,就是一步一步讲解,如何规划、设计、部署这样一个环境,这里会针对不同的情况给出不同的讲解,比如拓扑中有2个ISP,假设客户需求是,想实现主备的......
  • 如何借助前端表格控件实现债券网下发行数字化?
    最新技术资源(建议收藏)https://www.grapecity.com.cn/resources/概要作为金融市场中至关重要的一环,债券行业扮演着融资、投资、风险管理等多重角色,对经济的发展和稳定起着举足轻重的作用。随着证券行业全面实施注册制的推进,对项目债券网下发行工作的规范性和各业务阶段......
  • AD下发计算机启动脚本失效
    在adserver下发了一个计算机策略的启动脚本,但通过后台发现脚本运行成功率很低在客户端检测时发现一个问题,如果使用左下角关机,然后再开机,脚本运行不成功;但如果使用重启命令,脚本就能成功测试如下:点击关机,然后按电源开机,检查启用及运行时间,不是实际启动时间显示使用重启命令,启......
  • 一次性下发100w的优惠券/短信/二维码,兼顾线程池参数可配置 在Spring 中 ThreadPoolTas
    一次性下发100w的优惠券/短信/二维码,兼顾线程池参数可配置在Spring中ThreadPoolTaskExecutor的使用1、场景需求分析针对6.18,11.11这种场景,平台一次性发布500w张优惠券,或者对于锁单用户统一发下100w张确认信息,同时我们平时有抢购茅台的场景,京东一次性发布10w个验证码,主要是针......
  • 电压电流表设计文档
    摘要设想设计概述系统组成及功能说明理论成立,开始实现原理图绘制以及器件选型软件设计实现中遇到的问题设计问题硬件问题软件问题最终已实现功能后续摘要本工程基于立创开发板的电压电流表训练营,在原项目基础上增加了1.8寸TFT屏幕,ESP32蓝牙芯片,USB接口,3.......
  • IIS同一站点下发布两个或多个net8、net core应用程序池
    IIS同一站点下布两个net8、netcore报“ASP.NETCoredoesnotsupportmultipleappsinthesameapppool”,意思是多个.netcore程序不支持同一个程序池。那我们手动在创建一个程序池,分给另一个应用程序就可以了。步骤如下:1、点击IIS“应用程序池”-》添加应用程序池 2、......