首页 文章

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

提问于
浏览
0

我构建了一个自定义的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 回答

  • 2

    好 . 问题解决了:-D

    这是出了什么问题:

    onos-core本身放置了ARP,IPv4和IPv6的默认规则,将数据包重定向到控制器 . 即使onos-core将这样的默认规则写入交换机的流表,也不意味着所有数据包都会到达您的应用程序 . 在我的情况下,只有ARP数据包到达我的应用程序,而不是IPv4数据包 . 因此,我必须在我的应用程序的“@Activate”部分添加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);
        //*****************************************************************************
    
    }
    
  • 2

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

    如果您是RYU:您是否正确设置了控制器 . 使用提供的控制器代码(如simple_switch_13.py)运行RYU . 看看是否有效 .

    如果你是ONOS,你有安装功能吗?根据本教程,您可以安装一个功能 . 就像是:

    onos> feature:install onos-app-fwd

    我不知道你是如何编程开关的,但对于两个控制器都要注意你应该为两个方向添加流量 . 此外,有时流量的寿命非常短,到数据包到达时它们已过期 .

    如果这些都没有帮助,您能提供更多细节吗?

相关问题