【OpenVswitch源码分析之⼆】架构
gis在物流中的应用
OpenVswitch架构概览
Open vSwitch的架构和模块与传统的物理交换机是⼀⼀对应的,包括控制⾯和数据平台,只是传统的物理交换机通常使⽤NP芯⽚来进⾏转发,⽽Openvswitch使⽤Linux内核模块做数据平⾯。OpenVswitch包括三个核⼼模块:ovs-vswitchd,ovsdb-server以及内核模块openvswitch datapath。每个模块有不同的功能外高桥二期
ovs-vswitchd功能模块介绍
ovs-vswitchd是⼀个守护进程,在⽤户启动该组件不久其就会脱离控制终端,作为OVS的管理和控制进程对外提供服务,⼀⽅⾯它通过unix Socket和OVSDB通信,加载OVSDB内的配置信息,也能把设备信息更新到服务器中,这部分属于设备的配置管理能⼒。另⼀⽅⾯其内置了多个协议的⽀持,包括MAC Learning, LLDP, STP等,同时其⽀持和拉远的控制器建⽴Openflow连接,通过Openflow协议下发控制流表给内核模块。内核模块和OVS-Vswitchd通过Netlink进⾏通信,Netlink相较于其他的IPC通信⽅式,其⽀持双⼯,⽽且是异步通信,⽀持组播,另外可以⾃定义协议族。总⽽⾔之,Netlink是⼀个⾼效的内核态和⽤户态通信⽅式,同时其可扩展性也很好。 Ovsdb-server功能模块介绍
ovsdb-server是⼀个轻量级的数据库服务,主要保存了整个OVS的配置信息,包括接⼝,交换内容,VLAN等等。其数据库结构如图所⽰: 从OVSDB的数据库结构可以看出⽹桥是⽀持SFlow,QoS, Mirror等可视化和调优功能,OVSDB对外提供Json RPC接⼝,提供CURD接⼝供客户端对数据库进⾏操作。xiaoeni
openvswitch datapath
openvswitchd.ko是内核中负责vswitch的快转⾯,根据openflow流表转发,并接收ovs-vswitchd的配置,内核模块在初始化以及做Port binding时,会注册钩⼦函数,把端⼝的报⽂处理接管到内核模块。当Datapath出现table miss情况时会把报⽂送⼊队列供⽤户控件的vswitchd模块读取,在⽤户空间有slow path的exact table的精确匹配与wildcard table的模糊匹配。⽽当Datapath配置了sflow时,也会将报⽂上送到控制⾯进⾏处理。
OpenVswitch 模块概述
| +-------------------+
| | ovs-vswitchd |<-->ovsdb-server
| +-------------------+
| | ofproto |<-->OpenFlow controllers
病案追踪
| +--------+-+--------+ _
| | netdev | |ofproto-| |
userspace | +--------+ | dpif | |
| | netdev | +--------+ |
| |provider| | dpif | |
| +---||---+ +--------+ |
| || | dpif | | implementation of
| || |provider| | ofproto provider
|_ || +---||---+ |
努西达|| || |
_ +---||-----+---||---+ |
| | |datapath| |
kernel | | +--------+ _|
| | |
|_ +--------||---------+
||
physical
NIC
资本资产定价模型
从上图可以看出vswitchd本⾝是分层的结构,最上⾯的daemon层主要⽤于和ovsdb通信,做配置的下发和更新等,中间是ofproto
层,ofproto是交换机的控制平⾯实现,通过该模块可以和外界的SDN控制器建⽴Openflow通道,⽽在ofproto下层有两个插件,分别是ofproto provider和netdev,ofproto provider对接datapath,负责流表以及datapath的配置下发,以及报⽂上送等。在ovs的定义⾥,netdev代表了具体平台的设备实现,e.g. linux内核的net_device或者移植到交换机平台下的port等,struct netdev_class定义了netdev-provider的具体实现需要的接⼝,具体的平台实现需要⽀持这些统⼀的接⼝,从⽽完成netdev设备的创建,销毁,打开,关闭等⼀系列操作。