精华内容
下载资源
问答
  • OVS

    2021-03-23 09:35:50
    1.OVS简介 定义: Openswitch简称OVS,是一个多层的,高质量的开源虚拟交换机(网络分层的层)移植性好,主要部署在服务器上,相比传统交换机具有很好的编程扩展性,同时具备传统交换机实现的网络隔离和数据转发功能...

    1.OVS简介

    定义
    Openswitch简称OVS,是一个多层的,高质量的开源虚拟交换机(网络分层的层)移植性好,主要部署在服务器上,相比传统交换机具有很好的编程扩展性,同时具备传统交换机实现的网络隔离和数据转发功能,运行在每个实现虚拟机的物理机器上,并提供远程管理。
    目的
    是通过编程扩展支持大规模网络自动化,同时还支持标准的管理接口和协议。
    两大特点

    • 基于overlay(vxlan等)网络的思想设计
    • 基于OpenFlow

    2.查找

    OpenVSwitch实现了一个统一的查找算法:TSS(Tuple Space Search),这本质上是一个hash 查找算法,以减少Match所需要的时间。。
    OpenFlow规则查找
    通过这些 Tables 来控制网络包的流向和结构。
    在这里插入图片描述

    过程:

    • 1.对于任何需要经过OpenFlow处理的网络数据包,先将其源MAC,目的MAC,源IP,目的IP,源端口,目的端口hash成一个散列值,然后在OpenFlow规则对应的散列值中查找。
    • 2.在一个OpenFlow Table中,可能同时存在多种匹配类型,有的只匹配MAC地址,有的只匹配in_port,对于不同的Match,OpenVSwitch会将其分类,每一类Match构成一个hash
      table。
    • 3.一个OpenFlow Table里有多少种不同的Match,就会有多少个hash table。
    • 4.当一个网络包需要经过一个OpenFlow Table处理时,网络数据包会在所有的hash table中进行查找,如果匹配了一个hash table,那么就按照hash table里具体那一条规则的action执行;如果有多个hash table匹配,那么就看优先级,优先级高的胜出。
    • 5.如果所有的hash table都不匹配,那么网络包就通过netlink upcall机制从内核态通知用户态,发送给ovs-swithed来处理;
    • ovs-vswitchd 查询用户态精确流表和模糊流表,如果还不命中,在 SDN 控制器接入的情况下,经过 OpenFlow
      协议,通告给控制器,由控制器处理。
    • 如果模糊命中, ovs-vswitchd会同时刷新用户态精确流表和内核态精确流表,如果精确命中,则只更新内核态流表;刷新后,重新把该数据包注入给内核态 datapath 模块处理;datapath 重新发起选路,查询内核流表,匹配;报文转发,结束。 .

    在这里插入图片描述

    3.ovs主要组成

    在这里插入图片描述

    • Controller (OpenFlow 控制器)

    • ovsdb-server
      OVS的数据库服务器,用来存储虚拟交换机的配置信息(包括接口,交换内容,VLAN,虚拟交换机的创建,网卡的添加等信息与操作记录。都被 ovsdb 保存到一个 conf.db 文件(JSON 格式)里面,通过 db.sock 提供服务。)。

    • datapath

    负责数据交换的内核模块,比如把接受端口收到的包放到流表中进行匹配,并执行匹配后的动作等。它在初始化和port binding的时候注册钩子函数,把端口的报文处理接管到内核模块

    • ovs-vswitch
    • 本质是一个守护进程,是OVS的核心部件,实现了OpenFlow交换机的核心功能。ovs-vswitchd 和 Datapath 一起实现OvS 基于流表
    • 它与ovsdb-server使用OVSDB协议通信,它和内核模块通过netlink通信,它支持多个独立的datapath(网桥),它通过更改flow table实现了绑定,和VLAN等功能。
    • OpenVSwitch中有快速通道(fast path)和慢速通道(slow path)
    • 快速通道:指数据包进入OVS之后,由datapath模块处理,直接匹配内核的缓存流表项,匹配成功则直接转发的通道
    • 慢通道:在datapath匹配失败之后将数据upcall到ovs-vswwitchd模块,ovs-vswitchd模块处理之后再通过netlink将数据交给datapath转发的通道
      在这里插入图片描述

    ovs-vswitchd代表slow path
    OVS内核代表fast path(转发速度快)

    • ovs kernel module OVS内核模块

    处理包交换和隧道,缓存flow,如果在内核的缓存中找到转发规则则转发,否则发向用户空间去处理。

    • ovs-controller:

    一个简单的openflow控制器

    4.Open vSwitch的工作原理

    4.1 对帧和报文的处理

    • 处理数据帧规则(和二层交换机一样)
    • 对数据包的处理

    4.2 OpenvSwitch和其他vswitch

    • VMware vNetwork distributed switch以及思科的Cisco Nexus
      1000V这种虚拟交换机提供的是一个集中式的控制方式
    • 而OVS则是一个独立的vswitch,他运行在每个实现虚拟化的物理机器上,并提供远程管 理。
      OVS提供了两种在虚拟化环境中远程管理的协议
    • 1.OpenFlow,通过流表来管理交换机的行为,
    • 2.是OVSDB management protocol,用来暴露sietch的port状态。

    5.ovs应用场景

    1.使用ovs构建虚拟网络

    (主要是用来在虚拟化环境中。实现虚拟机之间的通信以及虚拟机与外界网络的通信)

    • 1.构建物理机和物理机相互连接的网络
      在这里插入图片描述
    • 2.构建虚拟机与虚拟机相连的网络
      在这里插入图片描述
    • 3.构建虚拟机与物理机相连的网络
      在这里插入图片描述

    2.OVS管理海量虚拟机(实现以下物理交换机的功能)

    • 1.网络隔离

    Open vSwitch通过在host上虚拟出一个软件交换机,等于在物理交换机上级联了一台新的交换机,所有VM通过级联交换机接入,让管理员能够像配置物理交换机一样把同一台host上的众多VM分配到不同VLAN中去;

    - 2.QOS配置

    在Open vSwitch端口上,给各个VM配置QoS,可以实现物理交换机的traffic queuing和traffic shaping功能。每台VM配置不同的速度和带宽,以保证核心业务VM的网络性能。

    - 3.流量监控

    3.引入openflow实现SDN

    • ovs-openflowd — OpenFlow交换机;
    • ovs-controller — OpenFlow控制器;
    • ovs-ofctl — Open Flow 的命令行配置接口;
    • ovs-pki — 创建和管理公钥框架;

    6.OVN (Open Virtual Network)

    1.介绍
    是OVS提供的原生虚拟化网络方案,旨在解决传统SDN架构(比如Neutron DVR)的性能问题。
    2.其主要功能包括
    L2/L3虚拟网络以及逻辑交换机(logical switch)
    L2/L3/L4 ACL
    IPv4/IPv6分布式L3路由
    3.组成在这里插入图片描述

    • northbound database:
      存储逻辑交换机、路由器、ACL、端口等的信息,目前基于ovsdb-server,未来可能会支持etcd v3
    • ovn-northd:
      集中式控制器,负责把northbound database数据分发到各个ovn controller
    • ovn-controller:
      运行在每台机器上的本地SDN控制器
    • southbound database

    4.OVN L2功能(部分)
    L2 switch、L2 ACL
    OVN L3功能(部分)
    IPv4/IPv6分布式L3路由、L3 ACL、ARP/IPV6分布式路由

    展开全文
  • ovs

    2017-03-23 17:36:00
    Open vSwith模拟网关实现不同子网的互通 服务:  ovsdb-server ... ovs-vswitchd rpm:  openvswitch-2.4.0-1.el6.x86_64 命令:  ovs-appctl  ovs-docker  ovs-dpctl-top  ov...

    http://www.sdnlab.com/14101.html

    Open vSwith模拟网关实现不同子网的互通

     

    服务:

      ovsdb-server

      ovs-vswitchd

     

    rpm:

      openvswitch-2.4.0-1.el6.x86_64

     

    命令:

      ovs-appctl

      ovs-docker

      ovs-dpctl-top

      ovs-ofctl

      ovs-test

      ovs-vlan-test

      ovs-vswitchd
      ovs-bugtool

      ovs-dpctl

      ovs-l3ping

      ovs-pki

      ovs-testcontroller

      ovs-vsctl

     

     

    配置文件

      /etc/init.d/openvswitch
      /etc/logrotate.d/openvswitch
      /etc/openvswitch/conf.db
      /etc/openvswitch/system-id.conf
      /etc/sysconfig/network-scripts/ifdown-ovs
      /etc/sysconfig/network-scripts/ifup-ovs

     

    日志:

      /var/log/openvswitch/ovs-vswitchd.log

      /var/log/openvswitch/ovsdb-server.log

     

    通过ovs设置物理网卡联网规则:

     

      1. 最简单的使用OVS和控制器做路由的方法

     

      利用ovs-ofctl 转发

          #ovs-ofctl 

      $ ovs-ofctl add-flow ovs-switch "priority=1 idle_timeout=0,dl_src=00:0C:29:33:17:d3,actions=mod_nw_src:192.168.10.140,normal"
      dl_type=
      dl_type=0x0800
      nw_proto=0x03

      $ ovs-ofctl add-flow ovs-switch "priority=1 idle_timeout=0,dl_type=0x0800,nw_proto=0x03,actions=mod_nw_dst:192.168.10.2,normal"


          丢包处理

      # ovs-ofctl add-flow switch0 cookie=2,idle_timeout=0,priority=1,dl_type=0x800,in_port=39,actions=drop

          //  源 ip

         # ovs-ofctl add-flow switch0 cookie=2,idle_timeout=0,priority=1,dl_type=0x800,nw_src=10.17.5.201,actions=drop

       # ovs-ofctl add-flow switch0 cookie=2,idle_timeout=0,priority=1,dl_type=0x800,dl_src=00:E0:2F:1E:15:A4,actions=drop

         # mac: 00:0C:29:B9:15:41      00:OC:29:FE:D7:3D

         dl_src    源mac

         dl_dst    目的mac

         in_port   输入端口号

         nw_src    源ip地址

         nw_dst    目的ip地址

        dl_type   数据包类型

         nw_proto   网络层协议类型

     

      添加缺省的处理。

      #ovs-ofctl add-flow switch0 priority=0,actions=NORMAL

     

     cookie=0x0, duration=11509.036s, table=0, n_packets=1059, n_bytes=116533, idle_age=740, priority=1,in_port=1 actions=resubmit(,2) //从端口1及patch-int进来的traffic会被重新执行table 2的rule

    flows規則丢失问题:主機重啓后,设置的flows规则丢失。
      ovs交换机配置保存指南: http://blog.csdn.net/anzhuangguai/article/details/52670866

     

    修改内核参数  /etc/sysctl.conf

     

    net.ipv4.ip_forward=1 
    net.ipv4.conf.all.rp_filter=0 
    net.ipv4.conf.default.rp_filter=0 

    #sysctl -p

     

    设置QOS

    # ovs-vsctl set Interface tap0 ingress_policing_rate=100000
    # ovs-vsctl set Interface tap0 ingress_policing_burst=10000

     

     

    查看端口信息:

    [root@vClass-sGRce ~]# ovs-vsctl -- --columns=name,ofport list Interface
    name                : vnetcwjuWnXTW
    ofport              : 3
    
    name                : "eth0"
    ofport              : 4
    
    name                : "switch0"
    ofport              : 65534
    
    name                : "p0"
    ofport              : 100
    
    name                : ovs-switch
    ofport              : 65534

     

     获取接口端口号:

    [root@vClass-sGRce ~]# ovs-vsctl get interface eth0 ofport
    4

     

    设置接口端口号:

    [root@vClass-sGRce ~]# ovs-vsctl set interface p0 ofport=200
    [root@vClass-sGRce ~]# 

     

    流表的作用:

    每张Flow Table完成的具体功能如下:
    
    Table ID为0的功能: 
    VM识别(基于macSa);
    租户识别(基于macSa or Vlan);
    Tunnel识别(基于Tunnel VniId);
    基于VM或者租户的策略应用;
    传递metadata到后面;
    Table ID为1的功能: 全局安全或者QoS策略应用 决定下一级table跳转到2还是3
    Table ID为2的功能: 二层流表转发到Port或者Tunnel Table ID为3的功能: 三层流表转发到Port或者Tunnel

     

     

     

    查看路由表:

    创建桥后查看路由表项:route   #参看路由表是否正常配置

    注意修改默认路由的网络接口为桥br0,而非eth0

    [root@vClass-w47o0 ~]# route
    Kernel IP routing table
    Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
    default         10.16.1.1       0.0.0.0         UG    0      0        0 eth1               //公网路由信息   // U – Up, G – Gateway, H – Host                 
    10.16.0.0       *               255.255.0.0     U     0      0        0 eth1           //局域网路由信息
    10.16.0.0       *               255.255.0.0     U     0      0        0 switch0
    link-local      *               255.255.0.0     U     1002   0        0 eth0
    link-local      *               255.255.0.0     U     1003   0        0 eth1
    link-local      *               255.255.0.0     U     1038   0        0 vnetiowFuwcHo

    Flags  可能出现的标志有:
                  U (route is up) 路由正常
                  H (target is a host) 主机路由
                  G (use gateway) 使用网关的间接路由
                  R (reinstate route for dynamic routing) 为动态选路恢复路由
                  D (dynamically installed by daemon or redirect) 该路由由选路进程或重定向动态创建
                  M (modified from routing daemon or rederict) 该路由已由选路进程或重定向修改
                  ! (reject route) 阻塞路由

    route del default dev eth0               // 删除默认路由,也就公网路由,因为有网关. 无法访问外网
    route add default dev eth0               // 增加默认路由,没加网关.        无法访问外网
    route add default gw 192.168.0.3 dev eth0    // 重新添加带网关的路由信息     可以访问外网
    route del -net 10.16.0.0/16 dev eth0        // 删除局域网路由, 数据包通过了默认路由信息发到了路由器,再查路由器的路由表找到了192.168.1.133的路由.再由网关发回来给192.168.1.133了.

     

    加载TUN模块: /sbin/modprobe tun
    查看系统模块:lsmod
    | grep tun

    [root@vClass-w47o0 ~]# lsmod | grep tun
    tun 27379 3 vhost_net

    查看tun设备:ll /dev/net/tun

    [root@vClass-w47o0 ~]# ll /dev/net/tun
    crw-rw-rw- 1 root root 10, 200 3月 21 14:58 /dev/net/tun

     

    查询网卡模式: dmesg | grep eht0

    建立bridge后的状态是让网络接口eth0进入混杂模式(promiscuous mode,接收网络中所有数据包),网桥br0进入转发状态(forwarding state),而且br0和eth0有相同的MAC地址,一般也会得到和eth0相同的IP。

    [root@vClass-w47o0 ~]# dmesg | grep eth0
    [16878.589019] device eth0 left promiscuous mode
    [16892.803977] device eth0 entered promiscuous mode

     

    打开br0的STP协议: brctl

    stp br0 on

    STP是生成树协议(Spanning
    Tree Protocol),它主要是为了避免在建有bridge的以太网LAN中出现桥回路(bridge loop)。如果不打开STP,则可能出现回路从而导致建有bridge的主机网络不畅通。

    设置br0 ip: 需要将bridge设置为与其绑定的物理网络接口一样的IP和MAC地址,并让默认路由使用bridge(而不是ethX)来连通。这个步骤可能导致宿主机的网络断掉,之后重新通过bridge建立网络连接,所以建立bridge这个步骤最好不要通过SSH连接远程(或VNC)配置。

    查看tap设备:ls /sys/devices/virtual/net/

    [root@vClass-w47o0 ~]# ls /sys/devices/virtual/net/
    bond0  lo  ovs-system  switch0  vnetiowFuwcHo

     

    由上面信息可知,创建客户机后,添加了一个名为tap1的TAP虚拟网络设备,它被绑定在br0这个bridge上。Centos上默认虚拟网卡设备名为vnet0(1....)。

     

     

    windows route操作

     

     1     > route PRINT
     2     > route PRINT -4
     3     > route PRINT -6
     4     > route PRINT 157*          .... 只打印那些匹配  157* 的项
     5 
     6     > route ADD 157.0.0.0 MASK 255.0.0.0  157.55.80.1 METRIC 3 IF 2
     7              destination^      ^mask      ^gateway     metric^    ^
     8                                                          Interface^
     9       如果未给出 IF,它将尝试查找给定网关的最佳
    10       接口。
    11     > route ADD 3ffe::/32 3ffe::1
    12 
    13     > route CHANGE 157.0.0.0 MASK 255.0.0.0 157.55.80.5 METRIC 2 IF 2
    14 
    15       CHANGE 只用于修改网关和/或跃点数。
    16 
    17     > route DELETE 157.0.0.0
    18     > route DELETE 3ffe::/32

     

    C:\Users\doscho>route print -4
    ===========================================================================
    接口列表
     11...00 0c 29 33 17 d3 ......Intel(R) PRO/1000 MT Network Connection
      1...........................Software Loopback Interface 1
    ===========================================================================
    
    IPv4 路由表
    ===========================================================================
    活动路由:
              网络目标         网络掩码            网关         接口       跃点数
              0.0.0.0          0.0.0.0   192.168.10.170     192.168.10.140   266              // 网络目标 destination:
            127.0.0.0        255.0.0.0            在链路上         127.0.0.1    306              // 接口 interface:     到达该目的地的本地路由器的ip
            127.0.0.1  255.255.255.255            在链路上         127.0.0.1    306        //  网关 gateway:       下一跳路由器入口的ip, 路由器通过interface和gateway定义一调到下一路由器的链路,通常情况下,interface和gateway是同一网段的。
      127.255.255.255  255.255.255.255            在链路上         127.0.0.1    306              // 跃点数 metric:      该条路由记录的质量,一般情况下,如果有多条到达相同目的地的路由记录,路由器会采用metric值小的那条路由。
         192.168.10.0    255.255.255.0            在链路上    192.168.10.140    266
       192.168.10.140  255.255.255.255            在链路上    192.168.10.140    266
       192.168.10.255  255.255.255.255            在链路上    192.168.10.140    266
            224.0.0.0        240.0.0.0            在链路上         127.0.0.1    306
            224.0.0.0        240.0.0.0            在链路上    192.168.10.140    266
      255.255.255.255  255.255.255.255            在链路上         127.0.0.1    306
      255.255.255.255  255.255.255.255            在链路上    192.168.10.140    266
    ===========================================================================
    永久路由:
      网络地址          网络掩码  网关地址  跃点数
              0.0.0.0          0.0.0.0   192.168.10.170     默认
    ===========================================================================

     

    windows 路由表操作

    windows路由表的设置主要通过route命令,ROUTE命令格式如下: 
    
    ROUTE [-f] [-p] [command [destination] [MASK netmask] [gateway] [METRIC metric] [IF interface]
    
    其中 –f 参数用于清除路由表,-p参数用于永久保留某条路由(即在系统重启时不会丢失路由)。 
    
    Command 主要有PRINT(打印)、ADD(添加)、DELETE(删除)、CHANGE(修改)共4个命令。 
    
    Destination 代表所要达到的目标IP地址。 
    
    MASK 是子网掩码的关键字。Netmask代表具体的子网掩码,如果不加说明,默认是255.255.255.255(单机IP地址)。如果代表全部出口子网掩码可用0.0.0.0。 
    
    Gateway 代表出口网关。 
    
    其他interface和metric分别代表特殊路由的接口数目和到达目标地址的跳数,一般默认。

     

    route add 0.0.0.0 MASK 0.0.0.0 192.168.10.2

    route delete 0.0.0.0

     

    ovs flows保存机制

    重启ovs服务器时,通过添加 --save-flows=yes ,保存设置的flows规则

    service openvswitch restart --save-flows=yes

     

    服务调用 /usr/share/openvswitch/scripts/ovs-save 脚本。 此脚本在 源码包的 utilities下。

     

    如何设置系统启动时,启动ovs保留flows规则?

    通过网络获取到如下方案,ovs是否自身有这个选项呢?

    ovs交换机配置保存指南  http://blog.csdn.net/anzhuangguai/article/details/52670866

     

    ovs常用命令和总结:  http://blog.csdn.net/gzhouc/article/details/52202219

    官网:        http://openvswitch.org/

    ovs-ofctl 手册:     http://rpm.pbone.net/index.php3/stat/45/idpl/23319267/numer/8/nazwa/ovs-ofctl

    OpenFlow端口:     http://book.2cto.com/201310/34150.html

     

    QOS:

    Open vSwitch QoS 功能(限速): http://blog.csdn.net/zhongbeida_xue/article/details/56845461

    Openvswitch手册(6): QoS:    http://www.cnblogs.com/popsuper1982/p/3803807.html

     

     

    转载于:https://www.cnblogs.com/doscho/p/6606349.html

    展开全文
  • ovs-vswitchd, a daemon that implements the switch, along with a companion Linux kernel module for flow-based switching. ovsdb-server, a lightweight database server that ovs-vswitchd queries to obtain ...
  • ovs相关博客

    2021-01-20 12:46:26
    OVS常用命令与使用总结 https://blog.csdn.net/rocson001/article/details/73163041 ovs之组网实验 https://www.cnblogs.com/mrwuzs/p/10242737.html   Openv Switch 完全使用手册 https://blog.csd
  • ovs_faucet

    2018-07-28 18:08:13
    ovs 控制器 faucdt 下载,官网推荐用例,ovs 控制器 faucdt 下载,官网推荐用例
  • ovsovs+dpdk架构分析

    2021-09-14 16:42:16
    OVS内核态架构图 内核态与用户态交互 OVS的架構分成快速路徑(fast path)與慢速路徑(slow path) 快速路徑是內核空間(kernel space)的openvswitch.ko 慢速路徑是用戶空間(user space)的ovs-vswitchd OVS+DPDK...

    OVS内核态架构图

     

     内核态与用户态交互

    OVS的架構分成快速路徑(fast path)與慢速路徑(slow path)
    快速路徑是內核空間(kernel space)的openvswitch.ko
    慢速路徑是用戶空間(user space)的ovs-vswitchd

     

    OVS+DPDK架构

     

     dpif-netdev:用户态的快速通路,实现了基于netdev设备的dpif API。

    ofproto-dpif:实现了基于dpif层的ofproto API。

    netdev-dpdk:实现了基于DPDK的netdev API,其定义的几种网络接口如下:

    dpdk物理网口:其实现是采用高性能向量化DPDK PMD的驱动。

    dpdkvhostuser接口: vhost-user可以挂接到用户态的数据通道上,与虚拟机的virtio网口快速通信。为了性能,在vhost burst收发包个数上,需要和dpdk物理网口设置的burst收发包个数相同。

     DPDK加速的OVS数据流转发的大致流程如下:

    1)OVS的ovs-vswitchd接收到从OVS连接的某个网络端口发来的数据包,从数据包中提取源/目的IP、源/目的MAC、端口等信息。

    2)OVS在用户态查看精确流表和模糊流表,如果命中,则直接转发。

    3)如果还不命中,在SDN控制器接入的情况下,经过OpenFlow协议,通告给控制器,由控制器处理。

    4)控制器下发新的流表,该数据包重新发起选路,匹配;报文转发,结束。

    DPDK加速的OVS与原始OVS的区别在于,从OVS连接的某个网络端口接收到的报文不需要openvswitch.ko内核态的处理,报文通过DPDK PMD驱动直接到达用户态ovs-vswitchd里。

    数据流向

     从物理或虚拟接口进入OvS-DPDK的数据包会根据其标头字段接收唯一的标识符或哈希,然后将其与三个主要交换表之一中的条目进行匹配:精确匹配缓存(EMC),数据路径分类器(dpcls)或ofproto分类器。数据包的标识符将按顺序遍历这三个表中的每一个,除非找到匹配项,在这种情况下,将执行表中匹配规则指示的适当操作,并在完成所有操作后将数据包转发出交换机。

     这三个表具有不同的特性和相关的吞吐量性能/延迟。EMC为有限数量的表条目提供了最快的处理速度。数据包的标识符必须与该表中所有字段(源IP和端口,目标IP和端口以及协议的5元组)的条目完全匹配,以实现最快的处理,否则它将在EMC上“遗漏”并传递给dpcls。dpcls包含更多表条目(安排在多个子表中),并启用数据包标识符的通配符匹配(例如,指定了目标IP和端口,但允许任何源)。这大约提供了EMC吞吐量性能的一半,并且可以满足大量的表条目。

           dpcls上的未命中会导致将数据包标识符发送到ofproto分类器,以便OpenFlow控制器可以决定操作。该路径性能最低,比EMC慢10倍以上。ofproto分类器中的匹配导致在更快的交换表中建立新的表条目,以便可以更快地处理相同流中的后续数据包。

    EMC插入概率

    默认情况下,每100个流中有1个插入到精确匹配缓存(EMC)中。可以通过设置emc-insert-inv-prob选项改变此插入概率:

           ovs-vsctl --no-wait set Open_vSwitch . other_config:emc-insert-inv-prob=N

           EMC是以PMD为边界的,每个PMD拥有自己的EMC;dpcls是以端口为边界的,每个端口拥有自己的dpcls;ofproto classifier是以桥为边界的,每个桥拥有自己的ofproto classifier

     

    展开全文
  • dpi-enabled-ovs 使用 DPI 功能扩展 OVS
  • P4-OvS-将P4的强大功能带到OvS! 原始的Open vSwitch README可从。 介绍 该存储库使用接口实现支持Open vSwitch。 为了填补P4生态系统中的空白(缺乏高效的P4软件交换机),该项目的目标是构建基于Open vSwitch的...
  • 视频图matlab代码OVS-开放式车辆模拟器 介绍 目的:独立于车辆的在线车辆模拟器,用于评估反馈控制器 创作者:David Wong() 演示: 执照: 路线图 具有良好物理性能的matlab / octave原型 cpp多对象 多体动力学 ...
  • ovs命令行手册

    2018-11-19 10:57:29
    ovs的命令行手册详细说明,内容很全,解释很详细,推荐。
  • ovs-helper-源码

    2021-02-05 21:37:58
    ovs-helper
  • ovs bond脚本

    2018-09-20 16:31:49
    openvswitch bond脚本,当两个网卡需要做ovs的时候,可以使用这个脚本
  • OVS架构

    2019-10-09 03:25:47
    先看下OVS整体架构,用户空间主要组件有数据库服务ovsdb-server和守护进程ovs-vswitchd。kernel中是datapath内核模块。最上面的Controller表示OpenFlow控制器,控制器与OVS是通过OpenFlow协议进行连接,控制器不一定...

     

    先看下OVS整体架构,用户空间主要组件有数据库服务ovsdb-server和守护进程ovs-vswitchd。kernel中是datapath内核模块。最上面的Controller表示OpenFlow控制器,控制器与OVS是通过OpenFlow协议进行连接,控制器不一定位于OVS主机上,下面分别介绍图中各组件

     
    ovs1

    ovs-vswitchd

    ovs-vswitchd守护进程是OVS的核心部件,它和datapath内核模块一起实现OVS基于流的数据交换。作为核心组件,它使用openflow协议与上层OpenFlow控制器通信,使用OVSDB协议与ovsdb-server通信,使用netlinkdatapath内核模块通信。ovs-vswitchd在启动时会读取ovsdb-server中配置信息,然后配置内核中的datapaths和所有OVS switches,当ovsdb中的配置信息改变时(例如使用ovs-vsctl工具),ovs-vswitchd也会自动更新其配置以保持与数据库同步

    # ps -ef |grep ovs-vs
    root     22176 22175  0 Jan17 ? 00:16:56 ovs-vswitchd unix:/var/run/openvswitch/db.sock -vconsole:emer -vsyslog:err -vfile:info --mlockall --no-chdir --log-file=/var/log/openvswitch/ovs-vswitchd.log --pidfile=/var/run/openvswitch/ovs-vswitchd.pid --detach --monitor 

    ovs-vswitchd需要加载datapath内核模块才能正常运行。它会自动配置datapath flows,因此我们不必再使用ovs-dpctl去手动操作datapath,但ovs-dpctl仍可用于调试场合

    在OVS中,ovs-vswitchd从OpenFlow控制器获取流表规则,然后把从datapath中收到的数据包在流表中进行匹配,找到匹配的flows并把所需应用的actions返回给datapath,同时作为处理的一部分,ovs-vswitchd会在datapath中设置一条datapath flows用于后续相同类型的数据包可以直接在内核中执行动作,此datapath flows相当于OpenFlow flows的缓存。对于datapath来说,其并不知道用户空间OpenFlow的存在,datapath内核模块信息如下

    # modinfo openvswitch
    filename:       /lib/modules/3.10.0-327.el7.x86_64/kernel/net/openvswitch/openvswitch.ko
    license:        GPL
    description:    Open vSwitch switching datapath
    rhelversion:    7.2
    srcversion:     F75F2B83324DCC665887FD5
    depends:        libcrc32c
    intree:         Y
    ...
    
    

    ovsdb-server

    ovsdb-server是OVS轻量级的数据库服务,用于整个OVS的配置信息,包括接口/交换内容/VLAN等,OVS主进程ovs-vswitchd根据数据库中的配置信息工作,下面是ovsdb-server进程详细信息

    ps -ef |grep ovsdb-server
    root     22166 22165  0 Jan17 ?        00:02:32 ovsdb-server /etc/openvswitch/conf.db -vconsole:emer -vsyslog:err -vfile:info --remote=punix:/var/run/openvswitch/db.sock --private-key=db:Open_vSwitch,SSL,private_key --certificate=db:Open_vSwitch,SSL,certificate --bootstrap-ca-cert=db:Open_vSwitch,SSL,ca_cert --no-chdir --log-file=/var/log/openvswitch/ovsdb-server.log --pidfile=/var/run/openvswitch/ovsdb-server.pid --detach --monitor 

    /etc/openvswitch/conf.db是数据库文件存放位置,文件形式存储保证了服务器重启不会影响其配置信息,ovsdb-server需要文件才能启动,可以使用ovsdb-tool create命令创建并初始化此数据库文件
    --remote=punix:/var/run/openvswitch/db.sock 实现了一个Unix sockets连接,OVS主进程ovs-vswitchd或其它命令工具(ovsdb-client)通过此socket连接管理ovsdb
    /var/log/openvswitch/ovsdb-server.log是日志记录

    OpenFlow

    OpenFlow是开源的用于管理交换机流表的协议,OpenFlow在OVS中的地位可以参考上面架构图,它是Controller和ovs-vswitched间的通信协议。需要注意的是,OpenFlow是一个独立的完整的流表协议,不依赖于OVS,OVS只是支持OpenFlow协议,有了支持,我们可以使用OpenFlow控制器来管理OVS中的流表,OpenFlow不仅仅支持虚拟交换机,某些硬件交换机也支持OpenFlow协议

    OVS常用作SDN交换机(OpenFlow交换机),其中控制数据转发策略的就是OpenFlow flow。OpenStack Neutron中实现了一个OpenFlow控制器用于向OVS下发OpenFlow flows控制虚拟机间的访问或隔离。本文讨论的默认是作为SDN交换机场景下

    OpenFlow flow的流表项存放于用户空间主进程ovs-vswitchd中,OVS除了连接OpenFlow控制器获取这种flow,文章后面会提到的命令行工具ovs-ofctl工具也可以手动管理OVS中的OpenFlow flow,可以查看man ovs-ofctl了解

    在OVS中,OpenFlow flow是最重要的一种flow, 然而还有其它几种flows存在,文章下面OVS概念部分会提到

    Controller

    Controller指OpenFlow控制器。OpenFlow控制器可以通过OpenFlow协议连接到任何支持OpenFlow的交换机,比如OVS。控制器通过向交换机下发流表规则来控制数据流向。除了可以通过OpenFlow控制器配置OVS中flows,也可以使用OVS提供的ovs-ofctl命令通过OpenFlow协议去连接OVS,从而配置flows,命令也能够对OVS的运行状况进行动态监控。

    Kernel Datapath

    下面讨论场景是OVS作为一个OpenFlow交换机

    datapath是一个Linux内核模块,它负责执行数据交换。关于datapath,The Design and Implementation of Open vSwitch中有描述

    <small>The datapath module in the kernel receives the packets first, from a physical NIC or a VM’s virtual NIC. Either ovs-vswitchd has instructed the datapath how to handle packets of this type, or it has not. In the former case, the datapath module simply follows the instructions, called actions, given by ovs-vswitchd, which list physical ports or tunnels on which to transmit the packet. Actions may also specify packet modifications, packet sampling, or instructions to drop the packet. In the other case, where the datapath has not been told what to do with the packet, it delivers it to ovs-vswitchd. In userspace, ovs-vswitchd determines how the packet should be handled, then it passes the packet back to the datapath with the desired handling. Usually, ovs-vswitchd also tells the datapath to cache the actions, for handling similar future packets.</small>

    为了说明datapath,来看一张更详细的架构图,图中的大部分组件上面都有提到

     
    ovs1

    用户空间ovs-vswitchd和内核模块datapath决定了数据包的转发,首先,datapath内核模块收到进入数据包(物理网卡或虚拟网卡),然后查找其缓存(datapath flows),当有一个匹配的flow时它执行对应的操作,否则datapath会把该数据包送入用户空间由ovs-vswitchd负责在其OpenFlow flows中查询(图1中的First Packet),ovs-vswitchd查询后把匹配的actions返回给datapath并设置一条datapath flows到datapath中,这样后续进入的同类型的数据包(图1中的Subsequent Packets)因为缓存匹配会被datapath直接处理,不用再次进入用户空间。

    datapath专注于数据交换,它不需要知道OpenFlow的存在。与OpenFlow打交道的是ovs-vswitchdovs-vswitchd存储所有Flow规则供datapath查询或缓存.

    虽然有ovs-dpctl管理工具的存在,但我们没必要去手动管理datapath,这是用户空间ovs-vswitchd的工作

    OVS概念

    这部分说下OVS中的重要概念,使用OpenStack neutron+vxlan部署模式下网络节点OVS网桥作为例子

    # ovs-vsctl show
    e44abab7-2f65-4efd-ab52-36e92d9f0200
        Manager "ptcp:6640:127.0.0.1"
            is_connected: true
        Bridge br-ext
            Controller "tcp:127.0.0.1:6633"
                is_connected: true fail_mode: secure Port br-ext Interface br-ext type: internal Port "eth1" Interface "eth1" Port phy-br-ext Interface phy-br-ext type: patch options: {peer=int-br-ext} Bridge br-tun Controller "tcp:127.0.0.1:6633" is_connected: true fail_mode: secure Port br-tun Interface br-tun type: internal Port patch-int Interface patch-int type: patch options: {peer=patch-tun} Port "vxlan-080058ca" Interface "vxlan-080058ca" type: vxlan options: {df_default="true", in_key=flow, local_ip="8.0.88.201", out_key=flow, remote_ip="8.0.88.202"} Bridge br-int Controller "tcp:127.0.0.1:6633" is_connected: true fail_mode: secure Port "qr-11591618-c4" tag: 3 Interface "qr-11591618-c4" type: internal Port patch-tun Interface patch-tun type: patch options: {peer=patch-int} Port int-br-ext Interface int-br-ext type: patch options: {peer=phy-br-ext} 

    Bridge

    Bridge代表一个以太网交换机(Switch),一个主机中可以创建一个或者多个Bridge。Bridge的功能是根据一定规则,把从端口收到的数据包转发到另一个或多个端口,上面例子中有三个Bridge,br-tunbr-intbr-ext

    添加一个网桥br0

    ovs-vsctl add-br br0  
    
    

    Port

    端口Port与物理交换机的端口概念类似,Port是OVS Bridge上创建的一个虚拟端口,每个Port都隶属于一个Bridge。Port有以下几种类型

    • Normal

    可以把操作系统中已有的网卡(物理网卡em1/eth0,或虚拟机的虚拟网卡tapxxx)挂载到ovs上,ovs会生成一个同名Port处理这块网卡进出的数据包。此时端口类型为Normal。

    如下,主机中有一块物理网卡eth1,把其挂载到OVS网桥br-ext上,OVS会自动创建同名Port eth1

    ovs-vsctl add-port br-ext eth1
    #Bridge br-ext中出现Port "eth1"
    
    

    有一点要注意的是,挂载到OVS上的网卡设备不支持分配IP地址,因此若之前eth1配置有IP地址,挂载到OVS之后IP地址将不可访问。这里的网卡设备不只包括物理网卡,也包括主机上创建的虚拟网卡

    • Internal

    Internal类型是OVS内部创建的虚拟网卡接口,每创建一个Port,OVS会自动创建一个同名接口(Interface)挂载到新创建的Port上。接口的概念下面会提到。

    下面创建一个网桥br0,并创建一个Internal类型的Port p0

    ovs-vsctl add-br br0   
    ovs-vsctl add-port br0 p0 -- set Interface p0 type=internal
    
    #查看网桥br0   
    ovs-vsctl show br0
        Bridge "br0"
            fail_mode: secure
            Port "p0" Interface "p0" type: internal Port "br0" Interface "br0" type: internal 

    可以看到有两个Port。当ovs创建一个新网桥时,默认会创建一个与网桥同名的Internal Port。在OVS中,只有”internal”类型的设备才支持配置IP地址信息,因此我们可以为br0接口配置一个IP地址,当然p0也可以配置IP地址

    ip addr add 192.168.10.11/24 dev br0
    ip link set br0 up
    #添加默认路由
    ip route add default via 192.168.10.1 dev br0
    
    

    上面两种Port类型区别在于,Internal类型会自动创建接口(Interface),而Normal类型是把主机中已有的网卡接口添加到OVS中

    • Patch

    当主机中有多个ovs网桥时,可以使用Patch Port把两个网桥连起来。Patch Port总是成对出现,分别连接在两个网桥上,从一个Patch Port收到的数据包会被转发到另一个Patch Port,类似于Linux系统中的veth。使用Patch连接的两个网桥跟一个网桥没什么区别,OpenStack Neutron中使用到了Patch Port。上面网桥br-ext中的Port phy-br-extbr-int中的Port int-br-ext是一对Patch Port

    可以使用ovs-vsctl创建patch设备,如下创建两个网桥br0,br1,然后使用一对Patch Port连接它们

    ovs-vsctl add-br br0
    ovs-vsctl add-br br1
    ovs-vsctl \
    -- add-port br0 patch0 -- set interface patch0 type=patch options:peer=patch1 \
    -- add-port br1 patch1 -- set interface patch1 type=patch options:peer=patch0
    
    #结果如下 #ovs-vsctl show Bridge "br0" Port "br0" Interface "br0" type: internal Port "patch0" Interface "patch0" type: patch options: {peer="patch1"} Bridge "br1" Port "br1" Interface "br1" type: internal Port "patch1" Interface "patch1" type: patch options: {peer="patch0"} 

    连接两个网桥不止上面一种方法,linux中支持创建Veth设备对,我们可以首先创建一对Veth设备对,然后把这两个Veth分别添加到两个网桥上,其效果跟OVS中创建Patch Port一样,只是性能会有差别

    #创建veth设备对veth-a,veth-b
    ip link add veth-a type veth peer name veth-b
    #使用Veth连接两个网桥
    ovs-vsctl add-port br0 veth-a ovs-vsctl add-port br1 veth-b 
    • Tunnel

    OVS中支持添加隧道(Tunnel)端口,常见隧道技术有两种grevxlan。隧道技术是在现有的物理网络之上构建一层虚拟网络,上层应用只与虚拟网络相关,以此实现的虚拟网络比物理网络配置更加灵活,并能够实现跨主机的L2通信以及必要的租户隔离。不同隧道技术其大体思路均是将以太网报文使用隧道协议封装,然后使用底层IP网络转发封装后的数据包,其差异性在于选择和构造隧道的协议不同。Tunnel在OpenStack中用作实现大二层网络以及租户隔离,以应对公有云大规模,多租户的复杂网络环境。

    OpenStack是多节点结构,同一子网的虚拟机可能被调度到不同计算节点上,因此需要有隧道技术来保证这些同子网不同节点上的虚拟机能够二层互通,就像他们连接在同一个交换机上,同时也要保证能与其它子网隔离。

    OVS在计算和网络节点上建立隧道Port来连接各节点上的网桥br-int,这样所有网络和计算节点上的br-int互联形成了一个大的虚拟的跨所有节点的逻辑网桥(内部靠tunnel id或VNI隔离不同子网),这个逻辑网桥对虚拟机和qrouter是透明的,它们觉得自己连接到了一个大的br-int上。从某个计算节点虚拟机发出的数据包会被封装进隧道通过底层网络传输到目的主机然后解封装。

    上面网桥br-tunPort "vxlan-080058ca"就是一个vxlan类型tunnel端口。下面使用两台主机测试创建vxlan隧道

    #主机192.168.7.21上
    ovs-vsctl add-br br-vxlan
    #主机192.168.7.23上
    ovs-vsctl add-br br-vxlan
    #主机192.168.7.21上添加连接到7.23的Tunnel Port
    ovs-vsctl add-port br-vxlan tun0 -- set Interface tun0 type=vxlan options:remote_ip=192.168.7.23 #主机192.168.7.23上添加连接到7.21的Tunnel Port ovs-vsctl add-port br-vxlan tun0 -- set Interface tun0 type=vxlan options:remote_ip=192.168.7.21 

    然后,两个主机上桥接到br-vxlan的虚拟机就像连接到同一个交换机一样,可以实现跨主机的L2连接,同时又完全与物理网络隔离。

    Interface

    Interface是连接到Port的网络接口设备,是OVS与外部交换数据包的组件,在通常情况下,Port和Interface是一对一的关系,只有在配置Port为 bond模式后,Port和Interface是一对多的关系。这个网络接口设备可能是创建Internal类型Port时OVS自动生成的虚拟网卡,也可能是系统的物理网卡或虚拟网卡(TUN/TAP)挂载在ovs上。 OVS中只有”Internal”类型的网卡接口才支持配置IP地址

    Interface是一块网络接口设备,负责接收或发送数据包,Port是OVS网桥上建立的一个虚拟端口,Interface挂载在Port上。

    Controller

    OpenFlow控制器。OVS可以同时接受一个或者多个OpenFlow控制器的管理。主要作用是下发流表(Flow Tables)到OVS,控制OVS数据包转发规则。控制器与OVS通过网络连接,不一定要在同一主机上

    可以看到上面实例中三个网桥br-int,br-ext,br-tun都连接到控制器Controller "tcp:127.0.0.1:6633

    datapath

    OVS内核模块,负责执行数据交换。其内部有作为缓存使用的flows,上面已经介绍过

    OVS中的各种流(flows)

    flows是OVS进行数据转发策略控制的核心数据结构,区别于Linux Bridge是个单纯基于MAC地址学习的二层交换机,flows的存在使OVS作为一款SDN交换机成为云平台网络虚拟机化主要组件

    OVS中有多种flows存在,用于不同目的,但最主要的还是OpenFlow flows这种,文中未明确说明的flows都是指OpenFlow flows

    OpenFlow flows

    OVS中最重要的一种flows,Controller控制器下发的就是这种flows,OVS架构部分已经简单介绍过,关于openflow的具体使用,会在另一篇文章中说明

    “hidden” flows

    OVS在使用OpenFlow flow时,需要与OpenFlow控制器建立TCP连接,若此TCP连接不依赖OVS,即没有OVS依然可以建立连接,此时就是out-of-band control模式,这种模式下不需要”hidden” flows

    但是在in-band control模式下,TCP连接的建立依赖OVS控制的网络,但此时OVS依赖OpenFLow控制器下发的flows才能正常工作,没法建立TCP连接也就无法下发flows,这就产生矛盾了,因此需要存在一些”hidden” flows,这些”hidden” flows保证了TCP连接能够正常建立。关于in-band control详细介绍,参考OVS官方文档Design Decisions In Open vSwitchIn-Band Control部分

    “hidden” flows优先级高于OpenFlow flows,它们不需要手动设置。可以使用ovs-appctl查看这些flows,下面命令输出内容包括OpenFlow flows,"hidden" flows

    ovs-appctl bridge/dump-flows <br>
    
    

    datapath flows

    datapath flows是datapath内核模块维护的flows,由内核模块维护意味着我们并不需要去修改管理它。与OpenFlow flows不同的是,它不支持优先级,并且只有一个表,这些特点使它非常适合做缓存。与OpenFlow一样的是它支持通配符,也支持指令集(多个action)

    datapath flows可以来自用户空间ovs-vswitchd缓存,也可以是datapath内核模块进行MAC地址学习到的flows,这取决与OVS是作为SDN交换机,还是像Linux Bridge那样只是一个简单基于MAC地址学习的二层交换机

    管理flows的命令行工具

    我们可以修改和配置的是OpenFlow flows。datapath flow和”hidden” flows由OVS自身管理,我们不必去修改它。当然,调试场景下还是可以使用工具修改的

    介绍下上面三种flows管理工具,不具体说明,具体使用可以查看相关man手册

    • ovs-ofctl dump-flows <br> 打印指定网桥内的所有OpenFlow flows,可以存在多个流表(flow tables),按表顺序显示。不包括”hidden” flows。这是最常用的查看flows命令,当然这条命令对所有OpenFlow交换机都有效,不单单是OVS

    • ovs-appctl bridge/dump-flows <br> 打印指定网桥内所有OpenFlow flows,包括”hidden” flows,in-band control模式下排错可以用到

    • ovs-dpctl dump-flows [dp] 打印内核模块中datapath flows,[dp]可以省略,默认主机中只有一个datapath system@ovs-system
      man手册可以找到非常详细的用法说明,注意ovs-ofctl管理的是OpenFlow flows

    ovs-*工具的使用及区别

    上面介绍了OVS用户空间进程以及控制器和OpenFlow协议,这里说下相关的命令行工具的使用及区别

    ovs-vsctl

    ovs-vsctl是一个管理或配置ovs-vswitchd的高级命令行工具,高级是说其操作对用户友好,封装了对数据库的操作细节。它是管理OVS最常用的命令,除了配置flows之外,其它大部分操作比如Bridge/Port/Interface/Controller/Database/Vlan等都可以完成

    #添加网桥br0
    ovs-vsctl add-br br0
    #列出所有网桥 
    ovs-vsctl list-br
    #添加一个Port p1到网桥br0
    ovs-vsctl add-port br0 p1
    #查看网桥br0上所有Port   
    ovs-vsctl list-ports br0
    #获取br0网桥的OpenFlow控制器地址,没有控制器则返回空 ovs-vsctl get-controller br0 #设置OpenFlow控制器,控制器地址为192.168.1.10,端口为6633 ovs-vsctl set-controller br0 tcp:192.168.1.10:6633 #移除controller ovs-vsctl del-controller br0 #删除网桥br0 ovs-vsctl del-br br0 #设置端口p1的vlan tag为100 ovs-vsctl set Port p1 tag=100 #设置Port p0类型为internal ovs-vsctl set Interface p0 type=internal #添加vlan10端口,并设置vlan tag为10,Port类型为Internal ovs-vsctl add-port br0 vlan10 tag=10 -- set Interface vlan10 type=internal #添加隧道端口gre0,类型为gre,远端IP为1.2.3.4 ovs-vsctl add-port br0 gre0 -- set Interface gre0 type=gre options:remote_ip=1.2.3.4 

    ovsdb-tool

    ovsdb-tool是一个专门管理OVS数据库文件的工具,不常用,它不直接与ovsdb-server进程通信

    #可以使用此工具创建并初始化database文件
    ovsdb-tool create [db] [schema]
    #可以使用ovsdb-client get-schema [database]获取某个数据库的schema(json格式)
    #可以查看数据库更改记录,具体到操作命令,这个比较有用   
    ovsdb-tool show-log -m   
    record 48: 2017-01-07 03:34:15.147 "ovs-vsctl: ovs-vsctl --timeout=5 -- --if-exists del-port tapcea211ae-10"
            table Interface row "tapcea211ae-10" (151f66b6): delete row table Port row "tapcea211ae-10" (cc9898cd): delete row table Bridge row "br-int" (fddd5e27): table Open_vSwitch row a9fc1666 (a9fc1666): record 49: 2017-01-07 04:18:23.671 "ovs-vsctl: ovs-vsctl --timeout=5 -- --if-exists del-port tap5b4345ea-d5 -- add-port br-int tap5b4345ea-d5 -- set Interface tap5b4345ea-d5 "external-ids:attached-mac=\"fa:16:3e:50:1b:5b\"" -- set Interface tap5b4345ea-d5 "external-ids:iface-id=\"5b4345ea-d5ea-4285-be99-0e4cadf1600a\"" -- set Interface tap5b4345ea-d5 "external-ids:vm-id=\"0aa2d71e-9b41-4c88-9038-e4d042b6502a\"" -- set Interface tap5b4345ea-d5 external-ids:iface-status=active" table Port insert row "tap5b4345ea-d5" (4befd532): table Interface insert row "tap5b4345ea-d5" (b8a5e830): table Bridge row "br-int" (fddd5e27): table Open_vSwitch row a9fc1666 (a9fc1666): ... 

    ovsdb-client

    ovsdb-clientovsdb-server进程的命令行工具,主要是从正在运行的ovsdb-server中查询信息,操作的是数据库相关

    #列出主机上的所有databases,默认只有一个库Open_vSwitch
    ovsdb-client list-dbs
    #获取指定数据库的schema信息
    ovsdb-client get-schema [DATABASE]
    #列出指定数据库的所有表 ovsdb-client list-tables [DATABASE] #dump指定数据库所有数据,默认dump所有table数据,如果指定table,只dump指定table数据 ovsdb-client dump [DATABASE] [TABLE] #监控指定数据库中的指定表记录改变 ovsdb-client monitor DATABASE TABLE 

    ovs-ofctl

    ovs-ofctl是专门管理配置OpenFlow交换机的命令行工具,我们可以用它手动配置OVS中的OpenFlow flows,注意其不能操作datapath flows和”hidden” flows

    #查看br-tun中OpenFlow flows
    ovs-ofctl dump-flows br-tun
    #查看br-tun端口信息   
    ovs-ofctl show br-tun
    #添加新的flow:对于从端口p0进入交换机的数据包,如果它不包含任何VLAN tag,则自动为它添加VLAN tag 101
    ovs-ofctl add-flow br0 "priority=3,in_port=100,dl_vlan=0xffff,actions=mod_vlan_vid:101,normal" #对于从端口3进入的数据包,若其vlan tag为100,去掉其vlan tag,并从端口1发出 ovs-ofctl add-flow br0 in_port=3,dl_vlan=101,actions=strip_vlan,output:1 #添加新的flow: 修改从端口p1收到的数据包的源地址为9.181.137.1,show 查看p1端口ID为100 ovs-ofctl add-flow br0 "priority=1 idle_timeout=0,in_port=100,actions=mod_nw_src:9.181.137.1,normal" #添加新的flow: 重定向所有的ICMP数据包到端口 p2 ovs-ofctl add-flow br0 idle_timeout=0,dl_type=0x0800,nw_proto=1,actions=output:102 #删除编号为 100 的端口上的所有流表项 ovs-ofctl del-flows br0 "in_port=100" 

    ovs-vsctl是一个综合的配置管理工具,ovsdb-client倾向于从数据库中查询某些信息,而ovsdb-tool是维护数据库文件工具

    转载地址http://www.isjian.com/openstack/openstack-base-use-openvswitch/



    作者:杀破魂
    链接:https://www.jianshu.com/p/9b1fa7b1b705
    来源:简书
    简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。

    转载于:https://www.cnblogs.com/liuhongru/p/11398658.html

    展开全文
  • ovs qinq

    2021-01-08 17:12:35
    网络拓扑 h1 -- eth1- s3 -eth2 -- eth1- s4 -eth2 -- h2 h1-eth0<->s3-eth1 (OK OK) dot1q-tunnel tag=100 s3-eth2<->s4-eth1 (OK OK) trunk=100 trunk=100 s4-eth2<...ovs-vsctl set p
  • OVS 入门教程

    2018-07-17 16:47:03
    从工程角度实验角度和了解原理角度进行讲解,不紧包括非常好的原理简介,图表,以及包含OVS架构,支持的多种Flow原理和流表转发,还有很多实验以供进一步加强学习。
  • ovs 工具

    2021-08-27 10:33:55
    ovs-vsctl set Open_vSwitch . other_config:max-idle="180000
  • OVSOVS-DPDK 对比

    千次阅读 2020-05-21 08:13:00
    本文参考下面这篇论文,只挑取了其中关于 OVSOVS-DPDK 对比的部分进行讲解,更多内容,大家有兴趣可以看论文:https://networkbuilders.intel.co...
  • ovs 实验

    2020-05-27 23:19:20
    ovs tunnel test: VxLAN: VM1: ifconfig eth0 192.168.2.12 ovs-vsctl add-br br0 ifconfig br0 10.1.1.2 up ovs-vsctl add-port br0 vxlan0 -- set interface vxlan0 type=vxlan options:local_ip=192.168....
  • ovs常用命令

    2021-01-17 23:01:02
    ovs-vsctl 用于控制 ovs db、网桥、接口、控制器等 ovs-ofctl 用于管理 OpenFlow switch 的 flow ovs-dpctl 用于管理 ovs 的 datapath ovs-appctl 用于查询和管理 ovs 功能,例如arp、route、bond、lacp、stp等 列出...
  • ovs QOS

    2019-03-09 15:15:00
    实验拓扑 拓扑实现脚本 ip netns add ns1 ip netns add ns2 ip netns add ns3 ...ovs-vsctl add-br br0 ...ovs-vsctl add-br br1 ...ovs-vsctl add-port br0 tap1 -- set Interface tap1...
  • ovs测试vlan

    2020-07-24 09:34:38
    ovs端口默认是trunk模式,且所有的VLAN tag都可以通过。 单个网桥实现vlan隔离的场景 实验拓扑如下: 1、首先创建一个网桥ovs-switch,在命名空间里创建两个接口p0和p1。分别分配地址为192.168.1.100/24和192.168.1...
  • Heroku-ovs-源码

    2021-02-26 01:04:58
    Heroku-ovs
  • ovs_code-源码

    2021-02-11 21:00:33
    ovs_code
  • OVS编译

    2019-10-07 07:56:48
    下载源码 # git clone ...# cd ovs # git checkout branch-2.8 下载依赖包 # yum install -y epel-release # yum install -y autoconf automake libtool gcc clang openssl-devel l...
  • ovs命令

    2018-06-06 18:47:05
    OVS常用命令与使用总结说明在平时使用ovs中,经常用到的ovs命令,参数,与举例总结,持续更新中…进程启动1.先准备ovs的工作目录,数据库存储路径等mkdir -p /etc/openvswitch mkdir -p /var/run/openvswitch122.先...
  • ovs 命令

    2017-04-27 17:18:16
    查看留表:ovs-ofctl dump-flows br-ovs
  • ovs stp

    2019-03-09 16:16:00
    环路拓扑 组成拓扑结构的脚本 构成连通脚本 ip netns add ns1 ...ovs-vsctl add-port br1 tap1 -- set Interface tap1 type=internal ip link set tap1 netns ns1 ip netns exec ns1 ip addr add 1.1....

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 12,221
精华内容 4,888
关键字:

ovs