ovs流表高级特性(一)
表 1. 流表常用字段
对于 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 as dl_type=0x0800. |
icmp |
Same as dl_type=0x0800,nw_proto=1. |
tcp |
Same as dl_type=0x0800,nw_proto=6. |
udp |
Same as dl_type=0x0800,nw_proto=17. |
arp |
Same as dl_type=0x0806. |
rarp |
Same as dl_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:05 br0: 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:05 Flow: 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 32768 drop 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=0x0000 Datapath actions: drop [root@kunpeng82 devuser]# ovs-appctl ofproto/trace vswitch1 in_port=1,dl_dst=01:80:c2:00:00:15 Flow: 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 0 NORMAL >>>> 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=0x0000 Datapath 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:15 Flow: 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 0 resubmit(,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=0x0000 Datapath actions: drop [root@kunpeng82 devuser]#