【OpenVswitch源码分析之二】架构

OpenVswitch架构概览

OpenVswitch Architecture
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 Database Schema
从OVSDB的数据库结构可以看出网桥是支持SFlow,QoS, Mirror等可视化和调优功能,OVSDB对外提供Json RPC接口,提供CURD接口供客户端对数据库进行操作。

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设备的创建,销毁,打开,关闭等一系列操作。

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值