使用 dpctl

使用 dpctl

执行
1
dpctl show tcp:127.0.0.1:6634
Copied!
可以查看到交换机的端口等基本情况,其中 tcp 端口 6634 是默认的交换机监听端口。
执行
1
dpctl dump-flows tcp:127.0.0.1:6634
Copied!
可以看到更详细的流表信息。 此时,流表为空,执行 h2 ping h3 无法得到响应。因此我们需要通过 dpctl 手动添加流表项,实现转发。 命令为
1
dpctl add-flow tcp:127.0.0.1:6634 in_port=1,actions=output:2
2
dpctl add-flow tcp:127.0.0.1:6634 in_port=2,actions=output:1
Copied!
此时查看流表可以看到新的转发信息,同时可以在 h2 和 h3 之间 ping 通。

使用ovs-ofctl

执行
1
sh ovs-ofctl add-flow s1 action=normal
Copied!
将交换机s1的转发行为设置为normal,流表将会自动更新。
执行
1
sh ovs-ofctl del-flows s1
Copied!
将交换机s1的流表清空。
我们可以自定义在不同网络层之间的流匹配。
执行
1
sh ovs-ofctl add-flow s1 priority=500, in_port=1, actions=output:2
2
sh ovs-ofctl add-flow s1 priority=500, in_port=2, actions=output:1
Copied!
自定义第一层的流匹配规则,根据port进行匹配。
执行
1
sh ovs-ofctl add-flow s1 dl_src=00:00:00:00:00:01, dl_dst=00:00:00:00:00:02, actions=output:2
2
sh ovs-ofctl add-flow s1 dl_src=00:00:00:00:00:02, dl_dst=00:00:00:00:00:01, actions=output:1
3
sh ovs-ofctl add-flow s1 dl_type=0x806,nw_proto=1,actions=flood
Copied!
自定义第二层的流匹配规则,根据协议和mac地址进行匹配。
执行
1
sh ovs-ofctl add-flow s1 priority=500, dl_type=0x800, nw_src=10.0.0.0/24, nw_dst=10.0.0.0/24, actions=normal
2
sh ovs-ofctl add-flow s1 priority=800, ip,nw_src=10.0.0.3,actions=mod_nw_tos:184,normal
3
4
sh ovs-ofctl add-flow s1 arp,nw_dst=10.0.0.1,actions=output:1
5
sh ovs-ofctl add-flow s1 arp,nw_dst=10.0.0.2,actions=output:2
6
sh ovs-ofctl add-flow s1 arp,nw_dst=10.0.0.3,actions=output:3
Copied!
自定义第三层的流匹配规则,根据协议和IP地址进行匹配。
执行
1
h3 python -m SimpleHTTPServer 80 &
2
sh ovs-ofctl add-flow s1 arp,actions=normal
3
sh ovs-ofctl add-flow s1 priority=500,dl_type=0x800,nw_proto=6,tp_dst=80,actions=output:3
4
sh ovs-ofctl add-flow s1 priority=800,ip,nw_src=10.0.0.3,actions=normal
5
h1 curl h3
6
h2 curl h3
Copied!
自定义第四层的流匹配规则。