我构建了一个自定义的mininet拓扑:2个主机,它们之间有2个交换机:
Host1====Switch1====Switch2====Host2
使用ONOS填充流程表后,设置正常。但是我处理转发到SDN-Controller的数据包时遇到了麻烦。
作为控制器,我使用自己的onos-app。
我尝试了一些ping并用tcpdump嗅探接口。 当一个主机ping另一个主机时,主机发送一个arp请求。此请求到达其他主机并且它回复。甚至回复也会纠正ping主机。但那......没有任何事情发生。 我希望第一个主机在收到正确的arp回复后发送ping。但相反,它绝对没有。 这甚至不能仅使用一个开关。
为什么ping本身无法启动? 你知道我做错了什么吗? 谢谢。
答案 0 :(得分:3)
如果您是RYU:您是否正确设置了控制器。使用提供的控制器代码(如simple_switch_13.py)运行RYU。看看是否有效。
如果您是ONOS,是否安装了功能?根据本教程,您可以安装一个功能。类似的东西:
@NotNull
@Size(min = 2, max = 14)
@Column
我不知道你是如何编程开关的,但对于两个控制器都要注意你应该为两个方向添加流量。 此外,有时流量的寿命非常短,到数据包到达时它们已过期。
如果这些都没有帮助,您能否提供更多详情。
答案 1 :(得分:2)
行。问题解决了:-D
这就是出错:
onos-core本身会为ARP,IPv4和IPv6设置默认规则,将数据包重定向到控制器。即使onos-core将这样的默认规则写入交换机的流表,也不意味着所有数据包都会到达您的应用程序。在我的情况下,只有ARP数据包到达我的应用程序,而不是IPv4数据包。因此,我必须在我的应用程序的" @ Activate" -section中添加3行。
@Activate
public void activate() {
appId = coreService.registerApplication("org.onosproject.ifwd");
packetService.addProcessor(processor, PacketProcessor.ADVISOR_MAX + 2);
//***ADD THESE 3 LINES*********************************************************
TrafficSelector.Builder selector = DefaultTrafficSelector.builder();
selector.matchEthType(Ethernet.TYPE_IPV4);
packetService.requestPackets(selector.build(), PacketPriority.REACTIVE, appId);
//*****************************************************************************
}