- 博客(17)
- 收藏
- 关注
原创 【OVS2.5.0源码分析】datapath之主流程分析
网络报文到达主机后,最终会到达协议栈的netif_receive_skb函数,该函数会通过设备对象的rx_handler函数把报文交给OVS处理。 而该rx_handler函数其实就是OVS 定义的netdev_frame_hook函数,本篇内容就是从netdev_frame_hook函数开始,分析报文在datapath中的整个主处理过程。1、netdev_frame_hook函数该函数为
2016-08-31 20:46:41 2818
原创 【OVS2.5.0源码分析】ovsd进程运行机制分析(1)
ovsd作为ovs的用户态管理主进程,负责处理ovs-vsctl命令接口、ovs-ofctl命令接口、与controller交互等等。 本篇分析它的整个处理机制。1、main函数 bridge_init(remote); free(remote); exiting = false; while (!exiting) { //while循环,直到退出
2016-08-30 22:03:37 2842
原创 【Linux】TCP socket编程
OVS的of连接中使用了linux socket的能力,分析linux socket的实现有助于理解of连接实现。socket是一个文件句柄,具有open/send/receive/close等功能,提供socket功能有由于简化网络编程,开发者可以不必关注网络协议细节。1、TCP类型socketserver端必须指定IP+协议+PORT,而client端口可以指定也可以自动生成(在c
2016-08-28 20:49:43 715
原创 【OVS2.5.0源码分析】openflow连接实现分析(6)
上两篇分析了ofservice的建立,请求处理的过程,本篇分析ovs-ofctl命令行是如何和 ofservice交互的。1、mian函数intmain(int argc, char *argv[]){ struct ovs_cmdl_context ctx = { .argc = 0, }; set_program_name(argv[0]); ser
2016-08-28 16:56:34 1379
原创 【OVS2.5.0源码分析】openflow连接实现分析(5)
上一篇分析了ofservice创建过程,本篇将分析ofservice处理请求的过程,ofservice处理请求的过程也是在connmgr_run函数。1、connmgr_run函数voidconnmgr_run(struct connmgr *mgr, void (*handle_openflow)(struct ofconn *,
2016-08-28 15:21:41 1037
原创 【OVS2.5.0源码分析】openflow连接实现分析(4)
前面几篇介绍controller的连接,这篇分析ofservice的创建过程,直接从bridge_configure_remotes函数开始分析。1、bridge_configure_remotes函数 n_controllers = bridge_get_controllers(br, &controllers); ocs = xmalloc((n_controlle
2016-08-28 10:39:35 1075
原创 【OVS2.5.0源码分析】openflow连接实现分析(3)
上两篇分析了controller连接建立的完整流程,本篇分析下接收openflow报文的过程,openflow报文的处理在后续文章中分析。 整个调用过程,可以根据上一篇的对象关系图得出,本篇只是把调用关系细化到函数。1、connmgr_run函数 if (mgr->in_band) { if (!in_band_run(mgr->in_band)) {
2016-08-28 08:07:22 1831
原创 【OVS2.5.0源码分析】openflow连接实现分析(2)
上回调用到vconn_stream_open函数,没有进一步分析,今天继续往下看,确定controller连接的整个过程。9、stream_open_with_default_port函数/* Like stream_open(), but the port defaults to 'default_port' if no port * number is given. */ints
2016-08-28 07:34:34 1325 1
原创 【OVS2.5.0源码分析】openflow连接实现分析(1)
openflow连接有两个用途: 1)与controller连接;2)提供给ovs-ofctl工具配置流表等。我们先看连接的初始化过程,配置入口是bridge_reconfigure函数。1、bridge_reconfigure函数 collect_in_band_managers(ovs_cfg, &managers, &n_managers); //收集配置的m
2016-08-25 22:36:03 2200
原创 【OVS2.5.0源码分析】mirror实现原理(2)
OVS实现mirror功能时,限制了out端口的通信能力。1、限制mirror out端口通信总结xlate_normal_flood函数static voidxlate_normal_flood(struct xlate_ctx *ctx, struct xbundle *in_xbundle, uint16_t vlan){ str
2016-08-17 23:37:52 1823
原创 【OVS2.5.0源码分析】mirror实现原理(1)
端口镜像是交换机的标准功能之一,针对某个端口的报文拷贝到除真实目的之外的另外一个目的地(output),这一篇我们先分析配置mirror之后,如何生成流表,在什么阶段生成流表。1、xlate_actions函数 mirror_ingress_packet(&ctx); //生成满足入端口的流表生成,即进入该端口的报文会被镜像到其他目的地。
2016-08-17 23:11:31 2029
原创 【OVS2.5.0源码分析】vlan&trunk实现原理分析(2)
梳理OVS交换和传统交换机的差异,从整体上看行为上略有差异。1、OVS交换机2、传统交换机
2016-08-15 23:39:28 1002
原创 【OVS2.5.0源码分析】vlan&trunk实现原理分析(1)
传统交换机的端口可以按照vlan可以划分为access、trunk和hybrid三类接口。 首先,我们先看OVS的VLAN实现原理,最后对比OVS与传统交换机的差异。OVS中,数据面的转发流表都是从用户态下发的,所以流表生成的入口是upcall_actions函数(该函数不是upcall的总入口,由于层次比较多,以该函数作为分析的入口是合适的)。1、xlate_actions函数
2016-08-14 23:10:37 3553 3
原创 【OVS2.5.0源码分析】ofpbuf数据结构分析
OVS中ofpbuf结构体应用较多,例如action保存等,其本质是支持数据自动伸缩的连续内存。1、数据结构定义struct ofpbuf { void *base; /* First byte of allocated space. */ void *data; /* First byte actually
2016-08-11 22:15:08 1049
原创 【OVS2.5.0源码分析】normal action精确流表生成和刷新过程分析
一、首包精确流表生成首包到达OVS交换机时,尚未建立基于目的mac的流表规则,需要upcall到用户态进行学习,此时生成的规则是把报文flood到其他端口。1、upcall_xlate函数 upcall->dump_seq = seq_read(udpif->dump_seq); upcall->reval_seq = seq_read(udpif->reval_seq)
2016-08-11 21:40:44 5762
原创 【OVS2.5.0源码分析】enqueue action精确流表生成过程分析
1、xlate_actions函数 openflow流表匹配完成后,调用do_xlate_actions函数把openflow action转化为精确流表的action;2、do_xlate_actions函数 case OFPACT_ENQUEUE: memset(&wc->masks.skb_priority, 0xff,
2016-08-10 21:04:24 3004 5
原创 【OVS2.5.0源码分析】bridge&bundle&port分析(1)
一、按照用途划分,openvswitch中桥、端口大致可以分成如下几类: 1、配置管理 主要对象包括:bridge、port、interface。 2、openflow 主要对象包括:ofproto、ofproto_dpif、ofbundle、ofport、ofport_dpif。 3、端口镜像 主要对象包括:mbridge、mbundle。
2016-08-10 20:39:13 1943
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人