Floodlight下发流表过程分析

转载请注明出处:http://blog.csdn.net/vonzhoufz/article/details/32166445

当一个packet到达openflow交换机,会进行流表的匹配,如果没有找到相应的流表项,就会发送一个packet_in消息

到达SDN controller端,控制器根据一定的路由算法决策后,会向该路径上的所有交换机下发流表(也就是发送FLOW_MOD消息,里面有对应的action)。这里要知道的是在SDN的环境下,控制器具有全局拓扑信息,每当有链路状态改变时就会跟新拓扑,而路由的计算是需要下发转发规则的时候进行。下面对这个流程进行详细分析。

链路发现模块会关注两种消息 PACKET_IN 和 PORT_STATUS ,从而分析链路的变更。这里看对于PACKET_IN  ,LinkDiscoveryManager的处理过程:

LinkDiscoveryManager完成的工作是增加或更新链路状态,加入到一个LDUpdates队列中,接下来看拓扑管理模块TopologyManager,它在启动的时候会新起一个线程 NewInstanceWorker
:首先根据消息类型来增删该链路的状态,然后创建一个计算拓扑的实例TopologyInstance来计算出拓扑并存储,具体过程如下:

当完成拓扑计算后,当来了一个packet_in,就会根据源目SW得到路径。

接下来防火墙,负载均衡模块会发挥作用(这里先略过)。

最后路由模块会完成最终的下发流表操作,这里看Forwarding模块中的processPacketInMessage()。

会从packet中得到相应的源目设备实例IDevice,而后判断是否在同一个openflow island上,如果不在的话就

doFlood(sw, pi, cntx),这里主要看二者在同一个island的情况。然后得到每个设备的AttachmentPoints,

然后找到二者能够连通的粘合点,接下来得到路劲,最后构造flow_mod消息,写入通道,下发给SW。

Floodlight下发流表过程分析

时间: 2024-10-12 05:11:39

Floodlight下发流表过程分析的相关文章

SDNLAB技术分享(四):利用ODL下发流表创建VxLAN网络

邓晓涛,当前就职于江苏省未来网络创新研究院,是CDN团队的一名研发人员,主要从事SDN相关的研发相关工作.曾就职于三星电子于先行解决方案研发组任高级工程师.思科系统于云协作应用技术部(CCATG)任工程师.-----------------------------------------------------------------------------------------------------[分享正文]今天想跟大家分享如何通过ODL控制器下发流表来创建VxLAN网络.ODL作为当前

sdn下发流表

1.首先我创建了简单的拓扑,深度为2,扇面为2. 1 1 mn --controller remote --topo tree,fanout=3,depth=2 2.使用 1 net 来查看网络的连接情况.如下所示: 3. 1 dpctl dump-flows 1 该命令可以用来查看所有节点的信息. 但是还有一种看个别交换机的流表信息. 1 sh ovs-ofctl dump-flows s1 4. 1 xterm s1 可以打开一个黑色框框,一个小终端吧. 5.刚打开的拓扑,actions字段

ryu的RESTAPI简介——我主要用于下发和查看流表

一.Rest API简介 REST即表述性状态传递(RepreSentational State Transfer),是一种针对网络应用的设计和开发方式,可以降低开发的复杂性,提高系统的可伸缩性. 表述性状态转移是一组构架约束条件和原则,满足这些约束和原则的应用程序或设计就是RESTful,REST是设计风格而不是标准,它通常基于使用HTTP,URI,XML以及HTML这些现有的广泛流行的协议和标准. REST定义了一组体系构架原则,可以根据这些原则设计以系统资源为中心的Web服务,包括使用不同

Openflow流表应用测试--逻辑隔离

1.搭建拓扑 搭建了三层的二叉树结构网络,开启SimpleSwitch3.py无法完成pingall联通测试,于是将拓扑结构更改为简单的line,四个交换机(OF13)连成一线,每个交换机下挂两个主机,依次h1--h8 s1 = net.addSwitch('s1', cls=OVSKernelSwitch, protocols='OpenFlow13', mac='00:00:00:00:00:11')    s2 = net.addSwitch('s2', cls=OVSKernelSwit

Open vSwitch流表应用实战

写在前面 本随笔参考 学会了如何下发流表及删除流表的操作. 第一个不用脚本的实验. 实验原理 在SDN环境下,当交换机收到一个数据包并且交换机中没有与该数据包匹配的流表项时,交换机将此数据包发送给控制器,由控制器决策数据包如何处理. 控制器下发决策后,交换机根据控制器下发的信息来进行数据包的处理,即转发或者丢弃该数据包.我们可以通过对流表操作来控制交换机的转发行为. 实验任务 Mininet创建一个默认树形拓扑. 选择Mininet的控制器指定为ODL,进行基本的添加.删除流表操作,使网络实现网

OpenvSwitch 流表转换

推荐看一下这篇文章,讲述了各个流表,我们这里着重讲流程和代码,对流表不再细说. 我们主要的关注点还是OVS-DPDK的流表转换,其实和OVS的转换差不多,只不过OVS的Datapath流表位于kernel,报文在Datapath找不到流表即通过netlink上传到Userspace,而OVS-DPDK则是Datapath流表依然位于Userspace,可以看做是一个缓存.查找不到的话直接继续调用其他接口查找Userspace的流表. controller会根据网络情况给ovs下发流表,或者命令o

openflow流表项中有关ip掩码的匹配的问题(控制器为ryu)

一.写在前面 唉,被分配到sdn安全方向,顶不住,顶不住,感觉搞不出来什么有搞头的东西.可若是让我水水的应付,我想我也是做不到的,世上无难事只怕有心人.好了,进入正题,本次要讨论的时一个比较细节的东西,在流表项中的有关ip掩码的问题.对了,本文适合于,有一定基础的openflow使用者,一点点就行. 二.问题描述 若不是机缘巧合,我甚至完全不会注意到这个问题,为什么,咱来看一个平时实验环境中最为常见的流表项长啥样,如图1                                      

Floodlight中的临时流表

运行Floodlight,在Mininet中新建一个拓扑之后,并未添加相关的流表项,但是主机之间却可以相互通信.执行pingall操作,任意两个主机之间都能通.相当于没有任何路由表的路由器,它是怎么让这些网络中的主机通信的呢? 原因在于Floodlight默认启用了Forwarding模块.说这个模块之前,首先说说Floodlight 中流表的两种添加方式:主动式和反应式. 官网上的文档是这么说的:http://docs.projectfloodlight.org/display/floodli

OVS流表查询过程分析

OVS中流表操作的理解关键在于这里哈希表的实现,引入的 flex_array方便了内存的管理,通过 hash&(桶数-1)可以随机的将一个元素定位到某一个桶中. 接下来是代码细节. 一. 核心数据结构 //流表 struct flow_table{ struct flex_array * buckets; //具体的流表项 unsigned int count , n_buckets ; // struct rcu_head rcu; int node_ver; //node_ver的存在使得我