Open vSwitch中有多个命令,分别有不同的作用,大致如下:

  • ovs-vsctl用于控制ovs db
  • ovs-ofctl用于管理OpenFlow switch 的 flow
  • ovs-dpctl用于管理ovs的datapath
  • ovs-appctl用于查询和管理ovs daemon

本文主要介绍ovs-vsctl。以下命令查询主机上已有的 OVS bridge,以及其中的 port。

ovs-vsctl show

例子

$ ovs-vsctl show
fc562da8-fb36-4d62-8b47-5502e72069dc
Bridge br-vxlan
Port "vxlan0"
Interface "vxlan0"
type: vxlan
options: {remote_ip="10.10.10.1"}
Port br-vxlan
Interface br-vxlan
type: internal
Port "veth2"
Interface "veth2"
ovs_version: "2.5.0"

Bridge 相关命令

创建 bridge

创建bridge(或switch,以下统称为bridge) br0

使用选项--may-exist后,若欲创建的bridge已存在,该命令什么也不做,也不报错。

ovs-vsctl [--may-exist] add-br br0

删除bridge

删除 bridge br0

使用选项--if-exists后,若欲删除的bridge不存在,该命令什么也不做,也不报错。

ovs-vsctl [--if-exists] del-br br0

查询已有的 bridge

ovs-vsctl list-br

端口相关命令

添加端口

添加端口(物理端口或vNIC)eth1到bridge eth1中

ovs-vsctl [--may-exist] add-port br0 eth1

创建 bond

在br0上创建一个bond了eth0,eth1和eth2的bond端口bond0

# ovs-vsctl add-bond <bridge> <port> <iface...>
ovs-vsctl add-bond br0 bond0 eth0 eth1 eth2

移除端口

从br0上移除端口eth1

ovs-vsctl [--if-exists] del-port br0 eth1

列出端口

列出br0上的端口(不包括internal port)

ovs-vsctl list-ports br0

查看端口详细数据

列出OVS中端口eth1的详细数据

$ ovs-vsctl list interface eth1

OpenFlow 控制器相关

添加控制器

# ovs-vsctl set-controller <bridge> <target...>
ovs-vsctl set-controller br0 tcp:1.2.3.4:6633 # 设置多个controller
ovs-vsctl set-controller br0 tcp:1.2.3.4:6633 tcp:4.3.2.1:6633 # 添加使用unix socket通信的controller
ovs-vsctl set-controller br0 unix:/var/run/xx/xx.sock

移除控制器

ovs-vsctl del-controller br0

查询 brige 上已配置的控制器

ovs-vsctl get-controller br0

VLAN 相关

配置端口为Access口

设置br0中的端口eth0为VLAN 10的access口

ovs-vsctl set port eth0 tag=10

添加eth1到指定bridge br0中,同时将其配置成指定VLAN 10的access端口

ovs-svctl add-port br0 eth1 tag=10

配置端口为Trunk口

在br0上添加port eth1为VLAN 9,10,11的trunk

ovs-vsctl add-port br0 eth1 trunk=9,10,11

VXLAN 相关

在bridge ovs0中添加远端IP为10.10.10.1的VXLAN endpoint端口vxlan0

# key=100表示设置vni为100,不设置默认为0
ovs-vsctl add-port ovs0 vxlan0 -- set interface vxlan0 type=vxlan options:remote_ip=10.10.10.1 options:key=100 # 不设key值,vni默认为0
ovs-vsctl add-port ovs0 vxlan0 -- set interface vxlan0 type=vxlan options:remote_ip=10.10.10.1 # key=flow的话,表示该port的vni可以通过openflow的actions来进行设置
# 如: actions=set_field:100->tun_id
# 或: actions=set_tunnel:100
ovs-vsctl add-port ovs0 vxlan0 -- set interface vxlan0 type=vxlan options:remote_ip=10.10.10.1 options:key=flow

其他

Atomic operation

一条命令创建bridge br0的,并添加eth0到br0中

ovs-vsctl add-br br0 -- add-port br0 eth0

创建 internal port

OVS internal port 可以配置IP地址,普通 port 上配置的IP地址是不起作用的。在 br0 上创建一个internal port in0:

ovs-vsctl add-br br0 in0 -- set interface in0 type=internal
ip addr add 10.10.10.10/24 dev in0 # 创建internal port的同时将其设置为VLAN 10的access port
ovs-vsctl add-br br0 in1 tag=10 -- set interface in1 type=internal
ip addr add 20.20.20.20/24 dev in1

设置 OpenFlow port id

# 将已在ovs中的端口veth1的OpenFlow端口设置成100
ovs-vsctl set interface veth1 ofport_request=100 # 将端口veth1添加到bridge br0中,并将veth1的OpenFlow端口设置成200
ovs-vsctl add-port br0 veth1 -- set interface veth1 ofport_request=200

{% admonition note Note %} OpenFlow的端口 id 在设置 flow 的匹配字段 in_port 以及 actions 字段的 output 中都会用到。 
可以通过命令ovs-ofctl show br0来查看 br0 中各端口的 OpenFlow 端口 id,该 id 并不求是按顺序的。 {% endadmonition %}

设置OpenFlow版本

ovs-vsctl set bridge br0 protocols=OpenFlow10,OpenFlow12,OpenFlow13
 

ovs-vsctl 命令详解的更多相关文章

  1. Git初探--笔记整理和Git命令详解

    几个重要的概念 首先先明确几个概念: WorkPlace : 工作区 Index: 暂存区 Repository: 本地仓库/版本库 Remote: 远程仓库 当在Remote(如Github)上面c ...

  2. linux yum命令详解

    yum(全称为 Yellow dog Updater, Modified)是一个在Fedora和RedHat以及SUSE中的Shell前端软件包管理器.基於RPM包管理,能够从指定的服务器自动下载RP ...

  3. Linux下ps命令详解 Linux下ps命令的详细使用方法

    http://www.jb51.net/LINUXjishu/56578.html Linux下的ps命令比较常用 Linux下ps命令详解Linux上进程有5种状态:1. 运行(正在运行或在运行队列 ...

  4. Docker命令详解

    Docker命令详解   最近学习Docker,将docker所有命令实验了一番,特整理如下: # docker --help Usage: docker [OPTIONS] COMMAND [arg ...

  5. linux awk命令详解

    linux awk命令详解 简介 awk是一个强大的文本分析工具,相对于grep的查找,sed的编辑,awk在其对数据分析并生成报告时,显得尤为强大.简单来说awk就是把文件逐行的读入,以空格为默认分 ...

  6. android adb 命令详解

    ADB (Android Debug Bridge)  是android SDK中的工具,需要先配置环境变量才能使用.起调试桥的作用,可以管理安卓设备.(也叫debug工具) ---------查看设 ...

  7. Git 常用命令详解

    Git 是一个很强大的分布式版本管理工具,它不但适用于管理大型开源软件的源代码(如:linux kernel),管理私人的文档和源代码也有很多优势(如:wsi-lgame-pro) Git 的更多介绍 ...

  8. Top 命令详解

    Top 命令详解 先感受一下top命令的执行结果吧!哈哈-- top - 17:32:34 up 3 days, 8:04, 5 users, load average: 0.09, 0.12, 0. ...

  9. Ruby Gem命令详解

    转自:http://www.jianshu.com/p/728184da1699 Gem介绍: Gem是一个管理Ruby库和程序的标准包,它通过Ruby Gem(如 http://rubygems.o ...

  10. DOS命令详解

    DOS命令详解 命令 \? 可以进入命令帮助 1.md命令创建目录. MKDIR [drive:]pathMD [drive:]path 如果命令扩展被启用,MKDIR 会如下改变: 如果需要,MKD ...

随机推荐

  1. git设置别名alias

    每次用git拉去版本库都很烦,特别是要从非origin源,非master分支, 例如 git pull gitlab mybranch ,这样很蛋疼. 1.写个sh去处理 2.可以通过git的别名设置 ...

  2. JSP的内置对象application、session、request、page的作用域

    1.application内置对象的类型名称为ServletContext. 2.session内置对象的类型名称为HttpSession. 3.application作用域:对应整个应用上下文. a ...

  3. Django之ORM数据库

    5.1 数据库的配置 1    django默认支持sqlite,mysql, oracle,postgresql数据库.  <1> sqlite django默认使用sqlite的数据库 ...

  4. c++ 对象复制引用时何时调用构造函数、析构函数

    class TEST{ private : public : TEST() {std::cout << "constructor" << std::endl ...

  5. 创建WRAPPER时, SQL20076N 未对指定的操作启用数据库的实例。

    您可以通过运行DB2 UPDATE DBM CFG USING FEDERATED YES来设置这个参数.修改这个参数后,必须重新启动实例才会生效(DB2STOP/DB2START).所以你会出现你的 ...

  6. JavaScript的异步运行机制

    ----异步运行机制如下: 1.左右同步任务都在主线程上执行,形成一个执行栈 2.主线程值外,还存在一个任务队列,只要异步任务有了运行结果,就在任务队列中放置一个事件 3.一旦执行栈中的所有同步任务执 ...

  7. JavaScript 闭包的例子

    例子出自<<JavaScript权威指南>>, 加上个人的理解和总结, 欢迎交流! /********************************************* ...

  8. SQLALchemy--ORM框架

    SQLAlchemy 1.介绍 SQLAlchemy是一个基于Python实现的ORM框架.该框架建立在 DB API之上,使用关系对象映射进行数据库操作,简言之便是:将类和对象转换成SQL,然后使用 ...

  9. 2018.10.08 NOIP模拟 斐波那契(贪心+hash/map)

    传送门 签到题. 显然是可以贪心分组的,也就是尽量跟当前的分成一组. 这时我们需要判断a[l]+a[r],a[l+1]+a[r]...a[r−1]+a[r]a[l]+a[r],a[l+1]+a[r]. ...

  10. 2018.07.01 BZOJ3295: [Cqoi2011]动态逆序对(带修主席树)

    3295: [Cqoi2011]动态逆序对 **Time Limit: 10 Sec Memory Limit: 128 MB Description 对于序列A,它的逆序对数定义为满足i<j& ...