Mininet与ONOS:ARP工作正常,Ping不会启动

时间:2015-06-29 16:57:30

标签: networking mininet sdn openflow onos

我构建了一个自定义的mininet拓扑:2个主机,它们之间有2个交换机:

 Host1====Switch1====Switch2====Host2

使用ONOS填充流程表后,设置正常。但是我处理转发到SDN-Controller的数据包时遇到了麻烦。

作为控制器,我使用自己的onos-app。

我尝试了一些ping并用tcpdump嗅探接口。 当一个主机ping另一个主机时,主机发送一个arp请求。此请求到达其他主机并且它回复。甚至回复也会纠正ping主机。但那......没有任何事情发生。 我希望第一个主机在收到正确的arp回复后发送ping。但相反,它绝对没有。 这甚至不能仅使用一个开关。 Screenshot tcpdump: host1 on the upper left, host2 on the upper right, switch in the middle

为什么ping本身无法启动? 你知道我做错了什么吗? 谢谢。

2 个答案:

答案 0 :(得分:3)

你使用ONOS还是RYU?好像你在使用RYU。

如果您是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);
    //*****************************************************************************

} 
相关问题