1

mpls ラベルをプッシュおよびポップする ryu アプリを作成しています。ovs (バージョン 2.3.1) スイッチ s1 のフロー エントリを次に示します。

root@ubuntu:~# 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 のみです。それらのいずれも、ホスト 1 から h2 に送信している ping とは関係ありません。私のトポロジ:h1-s1-s2-h2

私のコードにはバグがありますか、それとも ovs または openflow_v1.4 ryu のバグですか?

ありがとう。

4

3 に答える 3

0

Do you process the ARP requests and ARP replys?

Two ways to process the ARP packets:

  1. keep your flow tables unchanged, the ARP packets are forwarded to the controller. Let the controller processes the ARP.
  2. change the flow table.

add the last one

root@ubuntu:~# 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
于 2016-09-21T01:40:48.450 に答える
0

ブランチ 2.4 でプッシュされた MPLS 修正はほとんどありませんでした。マスターまたはブランチ 2.4 で試してみることはできますか?

于 2015-07-25T04:26:24.693 に答える
0

OvS 2.5.1 では、スタック内の最大 2 つのラベルで機能します。おそらくRyuアプリのエラーです。コードを投稿できますか?

MPLS ヘッダー スタックはサイズ 3 に制限されています。1 つのパケットに 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

于 2016-12-13T08:30:54.163 に答える