Open vSwitch
文章平均质量分 72
open vswitch
bob62856
这个作者很懒,什么都没留下…
展开
-
openvswitch 流表操作(四十八)
流表组成每条流表规则由一些列字段组成,可以分为基础字段、匹配字段和动作字段三部分。 在打印流表时,在流表中还存在一些显示字段,如duration,idle_age等,此处把这些字段也暂时归之于基础字段之中.流表组成部分字段说明基础字段cookie=value 流表标识字段,cookie字段有两种书写方式:cookie=value和cookie=value/mask。mask中对应位为1时cookie中值相应的位须严格匹配,为0时cookie中值对应的位通配,当mask为-1时,必须严格匹配cook转载 2021-05-13 11:41:14 · 5617 阅读 · 0 评论 -
OVS数据库操作(四十七)
说明[Record]就是行对应的_uuid[if-exists]当值不存在的是否会报错而不是返回False基本信息查询列举数据库# ovsdb-client list-dbsOpen_vSwitch列举数据库表# ovsdb-client list-tables [DB]### 列举数据库Open_vSwitch的所有表名# ovsdb-client list-tables Open_vSwitchTable-------------------------Cont转载 2021-05-13 11:25:44 · 896 阅读 · 0 评论 -
OVS对VXLAN解封包(二)
一、VxLAN 将二层数据帧封装为 UDP 包含义:Outer MAC destination address (MAC address of the tunnel endpoint VTEP)Outer MAC source address (MAC address of the tunnel source VTEP)Outer IP destination address (IP address of the tunnel endpoint VTEP)Outer IP source add转载 2021-04-28 22:25:44 · 1382 阅读 · 0 评论 -
OVS对VXLAN报文解封包
VXLAN的全称为Virtual eXtensible LAN,从名称看,它的目标就是扩展VLAN协议。802.1Q的VLAN TAG只占12位,只能提供4096个网络标识符。而在VXLAN中,标识符扩展到24位,能提供16777216个逻辑网络标识符,VXLAN的标识符称为VNI(VXLAN Network Identifier)。另外,VLAN只能应用在一个二层网络中,而VXLAN通过将原始二层以太网帧封装在IP协议包中,在IP基础网络之上构建overlay的逻辑大二层网络。我们来看具体协议包结构。V转载 2021-04-28 22:04:13 · 2308 阅读 · 1 评论 -
OVS datapath结构图(四十六)
原创 2021-01-24 20:21:17 · 661 阅读 · 0 评论 -
OVS搭建虚拟机全过程(四十五)
系统:ubuntu14.04.1内核:4.4.0Install OVS1. Download OVScd /usr/srcwget http://openvswitch.org/releases/openvswitch-2.6.6.tar.gztar -zxvf openvswitch-2.6.6.tar.gzexport OVS_DIR=/usr/src/openvswitch-2.6.62. Install OVS dependenciessudo apt-get updates原创 2020-11-24 16:27:12 · 1908 阅读 · 0 评论 -
OVS DPDK vhost-user搭建全过程(四十四)
Install DPDK1. Download DPDKcd /usr/src/wget http://fast.dpdk.org/rel/dpdk-16.07.2.tar.xztar xf dpdk-16.07.2.tar.xzexport DPDK_DIR=/usr/src/dpdk-stable-16.07.2cd $DPDK_DIR2. Configure and Install DPDK注意:以下有些操作DPDK提供了工具供使用者快捷配置,在dpdk/tools/dpdk-set原创 2020-11-10 16:45:29 · 2436 阅读 · 10 评论 -
OVS DPDK--virtqueue(十七)
虚拟队列(Virtqueue)是连接guest操作系统中virtio前端驱动和宿主机vhostuser后端驱动的实际数据链路。网络设备有 2 个 virtqueue,一个用于发送数据包,一个用于接收数据包。每个虚拟队列主要由三部分组成:描述符数组(descriptor table)用于存储一些关联的描述符,每个描述符都是一个对 buffer 的描述,包含一个address/length 的配对。可用的 ring(available ring)用于 guest 端表示那些描述符链当前是可用的。使用过转载 2020-07-01 00:50:56 · 620 阅读 · 0 评论 -
OVS DPDK vs OVS Deep Dive(十六)
背景OvS(Open vSwitch)是云计算平台的重要连接组件,为虚拟机提供网络连,被各大云平台,基础设施供应商广泛使用,比如OpenStack, OpenNebula。vSwitch–Virtual Switch(虚拟交换机),在云环境中扮演交换机的角色,连接VM之间、VM与物理机之间的通讯。互联网发展风起云涌,行业对网络速率的要求也是直线上升:10G -> 40G -> 100G… 传统的OvS因为性能限制很难跟上脚步。基于这个背景,Intel发布了开源项目DPDK,DPDK可以加速O转载 2020-06-28 15:38:35 · 1190 阅读 · 0 评论 -
OVS端口镜像(十五)
ovs中无法直接抓包分析,可以通过端口流量镜像的方式进行抓包端口流量镜像主要分为两步:创建mirror,指定mirror中的源端口,目的端口绑定mirror至bridge1、创建mirror指定mirror名称,name={name}指定流量:select-all: true,表示此bridge上的所有流量;select-dst-port: 镜像从此port离开的流量;select-src-port: 镜像从此port进入的流量;select-vlan: 镜像此VLAN下的数据流量转载 2020-06-27 14:14:03 · 3160 阅读 · 0 评论 -
OVS端口镜像(十四)
OVS上实现端口镜像的基本流程如下:创建mirror,在mirror中指定镜像数据源及镜像目的地将创建的mirror应用到bridge中镜像数据源可以通过下面几个选项来指定:select_all: 布尔值,设置为true时,进出该mirror所生效的bridge上的每个数据包都将被镜像select_dst_port: 从该port离开虚拟交换机的数据包将会被镜像,从Guest角度看是Guest网络接口的流入方向select_src_port: 从该port进入虚拟交换机的数据包将会被镜像,转载 2020-06-27 10:58:50 · 2619 阅读 · 0 评论 -
OVS DPDK vhost-user详解(十三)
vhost user协议的控制和数据通道所有的控制信息通过UNIX套接口(控制通道)交互。包括为进行直接内存访问而交换的内存映射信息,以及当数据填入virtio队列后需要出发的kick事件和中断信息。在Neutron中此UNIX套接口命名为vhuxxxxxxxx-xx;数据通道事实上由内存直接访问实现。客户机中的virtio-net驱动分配一部分内存用于virtio的队列。virtio标准定义了此队列的结构。QEMU通过控制通道将此部分内存的地址共享给OVS DPDK。DPDK自身映射一个相同标准的vi转载 2020-06-22 23:51:32 · 6188 阅读 · 0 评论 -
OVS DPDK vhost-user详解(十二)
在软件实现的网络I/O半虚拟化中,vhost-user在性能、灵活性和兼容性等方面达到了近乎完美的权衡。虽然它的提出已经过了四年多,也已经有了越来越多的新特性加入,但是万变不离其宗,那么今天就从整个vhost-user数据通路的建立过程,以及数据包传输流程等方面详细介绍下vhost-user架构,本文基于DPDK 17.11分析。vhost-user的最好实现在DPDK的vhost库里,该库包含了完整的virtio后端逻辑,可以直接在虚拟交换机中抽象成一个端口使用。在最主流的软件虚拟交换机OVS(open转载 2020-06-22 01:46:50 · 2073 阅读 · 0 评论 -
OVS DPDK vhost-user详解(十一)
这篇文章是对vhost-user / virtio-pmd架构的深入技术研究,该架构针对基于DPDK的高性能用户空间网络,面向所有有兴趣了解这些基本细节的架构师和开发人员。介绍本文将在读者熟悉vhost-net架构的基础上展示使用vhost-net协议将网络处理从qemu移出并移入内核驱动程序的好处。在本文中,我们将更进一步,展示如何在客户机和主机上使用DPDK(数据平面开发包)将数据平面从内核中移出,并移入用户空间来提高网络性能使用。为实现此目标,我们还将详细研究vhost协议的新实现:vhost-u转载 2020-06-21 21:45:39 · 1749 阅读 · 0 评论 -
OVS 端口抽象层次(四十)
struct vport抽象的是OVS中datapath层的每个端口,通过它将ovs中的各种数据结构与Port关联起来,而结构体netdev_vport 就是vport和底层真实网络设备结构net_device的入口,关键数据结构如下:struct vport { struct rcu_head rcu; //RCU callback head for deferred destruction. u16 port_no; //端口号是dp中ports数组的索引;转载 2020-06-20 22:42:51 · 457 阅读 · 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 * it must be done after the configuration is set. I转载 2020-06-16 00:28:50 · 614 阅读 · 0 评论 -
OVS vswitchd启动(三十八)
bridge 重配置bridge 平滑vswitchd启动时, bridge模块需要经过reconfigure使实际生效的配置与数据库中保持一致static void bridge_reconfigure(const struct ovsrec_open_vswitch *ovs_cfg){ /* Destroy "struct bridge"s, "struct port"s, and "struct iface"s according * to 'ovs_cfg', with转载 2020-06-15 23:00:23 · 630 阅读 · 0 评论 -
OVS vswitchd启动(三十七)
Vswitchd是ovs中运行在用户空间的守护进程, 实现ovs主要的功能逻辑, 本文将着重分析其启动过程。数据结构bridge/port/iface/ofproto/ofport在数通领域, 交换机和桥很多时候可以是在说一个东西, 它工作在二层, 可以添加多个端口, 从一个端口上收到的报文会根据MAC表从其他某个端口转发出去. 在ovs中, 它也还是一个东西, 不过ovs用两个数据结构描述它们: 交换机(ofproto)与桥(bridge). 它们在ovs中是一一对应的, 也就是说一个bridge就转载 2020-06-15 22:54:55 · 902 阅读 · 0 评论 -
OVS bridge&bundle&port分析(三十四)
一、按照用途划分,openvswitch中桥、端口大致可以分成如下几类:1、配置管理主要对象包括:bridge、port、interface。2、openflow主要对象包括:ofproto、ofproto_dpif、ofbundle、ofport、ofport_dpif。3、端口镜像主要对象包括:mbridge、mbundle。4、upcall处理主要对象包括:xbridge、xbundle、xport。二、各对象之间的关系三、各对象生成时间1、ofproto创建路径(实际为ofp转载 2020-06-15 22:39:20 · 1082 阅读 · 0 评论 -
OVS 添加端口流程(二十九)
这次因为遇到想要添加其他类型的端口,所以查看一下添加端口的流程。首先查看命令ovs-vsctl的实现,这里我的理解主要是操作ovsdb的,需要通过jsonrpc和ovsdb-server进行通信。现在我们主要是添加端口的,其他的先不看。utilities/ovs-vsctl.cmain-->do_vsctl-->cmd_add_port(c->syntax->run in vsctl_commands)-->add_port函数用来添加端口。add_port如果有转载 2020-06-15 21:11:55 · 1923 阅读 · 0 评论 -
OVS vswitchd启动(三十六)
ovs-vswitchd.c的main函数最终会进入一个while循环,在这个无限循环中,里面最重要的两个函数是bridge_run()和netdev_run()。 bridge_init(remote); free(remote); exiting = false; while (!exiting) { //while循环,直到退出 memory_run(); if (memory_should_report()) {转载 2020-06-15 21:01:03 · 997 阅读 · 0 评论 -
OVS bridge和port(三十三)
ovs-vsctl add-br br0 会在数据库里面加入新bridge的信息ovs-vsctl add-port br0 eth0 会在数据库里面加入新的port信息void bridge_run(void){ //数据库发生变化 if (ovsdb_idl_get_seqno(idl) != idl_seqno || vlan_splinters_changed) { idl_seqno = ovsdb_idl_get_seqno(idl);转载 2020-06-15 15:45:32 · 2134 阅读 · 0 评论 -
OVS packet处理流程(三十二)
这来主要看看ovs从网络接口收到packet后的一系列操作。在内核模块启动的时候会初始化vport子系统(ovs_vport_init),各种vport类型,那么什么时候会调用相应的函数与实际网络设备建立联系?其实当我们在为网桥增设端口的时候,就会进入ovs_netdev_vport_ops中的create方法,进而 注册网络设备。看ovs-vsctl add-port br0 eth1 实际做了什么?struct netdev_vport { struct rcu_head rcu;转载 2020-06-15 15:37:56 · 715 阅读 · 0 评论 -
OVS 各功能调用过程(三十一)
注册用户态接收包时回调函数: construct | | open_dpif_backer /转载 2020-06-15 15:32:48 · 742 阅读 · 0 评论 -
OVS DPDK--报文处理流程(八)
ovs启动vswitchd/ovs-vswitchd.c启动main-->netdev_run-->netdev_initialize-->netdev_dpdk_register-->netdev_register_provider注册dpdk_vhost_user_class添加dpdk端口的时候,会触发创建pmd线程的操作。dpif_netdev_port_add-->do_add_port-->dp_netdev_set_pmds_on_numa-->转载 2020-06-15 14:36:23 · 4123 阅读 · 0 评论 -
OVS datapath主流程分析(二十一)
网络报文到达主机后,最终会到达协议栈的netif_receive_skb函数,该函数会通过设备对象的rx_handler函数把报文交给OVS处理。 而该rx_handler函数其实就是OVS 定义的netdev_frame_hook函数,本篇内容就是从netdev_frame_hook函数开始,分析报文在datapath中的整个主处理过程。1、netdev_frame_hook函数该函数为OVS与内核桥接点,所以函数定义受内核定义影响static rx_handler_result_t netdev_转载 2020-06-15 01:26:16 · 890 阅读 · 0 评论 -
OVS netdev、ofproto、dpif(三十)
How to Port Open vSwitch to New Software or HardwareOpen vSwitch (OVS) is intended to be easily ported to new software andhardware platforms. This document describes the types of changes thatare most likely to be necessary in porting OVS to Unix-like p转载 2020-06-13 00:28:42 · 1996 阅读 · 0 评论 -
OVS DPDK--数据结构关系(七)
一、分层抽象1、ofproto classopenflow交换机实现类,用来实现一个openflow交换机。主要包括创建、构造、操作openflowflow等相关方法。2、dpif classdatapath接口类,用来和datapath交互。主要包括datapath的open、run、端口操作、端口数据监听等相关方法。datapath是数据面的一种抽象。3、netdev class网络设备抽象类,用来和网络设备交互。主要包括网卡的设置、网卡结构的抽象、数据包发送接收等相关方法。brid转载 2020-06-12 21:56:13 · 1233 阅读 · 0 评论 -
OVS之vhost-net中VM通信(九)
一、版本说明qemu版本:2.6.0内核版本:3.10.102二、简而言之vhost模块需要提前加载,注册一个misc的设备,供虚拟机启动时候使用。虚拟机创建的时候,会初始化一个tap设备,然后启动一个vhost _$(qemu-kvm_pid)的线程,配置vring等承载数据的高度。guest和host进行网络数据IO的时候,只负责数据IO的中断,中断消息等由kvm模块负责。guest发包的时候,virtio模块负责发送数据包加入链接,然后通知kvm模块,kvm模块通过ioeventfd通转载 2020-06-10 03:35:57 · 1994 阅读 · 0 评论 -
OVS vxlan发包流程分析(二十七)
发包处理函数最终会调用到ovs_vport_send函数,该函数最终会调用vport_ops的send函数。1、ovs_vport_send函数void ovs_vport_send(struct vport *vport, struct sk_buff *skb){ int mtu = vport->dev->mtu; if (unlikely(packet_length(skb) > mtu && !skb_is_gso(skb))) { net_wa转载 2020-06-04 21:41:51 · 1211 阅读 · 0 评论 -
OVS 非VXLAN的收发包调用栈(二十二)
非VXLAN的收发包调用栈netdev_frame_hook() netdev_port_receive() ovs_vport_receive() ovs_dp_process_packet() (在查表失败后,对于带gso标记的大包,会分片进行upcall) ovs_dp_upcall()转载 2020-06-04 21:29:24 · 560 阅读 · 0 评论 -
OVS datapath之action分析(十九)
OVS dp支持的action都在do_execute_actions函数中定义,支持的action包括:OVS_ACTION_ATTR_OUTPUTOVS_ACTION_ATTR_USERSPACEOVS_ACTION_ATTR_HASHOVS_ACTION_ATTR_PUSH_MPLSOVS_ACTION_ATTR_POP_MPLSOVS_ACTION_ATTR_PUSH_VLANOVS_ACTION_ATTR_POP_VLANOVS_ACTION_ATTR_RECIRCOVS_ACT转载 2020-06-11 15:27:37 · 2102 阅读 · 0 评论 -
OVS datapath包处理流程(二十)
首先每个packet都会被datapath/vport.c : line 481的ovs_vport_receive函数接受。这个是第一步。int ovs_vport_receive(struct vport *vport, struct sk_buff *skb, const struct ip_tunnel_info *tun_info){ struct sw_flow_key key; // packet包头信息的提取,便于后面进行流表的匹配 int转载 2020-06-04 20:42:38 · 785 阅读 · 0 评论 -
OVS vxlan(二十八)
vxlan 端口是ovs 的OVS_VPORT_TYPE_VXLAN 类型的隧道端口,用户态netdev 库通过==netdev_vport_tunnel_register()==注册vport_class 结构,它包含如vxlan、gre 等各种类型隧道的相关处理函数。一、添加vxlan 端口添加命令为ovs-vsctl add-port br0 vxlan – set interface vxlan type=vxlan,用户态处理流程和上节的添加端口相同,不同时的是对vxlan 端口的参数配转载 2020-06-03 21:48:12 · 1642 阅读 · 0 评论 -
OVS ovs-vsctl(二十五)
ovs-vsctl 根据用户的命令和ovsdb-server 通信,用于查询和更新数据库配置。而vswithcd 会在需要重新更新配置的时候和ovsdb 交互,然后和内核dp 模块通过netlink消息执行真正的操作。本节以添加网桥、端口、vxlan 端口为例分析主要实现流程,其中ovsctl 进程的主要处理流程如下:一、添加网桥用户态shell 键入命令ovs-vsctl add-br br0,启动vsctl 进程用户完成数据库配置,流程如上面所述,最后调用add-br 对应的run 函数c转载 2020-06-03 21:31:35 · 820 阅读 · 0 评论 -
OVS sflow(二十六)
采样流sFlow(Sampled Flow)是一种基于报文采样的网络流量监控技术,主要用于对网络流量进行统计分析。sFlow 系统包含一个嵌入在设备中的sFlow Agent 和远端的sFlow Collector。其中,sFlow Agent 通过sFlow 采样获取本设备上的接口统计信息和数据信息,将信息封装成sFlow 报文,当sFlow 报文缓冲区满或是在sFlow 报文缓存时间超时后,sFlow Agent 会将sFlow 报文发送到指定的sFlow Collector。sFlow Col转载 2020-06-03 21:25:35 · 958 阅读 · 0 评论 -
OVS openflow(二十四)
OpenFlow 是用于管理交换机流表的协议,ovs-ofctl 则是 OVS 提供的命令行工具。在没有配置 OpenFlow controller 的模式下,用户可以使用 ovs-ofctl 命令通过OpenFlow 协议去连接 OVS,创建、修改或删除 OVS 中的流表项,并对 OVS 的运行状况进行动态监控。一、openflow 连接建立在bridge_reconfigure()函数中调用bridge_configure_remotes 进行openflow 连接的相关处理,主要创建两个对象转载 2020-06-03 21:20:31 · 1339 阅读 · 0 评论 -
OVS ofproto(二十三)
ofproto 层通过ofproto_class 类(实现是ofproto_dpif_class)实现了openflow 的接口,它主要包括如下几个接口类对象:ofproto 代表了一个openflow switch 的具体实现,是ofproto 层的整体结构体ofport代表了一个openflow switch 的端口,关联一个netdev 设备;ofrule 代表了一条openflow规则,rule 里面包含一组actions;ofgroup 代表了一个openflow 的行为组合,open转载 2020-06-03 21:11:08 · 1765 阅读 · 0 评论 -
OVS vswitchd启动(三十五)
vswitchd 作为守护进程和ovsdb 通信以及和controller 进行openflow 通信,并完成和底层内核的交互。代码在vswitchd/目录下面,可以从main 函数入口分析,整体处理流程如下:转载 2020-06-03 18:15:38 · 914 阅读 · 0 评论 -
OVS datapath简介(十八)
1、datapath 简介datapath为 ovs内核模块,负责执行数据交换,也就是把从接收端口收到的数据包在流表中进行匹配,并执行匹配到的动作。一个datapath可以对应多个vport,一个vport类似物理交换机的端口概念。一个datapth关联一个flow table,一个flow table包含多个条目,每个条目包括两个内容:一个match/key和一个action2、数据流向一般的数据包在 Linux 网络协议中的流向为上图中的蓝色箭头流向:网卡eth0 收到数据包后判断报文走向,转载 2020-06-03 18:10:57 · 6523 阅读 · 0 评论