用于监控和管理 OpenFlow 交换机。

1. 交换机管理命令

查看交换机信息:

ovs-ofctl show s1

 查看交换机流表:

ovs-ofctl dump-tables s1

查看端口信息

ovs-ofctl dump-ports s1
ovs-ofctl dump-ports s1 1

第一个查看所有端口,第二个只查看端口号为 1 的端口;

查看流表项:

ovs-ofctl dump-flows s1
ovs-ofctl dump-flows s1 table=0

第一个查看所有,第二个查看指定流表项;

2. 流表命令

添加流表项:

ovs-ofctl [--bundle] add-flow switch flow
ovs-ofctl [--bundle] add-flow switch - < file
ovs-ofctl [--bundle] add-flows switch file

--bundle:以原子形式执行命令;

--strict:取消对通配符的支持;

可以将流表项写入一个文件,然后从文件中读取执行;文件的每一行表示一条流表项,每行可以以关键字 add, modify, delete, modify_strict, delete_strict 开头,表示执行何种操作;

# ovs-ofctl add-flow s1 "priority=3,in_port=1,dl_vlan=0xffff,actions=mod_vlan_vid:101,normal"

# cat flows.txt
add priority=3,in_port=1,dl_vlan=0xffff,actions=mod_vlan_vid:101,normal
# ovs-ofctl add-flows s1 flows.txt # cat flows.txt
delete in_port=1,dl_vlan=0xffff
# ovs-ofctl add-flows s1 flows.txt

修改流表项:

ovs-ofctl [--bundle] [--strict] mod-flows switch flow
ovs-ofctl [--bundle] [--strict] mod-flows switch - < file
# cat flows.txt
priority=3,in_port=1,dl_vlan=0xffff,actions=mod_vlan_vid:102,normal
# ovs-ofctl mod-flows s1 - < flows.txt

删除流表项:

ovs-ofctl [--bundle] del-flows switch
ovs-ofctl [--bundle] [--strict] del-flows switch [flow]
ovs-ofctl [--bundle] [--strict] del-flows switch - < file
ovs-ofctl del-flows s1 "in_port=1,dl_vlan=0xffff"

替换流表项:

ovs-ofctl [--bundle] [--readd] replace-flows switch file

使用 file 文件中的流表项替换现有的流表项;

比较流表项:

ovs-ofclt diff-flows source1 source2

source1 和 source2 可以是交换机,也可以是文件;

ovs-ofctl diff-flows s1 flows.txt

3. 组表命令

查看组表项:

ovs-ofctl dump-groups s1 -O OpenFlow13

查看组表项的统计信息:

ovs-ofctl dump-group-stats s1 -O OpenFlow13

ovs-ofctl dump-group-stats s1 group_id=1 -O OpenFlow13

第一个查看所有组表,第二个查看指定的组表;

添加组表项

ovs-ofctl [--bundle] add-group switch group
ovs-ofctl [--bundle] add-group switch - < file
ovs-ofctl [--bundle] add-groups switch file

可以将组表项写入一个文件,然后从文件中读取执行;文件的每一行表示一条组表项,每行可以以关键字 add, modify, add_or_mod, delete, insert_bucket, remove_bucket 开头,表示执行何种操作;

# 类型为all
ovs-ofctl -O OpenFlow13 add-group s1 group_id=1,type=all,bucket=output:1,bucket=output:2

# 类型为select
ovs-ofctl -O OpenFlow13 add-group s1 group_id=2,type=select,bucket=output:1,bucket=output:2

ovs-ofctl -O OpenFlow15 add-group s1 group_id=3,type=select,selection_method=hash,fields=ip_src,bucket=output:2,bucket=output:3

修改组表项:

ovs-ofctl [--bundle] [--may-create] mod-group switch group
ovs-ofctl [--bundle] [--may-create] mod-group switch - < file
ovs-ofctl mod-group s1 group_id=1,type=all,bucket=output:1,bucket=output:2,bucket=output:3 -O OpenFlow13

删除组表项:

ovs-ofctl [--bundle] del-groups switch
ovs-ofctl [--bundle] del-groups switch [group]
ovs-ofctl [--bundle] del-groups switch - < file
ovs-ofctl del-groups s1 group_id=1 -O OpenFlow13

删除桶:

ovs-ofctl [--bundle] remove-buckets switch group
ovs-ofctl [--bundle] remove-buckets switch - < file
ovs-ofctl remove-buckets s1 group_id=3,command_bucket_id=1

删除 id 为 1 的桶;

4. 计量表命令

要正常使用的话,需要注意的是datapath类型要指定为 netdev.

ovs-vsctl set bridge s1 datapath_type=netdev

查看计量表:

ovs-ofctl dump-meters s1 -O OpenFlow13

查看计量表统计信息:

ovs-ofctl meter-stats s1 -O OpenFlow13

添加计量表项:

ovs-ofctl add-meter s1 meter=1,kbps,bands=type=drop,rate=5000 -O OpenFlow13

修改计量表项

ovs-ofctl mod-meter s1 meter=1,kbps,band=type=drop,rate=2000 -O OpenFlow13

删除计量表项:

ovs-ofctl del-meters s1 meter=1 -O OpenFlow13

5. flow语法

table=table

  指定要应用与哪个表;table可以是数字(0~255),也可以时表名。

actions=[action][,action...]

  指定流项要应用的动作。

cookie=value

cookie=value/mask

  设置cookie。

priority=value

  指定优先级(0~65535);值越大,优先级越高;默认为32768.

idle_timeout=seconds

  如果流项处于非活跃状态的时间超过指定的值,则应该过期;0表示不过期。

hard_timeout=seconds

  指定多长时间后过期;0表示不过期。

importance=value

  指定重要性(0~65535),默认为0.

send_flow_rem

  当流项过期或被移除时,向感兴趣的控制器发送一条消息。

reset_counts

  当添加一条已存在的流项时,将packet和byte计数器置为0.

no_packet_counts

no_byte_counts

  告知交换机控制器不需要packet或byte计数器。

out_port=port

  指定一个匹配的流应将数据包从port转发出去。

out_group=group

  指定一个匹配的流应包含group action;group需为组号。

6. 流表项输出

duration=secs

  表项已在表中多长时间。

n_packets=n

  已有多少个数据包匹配该项。

n_bytes=n

  已匹配该项的数据包的总字节数。

hard_age=secs

  自流项添加进流表或被修改起过了多长时间。

idle_age=secs

  已有多长时间没有匹配过数据包。

7. group语法

group_id=id

  指定组ID;all表示所有组。

type=type

  指定组类型;可选值有:

  all

  select

  indirect

  fffast_failover

command_bucket_id=id

  指定要操作的bucket;可以为一个整数,也可以为如下值:

  all: 所有bucket;

  first: 第一个bucket;

  last: 最后一个bucket;

selection_method=method

  针对于select类型的组,指定选择bucket的方法;可选值有:

  dp_hash: 基于数据路径计算哈希值;通过selection_method_param参数指定哈希算法,可选值有

    0 (corresponding to hash computation over the IP 5-tuple)

    1 (corresponding  to a  symmetric  hash computation over the IP 5-tuple);

  hash: 基于fields选项指定的字段计算哈希值;也可不指定fields选项,此时会使用默认值进行计算;

bucket=bucket_parameters

  需出现在所有字段之后;

  bucket_id=id  指定bucket的组ID;

  actions=[action][,action...]  指定要应用的动作;

  weight=value  指定bucket的相对权重;

  watch_port=port  用于决定组存活性的端口;

  watch_group=group_id  用于绝对组存活性的组ID;

  

8. meter语法

meter=id

  指定计量ID;除了支持整数外,还支持如下值:

  all: 所有meter

  controller:此meter会应用到所有发送到控制器的数据包;

  slowpath:此meter会应用到所有发送到用户空间的数据包;

kbps

pktps

  指定速率单位、burst_size单位;kbps:KB/s,pktps:packets/s;

burst

  支持波动;

stats

  收集meter和band的统计信息;

bands=band_parameters

  type=type  指定band类型,支持的值有:drop(丢弃数据包);

  rate=value  指定速率限制;

  burst_size=size  指定最大的波动范围;

参考资料

https://www.openvswitch.org/support/dist-docs/ovs-ofctl.8.txt

http://www.openvswitch.org/support/dist-docs/ovs-fields.7.txt

https://www.openvswitch.org/support/dist-docs/ovs-actions.7.txt

https://blog.csdn.net/rocson001/article/details/73163041

https://www.cnblogs.com/wpqwpq/p/7832650.html

table=table

ovs-ofctl命令的更多相关文章

  1. OVS常用命令与使用总结

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

  2. OVS常用命令

    添加brideg: sudo ovs-vsctl add-br br0 删除brideg: sudo ovs-vsctl del-br br0 显示bridge: sudo ovs-vsctl sho ...

  3. ovs flow 命令集

    流表可以有多个执行动作,是从左向右以此执行,常用动作如下: output:port: 输出数据包到指定的端口.port 是指端口的 OpenFlow 端口编号 group:group_id 输出数据包 ...

  4. Open vSwitch 应用实践

    基础配置以及要点: 1.交换机创建和端口的配置 1) 创建一个新的 OVS 交换机[格式:$ ovs-vsctl add-br [名称]] $ovs-vsctl add-br ovs-switch 2 ...

  5. ovs-appctl 命令合集

    通用命令 exit 优雅关闭ovs-vswitchd进程 qos/show interface 查询内核中关于qos的配置以及和给出端口有关的状态 cfm/show [interface]显示在指定端 ...

  6. ubuntu 14.04设备OVS虚拟OpenFlow交换机配置汇总

    一.设备OVS sudo apt-get install openvswitch-controller openvswitch-switch openvswitch-datapath-source ( ...

  7. ovs常用操作

    1.添加网桥:ovs-vsctl add-br 交换机名 2.删除网桥:ovs-vsctl del-br 交换机名 3.添加端口:ovs-vsctl add-port 交换机名 端口名(网卡名) 4. ...

  8. OVS

    基于 OpenvSwitch的OpenFlow实践 Open vSwitch 概述 OpenvSwitch(简称OVS)是由NiciraNetworks主导的,运行在虚拟化平台(例如 KVM,Xen) ...

  9. ubuntu 14.04安装OVS虚拟OpenFlow交换机配置总结

    一.安装OVS sudo apt-get install openvswitch-controller openvswitch-switch openvswitch-datapath-source ( ...

  10. Neutron之OVS

    OVS即开放虚拟交换标准,不仅仅是为了支持OpenFlow协议,而是为了给虚拟化平台上运行的虚拟机实例提供一套纯软件实现的路由交换协议栈.具体点说,Open vSwitch是在开源的Apache2.0 ...

随机推荐

  1. C# 并发编程 (异步编程与多线程)

    并发:同时做多件事情 多线程:并发的一种形式,它采用多个线程来执行程序. 并行处理:把正在执行的大量的任务分割成小块,分配给多个同时运行的线程.并行处理是多线程的一种,而多线程是并发的一种. 异步编程 ...

  2. Visual Studio 默认git拉取Github出错 No error could not read Username for 'https://github.com': terminal prompts disabled

    发布到远程存储库时遇到错误: Git failed with a fatal error.fatal: HttpRequestException encountered.   ��������ʱ��� ...

  3. 前端可视化开发--liveload

    在前端开发中,我们会频繁的修改html.css.js,然后刷新页面,开效果,再调整,再刷新,不知不觉会浪费掉我们很多时间.有没有什么方法,我在编辑器里面改了代码以后,只要保存,浏览器就能实时刷新.经过 ...

  4. Spring循环依赖解决方式源码解析

    1. 什么是循环依赖? 循环依赖其实就是循环引用,也就是两个或则两个以上的bean互相持有对方,最终形成闭环.比如A依赖于B,B依赖于A我们直接上代码 先创建一个类ServiceA依赖于Service ...

  5. 重温Java JDK安装,希望帮助更多的学习在路上的小白

    JDK卸载和安装 现在JDK已经升级到JDK11版本了,但是JDK1.8(JDK8)仍然有很多小伙伴在使用,这里也记录一下jdk1.8的下载及安装过程,对于刚学习java的小伙伴可以参考,熟手可忽略, ...

  6. java数组之排序

    /** * String排序算法依据<b>词典编排顺序排序</b><br> * 所以大写字母开头的词都放在前面输出,之后才是小写之母开头的词 *@date:2018 ...

  7. C++模板元编程----堆排序

    目录 目录 前言 实现的一些小细节 Debug 惰性求值 总结 Ref 前言 经过前两次经验的积累,终于来到了麻烦的堆排序.在一开始接触模板元编程的时候,我就期望有一天能够写出元编程堆排序的代码.原因 ...

  8. 对象的克隆(clone方法)

    1.深拷贝与浅拷贝 浅拷贝是指拷贝对象时仅仅拷贝对象本身(包括对象中的基本变量),而不拷贝对象包含的引用指向的对象.深拷贝不仅拷贝对象本身,而且拷贝对象包含的引用指向的所有对象. 2.深拷贝和浅拷贝的 ...

  9. 关于java方法重写

    1.子类的方法与父类中的方法有相同的返回类型,相同的方法名称.相同的参数列表 2.子类方法的访问级别不能低于父类方法的访问级别 3.子类方法抛出的异常范围不能大于父类中方法抛出的异常范围

  10. 循序渐进VUE+Element 前端应用开发(32)--- 手机短信动态码登陆处理

    在一些系统中,有时候用户忘记密码,可以通过向自己手机发送动态验证码的方式实现系统登录功能.本篇随笔介绍如何结合后端ABP框架的短信发送和缓存模块的处理,实现手机短信动态码登陆处理. 一般的登录方式,分 ...