ovs-ofctl命令
阅读原文时间:2023年07月13日阅读:2

用于监控和管理 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

手机扫一扫

移动阅读更方便

阿里云服务器
腾讯云服务器
七牛云服务器

你可能感兴趣的文章