![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
SDN研究
文章平均质量分 67
vonzhou
这个作者很懒,什么都没留下…
展开
-
OVS 响应 OFPT_SET_CONFIG 过程分析
ovs 对于 OFPT_SET_CONFIG消息的处理过程非常简单,其实就是通过TCP协议(或其它)交换了几个整型值,而且交换机不需要对此消息进行回复;只需要解析出消息体(struct ofp_switch_config)然后设置max miss len 即可。通过分析Floodlight发送它的过程 和 OVS 处理它的过程,我们可以对openflow协议有更好的理解。下面是代码流程:原创 2014-07-16 10:46:06 · 2434 阅读 · 1 评论 -
Floodlight之 FloodlightContextStore 数据结构
FloodlightContextStore 代表的是一种缓存模型(利用的是ConcurrentHashMap),里面存储的是上下文相关的对象,能够根据相应的key得到具体的 Object,存在的意义是Floodlight中注册监听某个事件的listener可以在被调用的时候直接从中取出上下文信息(context information)。下面是重要的代码片段.基本数据结构:pub原创 2014-06-23 19:04:37 · 1596 阅读 · 0 评论 -
从PACKET_IN消息中得到packet data
在Floodlight模块中如果想得到packet in消息,就对相应的消息类型进行监听即可,然后在receive方法中就可以操纵这个上传上来的packet_in。 关键代码: Ethernet eth = IFloodlightProviderService.bcStore.get(cntx,原创 2014-06-16 10:58:25 · 6333 阅读 · 4 评论 -
Floodlight中 处理packetin消息的顺序(2)
前面通过阅读代码知道了如何判断各个模块处理某个消息的先后顺序,那么内部是如何实现的呢? 每当一个模块表示对一个消息感兴趣的时候,就会调用IFloodlightProviderService(具体有Controller类实现)的addOFMessageListener方法进行注册订阅,核心工作是由 ListenerDispatcher类来完成:1)每次增加一个观察者的时候都会判断其是否是原创 2014-06-25 16:57:20 · 1856 阅读 · 0 评论 -
Floodlight 中创建消息对象的方法
在 floodlight 中创建各种openflow message 和 action 等采用的是简单工厂方式,BasicFactory类(实现OFMessageFactory接口,)会根据消息的类型创建不同的对象,达到更好的封装效果;此外这里调用的是枚举类型的方法。下面是具体代码:----------工厂接口,还有OFActionFactory,约束需要具体工厂完成的事情原创 2014-07-01 09:53:51 · 1798 阅读 · 0 评论 -
Floodlight Controller 路由原理
SDN的出现可以使得各种复杂的路由协议从原本的Device OS中剥离出来,放在SDN Controller中,Controller用一种简单的协议来和所有的Router进行通信,就可以获得网络拓扑,从而计算路由,有更好的可扩展性(scalable,而不会出现Full-Mesh)。Floodlight 中路由的原理利用的是LLDP这个协议,当第一个OF SW连接过来的时候,Controller原创 2014-07-21 21:02:00 · 2974 阅读 · 0 评论 -
LLDP报文格式
前面已经知道了Floodlight Controller是通过从SW发送LLDP帧来获得链路信息的,链路层发现协议(L2)是通过在本地网络中广播LLDP报文来通告自己的设备信息,从而服务于拓扑计算,(wikipedia:LLDP information is sent by devices from each of their interfaces at a fixed interval, i原创 2014-07-23 11:27:29 · 8715 阅读 · 0 评论 -
OFMessageDecoder 分析
OFMessageDecoder 继承了抽象类 FrameDecoder。FrameDecoder 会将接收到的ChannelBuffers 转换成有意义的 frame 对象,在基于流的传输过程中,通常会发生分片和重组的情况,所以就需要一个解码器,根据特定协议的约束,将收到的包理解为相应的,易于应用逻辑层处理的对象。这里调用的是 BasicFactory 的 parseMe原创 2014-06-23 20:18:14 · 1378 阅读 · 0 评论 -
对openflow 1.0协议的扩展
通过这几天对openvswitch代码的分析,以及项目的需要,需要对openflow 1.0进行一定的扩展,发现网上没有这方面的教程,虽然在搞懂ovs代码架构,floodlight controller中利用的事件驱动模型之后,会觉得并不是难事,但是对于刚入门SDN的同学来说,需要一番折腾,这里简单记录一下,希望帮助到其他人。 环境配置:2host + 1 OVS + floodlight原创 2014-06-06 17:03:34 · 2915 阅读 · 4 评论 -
ovs处理openflow消息的流程
ovs处理openflow消息的流程原创 2014-06-07 14:23:50 · 4532 阅读 · 0 评论 -
OVS 发送OFPT_PORT_STATUS 过程
根据openflow协议,当一个物理端口从ovs datapath 增加,修改或者删除的时候,都会通过ofp_port_status异步消息告知Controller,比如当我们执行 ovs-vsctl add-port br0 eth0 之类的命令后,就会更新ovsdb数据库,而后全局变量 reconfiguring 变为true,从而会重新配置这个ovs。if (reconfig原创 2014-08-24 10:09:57 · 4599 阅读 · 0 评论 -
用户空间发送flow,packet操作告知内核处理过程
用户空间从flow_miss_ops分门别类构造nla告知内核中相应的genl family。接下来分别调用对应的处理函数对流表进行添加删除操作,同时发送通知消息。内核层响应用户空间下发来的流表以及packet操作。原创 2014-03-10 20:32:07 · 3589 阅读 · 1 评论 -
在POX中操作数据包
在POX中操作数据包标签(空格分隔): 博客 SDN想在SDN控制器中做点事情,必须要能够解析上来的packet,在POX中利用pox.lib.packet中的组件很方便,重点是熟悉各个协议的字段。POX文档 POX Wiki 相对比较完善,值得好好看看。各个协议类继承了packet_base, 里面的find 方法很实用,在解析packet的时候, find(‘protocol’)就会解析得到对应原创 2015-12-01 19:01:32 · 1646 阅读 · 0 评论 -
Floodlight中 处理packetin消息的顺序(1)
当Controller和SW建立连接之后,就可以处理来自SW的各种OF msg。当接收到 packetin 消息之后,会将其分发给各个监听了这个OFMessage的listeners,所以如果我们要设计自己的控制器模块,只需要实现相应的接口方法,约定执行顺序即可。接口IListener 主要抽象了监听器模块的名字,执行顺序,接口IOFMessageListener则抽象了我们的Controller原创 2014-06-24 15:58:36 · 3548 阅读 · 0 评论 -
Floodlight 启动流程分析
1. 在Main中先是加载模块,启动REST服务,而后构建一个实现了IFloodlightProviderService接口的实例(即Controller)并运行;2. 接下来进入Controller的run()方法,此时所有的环境初始化工作已经完成,构建一个基于netty的TCP server,最重要的是流水线factory OpenflowPipelineFactory 的设置,里面是co原创 2014-06-23 10:52:48 · 2521 阅读 · 0 评论 -
Floodlight controller和OF SW交互流程图
原创 2014-06-24 15:53:37 · 1816 阅读 · 0 评论 -
向Java枚举类型中添加新方法
除了不能继承enum之外,可将其看做一个常规类。甚至可以有main方法。注意:必须先定义enum实例,实例的最后有一个分号。下面是一个例子:返回对实例自身的描述,而非默认的toString返回枚举实例的名字。public enum Color { RED("红色", 1), GREEN("绿色", 2), BLANK("白色", 3), YELLO("黄色", 4);原创 2014-06-17 10:30:52 · 6495 阅读 · 0 评论 -
OVS流表查询过程分析
OVS中流表操作的理解关键在于这里哈希表的实现,引入的 flex_array方便了内存的管理,通过 hash&(桶数-1)可以随机的将一个元素定位到某一个桶中。 接下来是代码细节。一. 核心数据结构//流表struct flow_table{ struct flex_array * buckets; //具体的流表项 unsigned原创 2014-06-30 15:54:46 · 9370 阅读 · 0 评论 -
OVS响应OFPT_FLOW_MOD过程分析
整理处理流程图:1. 通过对of msg进行解码,可以得到具体的flow_mod以及对应的actions,(这里看增加流表的情况),接下来add_flow函数就会根据flow_mod制定的流来构建特定的规则分类器,增加到oftable中。具体过程是:选择一个合适的表;构建一个分类规则(关键代码如下);插入。这样此次通信的任务就完成了,当再有packet因为在datapa原创 2014-06-09 14:05:42 · 4129 阅读 · 2 评论 -
对扩展openflow协议的一点思考
软件定义X变得越来越火,正所谓,Software is eating the world。软件定义网络也是如此,不论是在工业界还是学术界都将是一次伟大的革命,都在紧随着这个行业的方向,找自己的研究点,关注着标准化的进展。各种Controller,原型系统都相继出现,还有的是是做SDN 的Debug,安全,总之让这个生态系统变得更加健壮。虽然南向接口标准很多,但是openflow适合我们的学习,社区原创 2014-07-18 21:26:19 · 2322 阅读 · 1 评论 -
用户空间具体是如何处理dpif_upcall ?(1)构造flow_miss批量处理
通过前面的分析,现在用户空间拿到了自内核传上来的关于未能在内核得到匹配的packet的netlink message的信息,接下来批量处理这些upcalls。流程图如下: 这个模块可以分成三个阶段:1)由dpif_upcall得到flow_miss 集合,构造填充相应的字段;2);3)。处理upcall的数据结构有:flow_miss是将具原创 2014-03-08 10:19:46 · 2097 阅读 · 0 评论 -
用户空间具体是如何处理dpif_upcall ?(2)构造datapath actions
阶段一完成后会将upcall中的相应信息构造早flow_miss中,接下来批量处理,查找facet,如果没有找到的话就要根据ofproto_dpif->rule和flow_miss->flow来创建facet,然后为其构建subfacet,继而subfacet_make_actions会由subfacet->rule->ofpacts相关信息构造odp_actions,然后根据具体的openflo原创 2014-03-09 12:56:24 · 4506 阅读 · 0 评论 -
OVS处理upcall过程分析
处理upcall的整体框架是:1.由函数handle_upcalls()批量处理(in batches)的是由内核传上来的dpif_upcalls,会解析出upcall的类型。这里主要看在内核中匹配流表失败的MISS_UPCALL。处理完成后会得到多个flow_miss。结构体dpif_upcall代表的是由内核传到用户空间的一个包,包括上传原因,pac原创 2014-06-08 12:14:48 · 5828 阅读 · 0 评论 -
Open vSwitch datapath developer documentation
Open vSwitch datapath developer documentation=============================================The Open vSwitch kernel module allows flexible userspace control over flow-level packet processing on selec转载 2014-06-09 17:59:26 · 1277 阅读 · 0 评论 -
Floodlight 处理交换机加入/移除过程
Floodlight 使用的是Netty架构,在Controller.java 入口函数中显示创建ServerBootstrap,设置套接字选项,ChannelPipeline,此时监听套接字就准备好处理来自SW的各种消息;这里最核心的就是 OpenflowPipelineFactory ,会加入各个业务相关的Handler,代码如下: public ChannelPipeline原创 2014-07-22 15:39:28 · 2542 阅读 · 0 评论 -
Floodlight controller 线程池模型
官方文档对于ThreadPool的描述是:ThreadPool is a Floodlight module wrapper for a Java's ScheduledExecutorService. It can be used to have threads be run at specific times or periodically. 所以只要对并发编程有点基础,就很容易理解,它原创 2014-07-22 09:50:14 · 1916 阅读 · 0 评论 -
Floodlight下发流表过程分析
转载请注明出处:当一个packet到达openflow交换机,会进行流表的匹配,如果没有找到相应的流表项,就会发送一个packet_in消息到达SDN controller端,控制器根据一定的路由算法决策后,会向该路径上的所有交换机下发流表(也就是发送FLOW_MOD消息,里面有对应的action)。这里要知道的是在SDN的环境下,控制器具有全局拓扑信息,每当有链路状态改变时就会跟原创 2014-06-18 20:34:28 · 8709 阅读 · 6 评论 -
Floodlight 中 ChannelPipeline 结构图
1. IdleStateHandler 当Channel上没有执行相应的读写操作一定时间的时候出发一个 IdleStateEvent 事件;2. ReadTimeoutHandler 读超时处理;3. HandshakeTimeoutHandler 设置一个定时器检查连接的状态,握手阶段 ;4 . OFChannelHandler 核心,处理所有的业务。原创 2014-06-23 21:00:22 · 1933 阅读 · 0 评论 -
POX设置packet-in的miss_send_len
POX设置packet-in的miss_send_len在of_01.py中可以看到交换机和Controller建立连接时的信息流交互,互问hello,然后得到Switch的feature信息,而后Controller可以发送ofp_switch_cofig消息配置交换机,这个消息很简单,就是我们需要的 miss_send_len。POX中处理来自交换机的ofp_switch_features消息的原创 2015-12-09 21:00:26 · 1359 阅读 · 0 评论