从某位大牛的微博上看到了对opencontrail的评价,引起了我的兴趣,点开有人为其翻译的中文文档学习了下,把之前一些零碎的东西,比较系统性地串起来了,感觉很爽,所以决定把src下下来八一八。

下载了contrail-vrouter的代码,因为刚好在做底层类似的东西,可以对比学习下,contrail-controller的代码,暂时没时间研究了,留着闲了再说。

1. 先从数据结构上分析, 它里面都是基于vr_packet来做,对于linux而言就是在skb->cb里面存了一个结构,并把skb->head等信息存进去,后面所以的处理都是基于packet,最后发送的时候再转成skb,跟我们的想法类似,我们直接就define skb xxxx,这样就很好滴解决网络包结构异构的问题。

2. 有比较完整的库,从写法上来看,是做了很多库封装的事情,跨各种平台(freebsd),各种协议(mpls,vxlan,gre),有点dpdk的感觉, 包括里面也自己对于内存分配进行了管理

3. 在dataplane上的一些处理,跟ovs类似,有flowtable,action,并且也是从用户态下发action。

4. 整个dataplane做的非常灵活,完全是基于决策来做事情的,比如所action= hold, 那么用户会把flow enqueue进去,等到用户态一个命令下来,就会flush flow,这样可以用在action invalid的时候,先hold再更新保证事务,还有arp的请求,可以用户配置成proxy模式,这样就会自动进行回复,还有下一条设置成mpls, vxlan等各种类型,这样包可以随时在mpls或者vxlan之间进行网络切换,可以用于网络的升级,正好可以解决我们现在面对的网络架构升级问题。

5. 代码主要分为几层,第一层host,这里面首先是一些通用的host上的操作(vr_host_interface_ops),具体的方法是调用freebsd和linux里面的实现,剩下的逻辑就是包在host上的处理,如把包从udp socket上收上来,传给dataplane(入口为vif_rx), 或者把内层包从udp socket发出去了。第二层就是dataplane,里面就是内层包的处理逻辑,根据nexthop,解封相应的隧道头,并把包发给相应的interface处理。 这里的nexthop的结构相比linux kernel要复杂很多,包括了各种flag, tunnel type 还有arp proxy,里面ip forward的查找是基于4层lpm计算的,arp的逻辑主要在vr_get_proxy_mac

6. 针对linux bridge, host上面的hook点在br_handle_frame_hook, openvswitch_handle_frame_hook,看来大家都想到一块去了。

7. 由于它有个做决策的用户态进程,所以复杂的业务逻辑都可以转交给上层进行解析处理,并下发决策,目前看它支持的trap类型有AGENT_TRAP_FLOW_MISS, AGENT_TRAP_ECMP_RESOLVE, AGENT_TRAP_SOURCE_MISMATCH,AGENT_TRAP_DIAG,AGENT_TRAP_HANDLE_DF,AGENT_TRAP_ARP

8. 它里面支持mirror,这个功能对于线上排查问题来说,非常好用啊。

收包路劲的分析

1.. 先从vm的入包流程分析,host.hif_udp_rx -> vm_rx->vr_virtual_input->先查表,vr_flow_forward 如果失败则 vr_bridge_input ->nh_output->nh_l2_rcv->如果是arp的包,vr_arp_input, ip的包则vr_l3_input

2.. 如果是arp的请求包,配置了arp proxy则构造一个reply包,用proxy的mac进行回复,又重新调用vr_bridge_input发送出去,如果是xconnect, 则调用bridge的vif tx发送,最终发给vm。

3.. 如果是arp的响应包,从外面收到的arp reply,先xconnected,通过bridge的vif tx发送到vm,并且必须trap到用户态的agent

4. 如果是ipv4包的话,vr_ip_input->先进行vr_flow_forward,如果失败则vr_forward->vr_inet_route_lookup 进行路由查找,找到下一跳和下一跳的dev,调用nh_output,把包发给相应的vm的收包函数

关于发包路径,及 multicast, ecmp, ipfragment, flow entry的细节还待研究

opencontrail学习(一)相关推荐

  1. [转]OpenContrail 体系架构文档

    OpenContrail 体系架构文档 英文原文:http://opencontrail.org/opencontrail-architecture-documentation/ 翻译者:@KkBLu ...

  2. SDN学习四——必须强调,目前所写内容发行时间是2014年

    目录 一.东西向接口协议--东西桥 EAST-WEST BRIDGE 二.SDN数据平面 2.1 数据平面架构 2.2 SDN芯片 2.3 SDN硬件交换机 2.4 SDN软件交换机 2.4.1 op ...

  3. OpenContrail 体系(一)

    1 Overview of OpenContrail 本章节介绍OpenContrail系统-一个SDN的扩展平台 所有主要内容在本章中都有简略介绍,详细内容会在后续章节中继续描述 1.1 使用案例 ...

  4. java入门 慕路径,Java入门基础知识总结学习教程大全【必看经典】

    类型的表达式,是循环条件,表达式3是党执行了一遍循环之后,修改控制循环的变量值. ??? for语句的执行过程是这样的:首先计算表达式1,完成必要的初始化工作:然后判断表达式2的值,如果表达式的值为t ...

  5. Java EE学习心得

    –Java EE学习心得   1.    称为编程专家的秘诀是: 思考-----编程--------思考------编程--.. 编程不能一步到位,不能一上来就编,必须先思考如何写,怎样写?然后再编程 ...

  6. FastAI 2019课程学习笔记 lesson 2:自行获取数据并创建分类器

    文章目录 数据获取 google_images_download 的安装和使用 挂载google 个人硬盘到Google colab中 删除不能打开文件 创建ImageDataBunch 训练模型 解 ...

  7. FastAI 课程学习笔记 lesson 1:宠物图片分类

    文章目录 代码解析 神奇的"%" 导入fastAI 库 下载解压数据集 untar_data 获取帮助文档 help() ? ?? doc 设置路径 get_image_files ...

  8. 深度学习学习指南-工具篇

    colab Colab是由Google提供的云计算服务,通过它可以让开发者很方便的使用google的免费资源(CPU.GPU.TPU)来训练自己的模型. 学习经验总结 如何使用命令行? 通过!+cmd ...

  9. Redis学习之路(一)--下载安装redis

    redis学习之路--下载安装redis windows安装redis 1.下载redis 2.安装 3.查看是否安装成功 windows安装redis 1.下载redis 网址:https://gi ...

  10. python内置库之学习configparser库(一)

    python内置库之学习configparser库(一) 1.引言 ini文件简介 [节] 键=值 注:节不能重复出现 2.自己封装了一个增删改查的类,可以参考一下 import configpars ...

最新文章

  1. onnx模型部署(一) ONNXRuntime
  2. android 骨架屏刷新动画,ios - 原生骨架屏,网络加载过渡动画的封装
  3. c语言strchr的用法,C 库函数 - strchr()
  4. org.springframework.web.servlet.PageNotFound - No mapping found for HTTP request with URI
  5. java生成pdf_JAVA 生成PDF 并导出
  6. 修改win10我的文档下载等移动别处
  7. NCRE四级网络工程师考题详解----三级索引结构
  8. Linux下通过 rm -f 删除大量文件时报错:Argument list too long
  9. 手动写一个上传图片的组件,不适用插件,包括限制图片大小,格式
  10. 计算机类核心期刊投稿的一些资料汇总
  11. [面试系列]牛客网前端社招面试
  12. mtk 软件下载过程
  13. 济宁市计算机技能大赛,【嘉职动态】2019年济宁市职业院校技能大赛嘉祥职业中专赛区圆满完成任务...
  14. Elasticsearch5.0 安装 以及 问题集锦
  15. LGWR waits for event ‘DLM cross inst call completion’ 故障排除
  16. 如何使用装饰设计模式读取指定路径下的纯文本文件的实现代码
  17. BlueHost独立服务器受站长欢迎的原因
  18. APICloud的特性
  19. 一款方便好用的免费截图神器
  20. 彩色复古装饰麻绳-----四色麻绳

热门文章

  1. Imu_heading源码阅读(一)——common.h
  2. hi3519开发流程
  3. html怎么填充单元格颜色,PPT表格单元格怎么填充颜色 PPT填充表格单元格颜色的详细教程...
  4. 一套完整的测试应该由五个阶段组成
  5. linux设置家目录,usermod更改用户家目录
  6. 如何写出布局好看而且漂亮的博客
  7. win10台式机,耳机插入没有声音
  8. 大连最快的dns服务器设置,大连联通50m宽带,本地dns
  9. 2019各个省会城市全新DNS大全一
  10. 博主已开启评论精选什么意思_什么叫独立站?