ovs流表高级特性(一)

摘要:
当dl_type=0x0800时,匹配IP协议编号当dl_type=0x086dd代表IPv6协议编号完整的IP协议编号可以参见IP协议编号列表table=number指定要使用的流表的编号,范围是0-254。在不指定的情况下,默认值为0。通过使用流表编号,可以创建或者修改多个Table中的Flowreg=value[/mask]交换机中的寄存器的值。
表 1. 流表常用字段
字段名称说明
in_port=port传递数据包的端口的 OpenFlow 端口编号
dl_vlan=vlan数据包的 VLAN Tag 值,范围是 0-4095,0xffff 代表不包含 VLAN Tag 的数据包
dl_src=<MAC>
dl_dst=<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_type=ethertype匹配以太网协议类型,其中:
dl_type=0x0800 代表 IPv4 协议
dl_type=0x086dd 代表 IPv6 协议
dl_type=0x0806 代表 ARP 协议
完整的的类型列表可以参见以太网协议类型列表
nw_src=ip[/netmask]
nw_dst=ip[/netmask]
当 dl_typ=0x0800 时,匹配源或者目标的 IPv4 地址,可以使 IP 地址或者域名
nw_proto=proto和 dl_type 字段协同使用。
当 dl_type=0x0800 时,匹配 IP 协议编号
当 dl_type=0x086dd 代表 IPv6 协议编号
完整的 IP 协议编号可以参见IP 协议编号列表
table=number指定要使用的流表的编号,范围是 0-254。在不指定的情况下,默认值为 0。通过使用流表编号,可以创建或者修改多个 Table 中的 Flow
reg<idx>=value[/mask]交换机中的寄存器的值。当一个数据包进入交换机时,所有的寄存器都被清零,用户可以通过 Action 的指令修改寄存器中的值

对于 add−flow,add−flows 和 mod−flows 这三个命令,还需要指定要执行的动作:actions=[target][,target...]

一个流规则中可能有多个动作,按照指定的先后顺序执行。

常见的操作有:

    • output:port: 输出数据包到指定的端口。port 是指端口的 OpenFlow 端口编号
    • mod_vlan_vid: 修改数据包中的 VLAN tag
    • strip_vlan: 移除数据包中的 VLAN tag
    • mod_dl_src/ mod_dl_dest: 修改源或者目标的 MAC 地址信息
    • mod_nw_src/mod_nw_dst: 修改源或者目标的 IPv4 地址信息
    • resubmit:port: 替换流表的 in_port 字段,并重新进行匹配
    • load:value−>dst[start..end]: 写数据到指定的字段

ip

Same asdl_type=0x0800.

icmp

Same asdl_type=0x0800,nw_proto=1.

tcp

Same asdl_type=0x0800,nw_proto=6.

udp

Same asdl_type=0x0800,nw_proto=17.

arp

Same asdl_type=0x0806.

rarp

Same asdl_type=0x8035.

1、添加一条flow:屏蔽 STP 协议的广播数据包

[root@kunpeng82 devuser]# ovs-ofctl add-flow vswitch1 "table=0, dl_dst=01:80:c2:00:00:00/ff:ff:ff:ff:ff:f0, actions=drop"
[root@kunpeng82 devuser]# ovs-appctl ofproto/trace br0 in_port=1,dl_dst=01:80:c2:00:00:05br0: unknown bridge
ovs-appctl: ovs-vswitchd: server returned an error
[root@kunpeng82 devuser]# ovs-appctl ofproto/trace vswitch1 in_port=1,dl_dst=01:80:c2:00:00:05Flow: in_port=1,vlan_tci=0x0000,dl_src=00:00:00:00:00:00,dl_dst=01:80:c2:00:00:05,dl_type=0x0000
bridge("vswitch1")
------------------
 0. dl_dst=01:80:c2:00:00:00/ff:ff:ff:ff:ff:f0, priority 32768drop

Final flow: unchanged
Megaflow: recirc_id=0,eth,in_port=1,dl_dst=01:80:c2:00:00:00/ff:ff:ff:ff:ff:f0,dl_type=0x0000Datapath actions: drop
[root@kunpeng82 devuser]# ovs-appctl ofproto/trace vswitch1 in_port=1,dl_dst=01:80:c2:00:00:15Flow: in_port=1,vlan_tci=0x0000,dl_src=00:00:00:00:00:00,dl_dst=01:80:c2:00:00:15,dl_type=0x0000
bridge("vswitch1")
------------------
 0. priority 0NORMAL
     >>>> received packet on unknown port 1 <<<<
     >>no input bundle, dropping

Final flow: unchanged
Megaflow: recirc_id=0,eth,in_port=1,vlan_tci=0x0000/0x1fff,dl_src=00:00:00:00:00:00,dl_dst=01:80:c2:00:00:15,dl_type=0x0000Datapath actions: drop

2、再添加一条flow:

ovs-ofctl add-flow  vswitch1 "table=0, priority=0, actions=resubmit(,1)"
添加之后talbe不存在actions=normal的flow:cookie=0x0, duration=177867.865s, table=0, n_packets=153445, n_bytes=16182100, priority=0 actions=NORMAL

[root@kunpeng82 devuser]# ovs-ofctl dump-flows vswitch1
cookie=0x0, duration=1424.340s, table=0, n_packets=0, n_bytes=0, dl_dst=01:80:c2:00:00:00/ff:ff:ff:ff:ff:f0 actions=drop
cookie=0x0, duration=552.220s, table=0, n_packets=6, n_bytes=420, priority=0 actions=resubmit(,1)

[root@kunpeng82 devuser]# ovs-appctl ofproto/trace vswitch1 in_port=1,dl_dst=01:80:c2:00:00:15Flow: in_port=1,vlan_tci=0x0000,dl_src=00:00:00:00:00:00,dl_dst=01:80:c2:00:00:15,dl_type=0x0000
bridge("vswitch1")
------------------
 0. priority 0resubmit(,1)
 1. No match.
    drop

Final flow: unchanged
Megaflow: recirc_id=0,eth,in_port=1,dl_dst=01:80:c2:00:00:10/ff:ff:ff:ff:ff:f0,dl_type=0x0000Datapath actions: drop
[root@kunpeng82 devuser]# 

免责声明:文章转载自《ovs流表高级特性(一)》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇tomcat6下载安装java中实现多态的机制是什么?下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

ovs bond

转载https://vcpu.me/openvswitch/ ovs-vsctl add-br br0 ovs-vsctl add-br br1 ip link add br0_tap0 type veth peer name br1_tap0 ip link add br0_tap1 type veth peer name br1_tap1 ip li...

ovs学习

一、 ovs各大组件示意图 ovs-vswitchd:ovs守护进程,实现基于流的交换,实现内核datapath upcall 处理以及ofproto 查表,同时是dpdk datapath处理程序。与ovsdb-server通信使用OVSDB协议,与内核模块使用netlink机制通信,与controller通信使用OpenFlow协议。 ovsdb-s...

虚拟化网络之OpenvSwitch

OpenvSwitch简称OVS,官网(http://openvswitch.org/) OVS是一个高质量、多层的虚拟交换软件,即虚拟交换机。 OpenvSwitch的见的相关组件:   ovs-vswitchd:实现switch的daemon功能,包括一个支持流交换的Linux内核模块,实现了交换功能   ovsdb-vswtich: openvswi...

实验2:Open vSwitch虚拟交换机实践

一、实验目的 能够对Open vSwitch进行基本操作; 能够通过命令行终端使用OVS命令操作Open vSwitch交换机,管理流表; 能够通过Mininet的Python代码运行OVS命令,控制网络拓扑中的Open vSwitch交换机 二、实验环境 下载虚拟机软件Oracle VisualBox 或 VMware; 在虚拟机中安装Ubuntu...

dpdk+ovs安装和编译(一)

绑定前网卡驱动 [root@localhost ~]# ethtool -i enp5s0 driver: hinic version: firmware-version: expansion-rom-version: bus-info: 0000:05:00.0 supports-statistics: no supports-test: no...

Open vSwitch + libvirt 搭建vlan网络

网络拓扑结构 创建一个限制VM流量的网络,使用的是Open vSiwitch来实现VM之间的流量隔离。 要实现的网络拓扑如下图。 配置环境   如网络拓扑图所示,我们需要两台物理主机,4台虚拟机。每台物理主机上运行两台虚拟机。 先在host1上进行配置。 创建镜像    1 qemu-img create -f qcow2 -o size=20g 镜像名字...