如何在 OpenFlow 交换机上减少数据包的 ttl/hoplimit?

How to decrement the ttl/hoplimit of packets at OpenFlow switches?

我知道可以添加或修改 OpenFlow 交换机的单个流以减少 TTL(IPv4) 或跳数限制 (IPv6)。

我用泛光灯控制器和下面的流入口测试过

ovs-ofctl -O OpenFlow13 add-flow s1 "priority=1,ip,in_port=2,dl_src=<src_mac>,dl_dst=<dst-mac>,nw_src=10.0.0.1,nw_dst=10.0.0.2 actions=dec_ttl,output:1"

但是我如何才能对所有通过交换机的 UDP IPv6 数据包执行此操作? 我不能一直更新所有流。

我想模拟 ttl/hoplimit 的递减,就像在带有 SDN 交换机的 IP 路由器中所做的那样。我正在使用的测试台是在内核模式下使用 Mininet 和 Open vSwitch 开关 运行 构建的。

我不想写一个完整的SDN Controller,也不想自己实现所有的流程。我只希望交换机减少每个 UDP IPv6 数据包传递的 ttl/hop 限制。

您可以使用流来仅匹配 UDP 数据包,如下所示:

$ sudo ovs-ofctl -O OpenFlow13 add-flow s1 "priority=1,dl_type=0x86DD,nw_proto=17 actions=dec_ttl"

您可以在 dump-flow 的输出中看到它将匹配 ipv6 数据包上的 udp:

$ sudo ovs-ofctl  dump-flows s1 -O OpenFlow13
cookie=0x0, duration=4.103s, table=0, n_packets=0, n_bytes=0, priority=1,udp6 actions=dec_ttl