- 博客(7)
- 资源 (18)
- 收藏
- 关注
原创 openVswitch(OVS)源代码的分析技巧(哈希桶结构体为例)
于是在整个项目中进行搜索得,也可以理性的去分析下哪个函数会调用下面的flex_array申请函数,其实就是buckets内存申请函数(alloc_buckets)了;在该函数中有行代码为:buckets = flex_array_alloc(sizeof(struct hlist_head *),n_buckets, GFP_KERNEL); 至此已经找到了 element_size的含义了,即:哈希头指针的大小。那么就剩下total参数了。 继续往上个查找,看看哪个函数调用了alloc_bu
2014-09-25 21:37:01 5348
原创 openVswitch(OVS)源代码分析之工作流程(flow流表查询)
本文分析了openVswitch中的核心部分flow流表查询(flow_lookup),从流表查询的大体框架或者说理论开始一步一步的结合openVswitch中的数据结构图示(openVswitch的整体框架图)分析了flow查询步骤;最后又分析了openVswitch的源代码,以ovs_flow_lookup()函数为主线,一层一层深入的分析了流表查询的源代码实现。根据这个指针遍历整个流表项节点元素(就是struct sw_flow结构体元素),每遍历得到一个流表项sw_flow结构体元素,就把流表项中
2014-09-23 21:03:35 15278 5
原创 openVswitch(OVS)源代码分析之工作流程(key值得提取)
我依然去简单分析key值得提取函数,有两个原因:第一、key值作为数据结构在openVswitch中是非常重要的,后期的一些流表查询和匹配都要用到key值;第二、想借机复习下内核网络协议栈的各层协议信息;
2014-09-22 20:53:40 6296 2
原创 openVswitch(OVS)源代码分析之工作流程(数据包处理)
在openVswitch中数据包的处理是其核心技术,该技术分为三部分来实现:第一、根据skb数据包提取相关信息封装成key值;第二、根据提取到key值和skb数据包进行流表的匹配;第三、根据匹配到的流表做相应的action操作(若没匹配到则调用函数往用户空间传递数据包)。函数为: void ovs_dp_process_received_packet(struct vport *p, struct sk_buff *skb);当接受到一个数据包后,自然而然的就应该是开始对其进行处理了。上篇的接受数据包函数:
2014-09-18 20:51:17 11242 14
原创 openVswitch(OVS)源代码分析之工作流程(收发数据包)
加载网卡时把网卡绑定到openVswitch端口上(ovs-vsctl add-port br0 eth0),绑定后每当有数据包过来时,都会调用该函数,把数据包传送给这个函数去处理。而不是像开始那样(未绑定前)把数据包往内核网络协议栈中发送,让内核协议栈去处理。openVswitch中数据包接受函数为:void ovs_vport_receive(struct vport *vport, struct sk_buff *skb);函数,该函数所在位置为:datapath/vport.c中。数据包进入open
2014-09-16 22:52:23 13806 7
原创 openVswitch(OVS)源代码分析之数据结构
记得Pascal之父、结构化程序设计的先驱Niklaus Wirth最著名的一本书,书名叫作《算法 + 数据结构 = 程序》。还有位传奇的软件工程师Frederick P. Brooks曾经说过:“给我看你的数据”。因此可见数据结构对于一个程序来说是多么的重要,如果你不了解程序中的数据结构,你根本就无法去理解整个程序的工作流程。所以在分析openVswitch(OVS)源代码之前先来了解下openVswitch中一些重要的数据结构,这将对你分析后面的源代码起着至关重要的作用。 下面是整个openVswit
2014-09-10 22:18:45 15879 7
原创 openVswitch(OVS)源代码分析之简介
云计算是个全世界的话题,所以也有全世界的能人异士来为实现这个云计算而奋斗。我现阶段遇到的有关云计算的技术就是openVswitch和docker技术。那就先从openVswitch开始介绍起,我会用一系列blog来分析openVswitch的相关数据结构和工作流程,以及各个重要模块的分析。所有的介绍都是基于源码的分析,希望对初学着有点用。 openVswitch,根据其名就可以知道这是一个开放的虚拟交换机(open virtual switch);它是实现网络虚拟化SDN的基础,它是在开源的Apache
2014-09-09 23:39:52 16917 9
嵌入式Linux之我行系列
2015-07-20
Oracle VM VirtualBox 桥接模式驱动
2015-03-10
软件开发电子书百宝箱
2014-08-11
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人