
OpenvSwitch
文章平均质量分 68
majieyue
这个作者很懒,什么都没留下…
展开
-
STT协议解析
STT协议全称是Stateless Transport Tunneling Protocol,是nicira.com给ietf提交的一个隧道协议的drafthttp://tools.ietf.org/html/draft-davie-stt-01STT是一种mac over ip的协议,和vxlan, nvgre类似,都是把二层的帧封装在一个ip报文的payload中,在ip报文的原创 2012-09-04 15:11:02 · 9167 阅读 · 0 评论 -
ovs vswitchd的启动分析
ovs vswitchd的启动vswitchd启动代码可参考ovs-vswitchd.c的main函数,其中最重要的两个函数是bridge_run以及netdev_runbridge_runvoid bridge_run() { ... /* Initialize the ofproto library. This only needs to run once, but原创 2016-10-18 01:20:08 · 5522 阅读 · 0 评论 -
ovs的upcall及ofproto-dpif处理细节
无论是内核态datapath还是基于dpdk的用户态datapath,当flow table查不到之后都会进入upcall的处理(我喜欢管这条路径叫做慢速路径,那么datapath里就是快速路径啦~~)原创 2016-10-24 03:04:15 · 6765 阅读 · 0 评论 -
ovs的netdev, ofproto以及dpif etc.
How to Port Open vSwitch to New Software or Hardware====================================================Open vSwitch (OVS) is intended to be easily ported to new software andhardware platforms. T原创 2016-10-10 02:08:11 · 7454 阅读 · 0 评论 -
open vswitch研究:utility
streamstruct pstream { const struct pstream_class *class; char *name;};pstream_class是一个类似的接口类,其实现根据底层socket的不同(unix domain socket, tcp socket, ssl socket)而不同,p表示passive,其接口定义如下,原创 2012-11-25 21:53:30 · 4386 阅读 · 0 评论 -
open vswitch研究:基本数据结构
hmap/* A hash map. */struct hmap { struct hmap_node **buckets; /* Must point to 'one' iff 'mask' == 0. */ struct hmap_node *one; size_t mask; size_t n;};/* A hash map nod原创 2012-11-19 19:02:27 · 5150 阅读 · 3 评论 -
open vswitch研究:vswitchd
vswitchd是用户态的daemon进程,其核心是执行ofproto的逻辑。我们知道ovs是遵从openflow交换机的规范实现的,就拿二层包转发为例,传统交换机(包括Linux bridge的实现)是通过查找cam表,找到dst mac对应的port;而open vswitch的实现则是根据入包skb,查找是否有对应的flow。如果有flow,说明这个skb不是流的第一个包了,那么可以在flo原创 2012-11-13 14:02:52 · 11050 阅读 · 2 评论 -
open vswitch研究:datapath
struct vport是OVS的设备结构,个人认为非常类似于kernel里的netdev结构/** * struct vport - one port within a datapath * @rcu: RCU callback head for deferred destruction. * @port_no: Index into @dp's @ports array.原创 2012-09-26 18:32:26 · 6651 阅读 · 0 评论 -
open vswitch研究: ovsdb
ovsdb/SPEC文件定义了ovsdb的表规范,创建一个db时,需要预先准备好一个schema文件,该文件是一个JSON格式的字符串,定义了db名字,包含的所有表;每张表都包含一个columns的JSON dict,通过这个schema文件(e.g. vswitchd/vswitch.ovsschema)来创建一个db file。因此ovsdb实际是个文件数据库(为啥不直接用sqlite,还要自原创 2012-11-26 19:40:59 · 20884 阅读 · 2 评论 -
open vswitch研究: action
ovs的action,都是预定义好的行为,也可以用nlattr结构来定义,enum ovs_action_attr { OVS_ACTION_ATTR_UNSPEC, OVS_ACTION_ATTR_OUTPUT, /* u32 port number. */ OVS_ACTION_ATTR_USERSPACE, /* Nested OVS_US原创 2012-10-17 16:53:37 · 6886 阅读 · 0 评论 -
open vswitch研究:openflow I
关于openflow的规范不是本文讨论范畴,这篇主要讨论OVS对openflow的支持,代码基本都在ofproto/目录下struct ofproto代表了一个openflow switch的模型,是一个"接口类"struct ofproto { struct hmap_node hmap_node; /* In global 'all_ofprotos' hmap. */原创 2012-11-03 23:18:40 · 9694 阅读 · 0 评论 -
open vswitch研究:ovs的安装和使用
通过git clone git://openvswitch.org/openvswitch下载ovs代码到本地,运行boot.sh,如果遇到提示autoconf版本过低,可以去找最新的autoconf m4等rpm包安装或者通过yum update更新,也可以去下一个较新的包自己装下,e.g. http://ftp.gnu.org/gnu/autoconf/autoconf-2.69.原创 2012-08-28 21:08:36 · 47893 阅读 · 6 评论 -
open vswitch研究:flow
struct sw_flow_key 用来唯一定义一个flow,该结构相当复杂,请参考源码sw_flow_key分为四部分,分别代表switch, L2, L3, L4的profileswitch的profile是一个struct phy结构,包括了tunnel ID, priority, input switch port;ethernet的profile是一个struct eth结构,原创 2012-10-16 20:34:44 · 5840 阅读 · 1 评论 -
OVS datapath流表结构及匹配过程
datapath流表的查找函数是ovs_flow_tbl_lookup_stats,在此之前,先看下datapath组织流表的方式。 最新2.6的ovs流表,已经不是最早单纯的精确匹配了,而是一种精确匹配+带掩码匹配合并在一起的方式,叫做megaflow,目的是减少datapath里精确流表的条目数。但在我看来,这种方式只是在yy,在大规模生产环境下,不会因为用了megaflow精确流表就会变得可原创 2016-11-01 01:39:11 · 8604 阅读 · 0 评论