2015-06-29 45 views
0

我建立一個自定義mininet拓撲結構:2名的主機與他們之間的2個開關:Mininet與ONOS:ARP工作正常,平安無法啓動

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

與ONOS填充flowtables後,安裝工作正常。但是我處理轉發到SDN控制器的數據包時遇到問題。

作爲控制器我使用我自己的onos應用程序。

我試了一下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

R您使用ONOS還是RYU?看起來你正在使用RYU。

如果您是RYU:您是否正確設置了控制器。使用提供的控制器代碼(如​​)運行RYU。看看是否有效。

如果你是ONOS,你有沒有安裝功能?根據本教程,您將安裝一個功能。是這樣的:

onos> feature:install onos-app-fwd

我不知道你是如何編程器開關,但兩個控制器的注意,你應該爲雙向流動增加。另外,有時這些流的壽命很短,到了數據包到達時它們就會過期。

如果這些都沒有幫助,你能提供更多的細節。

+0

謝謝Ehsan,我也在使用Ryu。但在這個例子中,我只使用ONOS。我停用了onos-app-fwd,因爲我更喜歡使用onos-app-ifwd,因爲它會更容易修改。 – Vlorian

2

好的。問題解決了:-D

這是什麼地方出了錯:

的onos核心本身場所ARP,IPv4和IPv6的默認規則,將報文重定向到控制器。即使onos-core將這種默認規則寫入交換機的流表,並不意味着所有數據包都會到達您的應用。在我的情況下,只有ARP數據包到達了我的應用程序,而不是IPv4數據包。爲此,我必須添加3行到我的應用程序的「@Activate」部分。

@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); 
    //***************************************************************************** 

}