如何使用 Ryu SDN 应用程序模拟延迟?

How to emulate latency using Ryu SDN application?

我需要使用 Ryu SDN 控制器模拟网络延迟。我首先尝试在装饰器之后添加一个睡眠时间,装饰器每次控制器在消息中接收到一个数据包时都会调用一个函数,但问题是这个函数在当前完成之前无法处理下一个数据包。有没有办法让这个函数多线程?

@set_ev_cls(ofp_event.EventOFPPacketIn, MAIN_DISPATCHER)
def _packet_in_handler(self, ev):
time.sleep(LATENCY)
...

如果您想模拟网络延迟,您应该尝试将延迟应用到 link 而不是应用程序。

如果您使用的是网络模拟器,可以在其 API 中完成(例如 mininet:mininet.link.TCLink)

如果您正在使用虚拟机,您可以设置netem来模拟您正在使用的接口上的延迟。