2015-04-18 44 views
1

我正在創建ryu應用程序來推送和彈出mpls標籤。這是在OVS流條目(2.3.1版本)開關S1:爲什麼在推送MPLS報頭後,報文不會從ovs switch(版本2.3.1)轉發?

[email protected]:~# sudo ovs-ofctl -O OpenFlow14 dump-flows s1 
OFPST_FLOW reply (OF1.4) (xid=0x2): 
cookie=0x0, duration=190.991s, table=0, n_packets=123, n_bytes=21852, priority=0 actions=CONTROLLER:65535 
cookie=0x0, duration=190.991s, table=0, n_packets=0, n_bytes=0, priority=10,mpls,in_port=2,mpls_label=80 actions=pop_mpls:0x0800,output:1 
cookie=0x0, duration=190.991s, table=0, n_packets=152, n_bytes=14896, priority=10,ip,in_port=1 actions=push_mpls:0x8847,set_field:80->mpls_label,output:2 

任何人都知道爲什麼不會轉發數據包甚至流條目匹配。因爲如果我打開wireshark並查看s1-eth2檢查mpls標題,則檢測不到包含mpls標頭或ethertype = 0x8847的數據包。

我在s1-eth2上看到的數據包是ICMPv6(路由器請求消息),DHCP和MDNS。他們中的任何一個都與ping無關,我從主機1發送到h2。 我的拓撲圖:H1-S1-S2-H2

做我的代碼有缺陷,或者是在OVS或openflow_v1.4劉某的錯誤嗎?

謝謝。

+1

證實當你聞S1-eth1的(或任何H1被連接到S1),在那裏包來與MPLS標籤80?您還可以看到使用'ovs-dpctl-top'觸發了什麼流程。 – nik

+0

是的,h1連接到s1作爲h1-s1-s2-h2。 h1向s1 eth1發送ping消息。我編寫了s1來標記mpls標籤併發送給eth2,但沒有數據包通過mpls標籤80從s1-eth2發出。我將給出'ovs-dpctl-top'試試 –

+1

您可以發佈您的代碼嗎? –

回答

0

分支2.4中推送了很少的MPLS固定,你可以在 master或branch 2.4上試試嗎?

0

您是否處理ARP請求和ARP回覆?

兩種方式來處理ARP報文:

  1. 保持你的流量表不變,ARP數據包轉發到控制器。讓控制器處理ARP。
  2. 更改流表。

添加最後一個

[email protected]:~# sudo ovs-ofctl -O OpenFlow14 dump-flows s1 
OFPST_FLOW reply (OF1.4) (xid=0x2): 
cookie=0x0, duration=190.991s, table=0, n_packets=123, n_bytes=21852, priority=0 actions=CONTROLLER:65535 
cookie=0x0, duration=190.991s, table=0, n_packets=0, n_bytes=0, priority=10,mpls,in_port=2,mpls_label=80 actions=pop_mpls:0x0800,output:1 
cookie=0x0, duration=190.991s, table=0, n_packets=152, n_bytes=14896, priority=10,ip,in_port=1 actions=push_mpls:0x8847,set_field:80->mpls_label,output:2 
cookie=0x0, duration=190.991s, table=0, n_packets=152, n_bytes=14896, priority=10,arp,in_port=1 actions=push_mpls:0x8847,set_field:80->mpls_label,output:2 
0

Works爲高達2個標籤在堆棧中OVS 2.5.1。也許錯誤是在Ryu應用程序。你能發佈代碼嗎?

MPLS報頭堆棧限於大小3.在數據包中推送超過3個MPLS報頭會導致數據包在Open vSwitch中未被轉發。

sudo mn --topo single,2 --switch ovsk 
mininet> h1 ping h2 

安裝最少的一組流條目對S1:

sudo ovs-ofctl -O OpenFlow13 add-flow s1 in_port=1,actions=push_mpls:0x8847,push_mpls:0x8847,push_mpls:0x8847,push_mpls:0x8847,output:2 
sudo ovs-ofctl -O OpenFlow13 add-flow s1 in_port=2,actions=push_mpls:0x8847,push_mpls:0x8847,push_mpls:0x8847,push_mpls:0x8847,output:1 

流條目被正確地匹配。 sudo ovs-ofctl -O OpenFlow13 dump-flows s1 | grep -o "n_packets=\w*" 然而,沒有數據包離開S1通過 sudo tcpdump -ni s1-eth2

相關問題