openvswitch命令与flow

发布时间: 更新时间: 总字数:921 阅读时间:2m 作者: 分享

介绍openvswitch的常用命令、流表字段、action和flow流程。

常用ovs命令行

  • ovs-ofctl --version 查看 OVS 支持的 OpenFlow 协议的版本
  • ovs-vsctl add-br ovs-switch 创建新交换机,名字是ovs-switch
  • ovs-vsctl add-port ovs-switch p0 -- set Interface p0 ofport_request=100 设置端口p0的OpenFlow 端口编号为 100
  • ovs-vsctl set Interface p0 type=internal 设置网络接口设备的类型为“internal”。对于 internal 类型的的网络接口,OVS 会同时在 Linux 系统中创建一个可以用来收发数据的模拟网络设备。我们可以为这个网络设备配置 IP 地址、进行数据监听等等
  • ethtool -i p0 查看if情况
  • ovs-vsctl show 查看ovs中所有的虚拟交换机
  • ovs-ofctl add-flow ovs-switch "table=0, dl_src=01:00:00:00:00:00/01:00:00:00:00:00, actions=drop" 屏蔽所有进入 OVS 的以太网广播数据包
  • ovs-ofctl add-flow ovs-switch "priority=1 idle_timeout=0,in_port=100,actions=mod_nw_src:9.181.137.1,normal" 修改从端口 p0 收到的数据包的源地址为 9.181.137.1
  • ovs-ofctl add-flow ovs-switch idle_timeout=0,dl_type=0x0800,nw_proto=1,actions=output:102 重定向所有的 ICMP 数据包到端口 p2
  • ovs-vsctl set Port p1 tag=101 修改端口p1的VLAN tag为101
  • ovs-ofctl add-flow ovs-switch "priority=3,in_port=100,dl_vlan=0xffff,actions=mod_vlan_vid:101,normal" 对于从端口 100 进入交换机的数据包,如果它不包含任何 VLAN tag,则自动为它添加 VLAN tag 101
  • ovs-ofctl dump-tables ovs-switch 查看交换机中的所有 Table
  • ovs−ofctl dump−flows ovs-switch 查看交换机中的所有流表项
  • ovs-ofctl del-flows ovs-switch "in_port=100" 删除编号为 100 的端口上的所有流表项
  • ovs-ofctl show ovs-switch 查看交换机上的端口对应的openflow编号
  • ovs-appctl ofproto/trace 可以测试ovs对数据包的转发情况
  • ovs-appctl ofproto/trace br-int in_port=11,dl_src=fa:16:3e:90:1C:bc,dl_dst=88:75:56:3c:62:40 -generate

常用流表字段

man ovs-ofctl中有详细介绍。

  • in_port=port 传递数据包的端口的 OpenFlow 端口编号
  • dl_vlan=vlan 数据包的 VLAN Tag 值,范围是 0-4095,0xffff 代表不包含 VLAN Tag 的数据包
  • dl_src=<MAC> 匹配源MAC 地址
    • 01:00:00:00:00:00/01:00:00:00:00:00 代表广播地址
    • 00:00:00:00:00:00/01:00:00:00:00:00 代表单播地址
  • dl_dst=<MAC> 匹配目标MAC 地址
  • dl_type=ethertype
    • dl_type=0x0800 代表 IPv4 协议
    • dl_type=0x086d 代表 IPv6 协议
    • dl_type=0x0806 代表 ARP 协议
  • nw_src=ip[/netmask] 匹配源IPv4 地址
  • nw_dst=ip[/netmask] 匹配目标IPv4 地址
  • nw_proto=proto
    • dl_type=0x0800 时,匹配 IP 协议编号
    • dl_type=0x086d 代表 IPv6 协议编号
  • arp_spa=ip[/netmask] 当dl_type是arp时,arp_spa代表源ip地址
  • arp_tpa=ip[/netmask] 当dl_type是arp时,arp_tpa代表目标ip地址
  • table=number 指定要使用的流表的编号,范围是 0-254。在不指定的情况下,默认值为 0。通过使用流表编号,可以创建或者修改多个 Table 中的 Flow

常用action

man ovs-ofctl中有详细介绍。

  • output:port 输出数据包到指定的端口。port 是指端口的 OpenFlow 端口编号
  • mod_vlan_vid:vlan_vid 修改数据包中的 VLAN tag
  • strip_vlan 移除数据包中的 VLAN tag
  • mod_dl_src:mac/mod_dl_dst:mac 修改源或者目标的 MAC 地址信息
  • mod_nw_src:ip/mod_nw_dst:ip 修改源或者目标的 IPv4 地址信息
  • resubmit([port],[table]) Re-searches this OpenFlow flow table (or the table whose number is specified by table) with the in_port field replaced by port (if port is specified) and executes the actions found, if any, in addition to any other actions in this flow entry

ovs的flow处理流程

package-flow

完毕。

Home Archives Categories Tags Docs