Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

OpenFlow1.3版 ラーニングスイッチの質問 #105

Closed
2 tasks done
yasuhito opened this issue Oct 8, 2015 · 16 comments
Closed
2 tasks done

OpenFlow1.3版 ラーニングスイッチの質問 #105

yasuhito opened this issue Oct 8, 2015 · 16 comments

Comments

@yasuhito
Copy link
Owner

yasuhito commented Oct 8, 2015

OpenFlow1.3版ラーニングスイッチ作者!! @shun159 さんいくつか教えてください:

  • テーブルIDの振りかたの決まり?:
    いまの実装だとテーブルIDの0番と1番をぞれぞれ次のように振っています。質問ですが、OpenFlowの仕様とかあとはベストプラクティスみたいなもので、IDはこういう振りかたをしようとか、予約されていて使えないIDなどというものってあるでしょうか?
  INGRESS_FILTERING_TABLE_ID = 0
  FORWARDING_TABLE_ID = 1
  • 802.1D予約済みスパニングツリーMACアドレス対応?:
    OpenFlow1.0版のラーニングスイッチでは、次のように Mac#reserved? メソッドで宛先が802.1D予約済みスパニングツリーMACアドレスなモノをdropしています。OpenFlow1.3版もフィルタリングテーブルでこうしたほうがいいですか? (関連イシュー ラーニングスイッチ章: message.destination_mac.reserved?の説明を追加 #90)
  def packet_in(_datapath_id, message)
    return if message.destination_mac.reserved?
  • Trema (OpenFlow1.3) の改善ポイント?:
    TremaのOpenFlow1.3で書いてて気持ち悪いところや改善できそうなことがあったら何でも教えてください。たとえば前に聞いたと思いますが、FlowModするときにマッチが不要なところでもいちいち match: Match.new と書かなければいけないのは直したほうがいい気がします。
    send_flow_mod_add(
      datapath_id,
      table_id: FORWARDING_TABLE_ID,
      idle_timeout: 0,
      priority: 1,
      match: Match.new,
      instructions: Apply.new([SendOutPort.new(:controller),
                               SendOutPort.new(:flood)])
    )
@shun159
Copy link

shun159 commented Oct 8, 2015

取り急ぎですが…

テーブルIDの振りかたの決まり?

決まりについては、私は特に見たことはありません。
ただし、ご存じのとおりですが、予約されているIDがあります。OVSの場合、ofptt_maxについては、
flow_modが利用できないと思います。ofptt_allについては、resubmit_tableの時やflow_statsなどのようなときに利用できると思います。もし必要であれば、実行時のログをお出しします。

ofptt_all = 0xff
ofptt_max = 0xfe

802.1D予約済みスパニングツリーMACアドレス対応?:

datapathでマルチキャストフレームをdropしているのであれば、packet_inとして上がってくることはないと思うので、そのガードは不要になるかと思います。そのフレームのsrc_mac学習にpacket_in必要かどうかは少し考えさせてください。

Trema (OpenFlow1.3) の改善ポイント?:

気がついたらissue出しておきます!chatのものはまだ出来ていませんが、近々issueだします。時間かかってすみません。

@yasuhito
Copy link
Owner Author

yasuhito commented Oct 8, 2015

テーブルIDの説明ありがとうございます。OFPTT_MAXまでの値の使い方はとくにコレというのは決まってなくて好きに使って良いんですね。ちなみにいまスペックを確認したら OFPTT_MAX は last usable table number とのことなので使っても良いみたいです。

@yasuhito
Copy link
Owner Author

yasuhito commented Oct 8, 2015

ついでに、ためしに Pio::GotoTable.new(0xfff) してみたところ以下のようにエラーが出なかったので、こちらは Pio のチケットに入れておきます。table_id 値は uint8 なので 0xfff を入れても 255 に丸めてくれますが、.new で例外を投げたほうが良いと思っています。

$ irb -Ilib -rpio                                                                                                                       rvm:ruby-2.0.0-p598 
cannot load such file -- wirble
2.0.0 :001 > require 'pio/open_flow13'
 => false 
2.0.0 :002 > Pio::GotoTable.new(0xff)
 => #<Pio::GotoTable:0x007fcc84c23e88 @format={:instruction_type=>1, :instruction_length=>8, :table_id=>255}> 
2.0.0 :003 > Pio::GotoTable.new(0xfff)
 => #<Pio::GotoTable:0x007fcc8329d748 @format={:instruction_type=>1, :instruction_length=>8, :table_id=>255}>

@shun159
Copy link

shun159 commented Oct 9, 2015

あと、openvswitch-2.3.90の場合、OFPTT_MAXへflow_modすると、eperm/bad requestが報告されることにご注意ください。

@yasuhito
Copy link
Owner Author

yasuhito commented Oct 9, 2015

datapathでマルチキャストフレームをdropしているのであれば、packet_inとして上がってくることはないと思うので、そのガードは不要になるかと思います。そのフレームのsrc_mac学習にpacket_in必要かどうかは少し考えさせてください。

わかりました。なんとなくですが、そのマルチキャストフレームを出してる人も宛先になりうるので、packet_inでsrc_macを学習する必要がある気がします。

@yasuhito
Copy link
Owner Author

yasuhito commented Oct 9, 2015

あと、openvswitch-2.3.90の場合、OFPTT_MAXへflow_modすると、eperm/bad requestが報告されることにご注意ください。

マジですか! これは vswitch のバグだから、対処しなくていいかな。。。

@shun159
Copy link

shun159 commented Oct 9, 2015

マジですか! これは vswitch のバグだから、対処しなくていいかな。。。

おっ、そうなのですか。lagopusとかはどうなんでしょう…。最近触ってないのでわからないですが。。。

わかりました。なんとなくですが、そのマルチキャストフレームを出してる人も宛先になりうるので、packet_inでsrc_macを学習する必要がある気がします。

ですね。テーブルを少し整理してみます。

@yasuhito
Copy link
Owner Author

yasuhito commented Oct 9, 2015

あと、いまのOpenFlow1.3ラーニングスイッチでは 01:00:5e:xx:xx:xx も drop してるのですが、これも src_mac を学習しないといけない気がします。

@shun159
Copy link

shun159 commented Oct 9, 2015

はい、そのとおりだと思います。
ちょっと絵とか簡単に書いて整理しようかとおもいます。

@yasuhito
Copy link
Owner Author

yasuhito commented Oct 9, 2015

おっ、そうなのですか。lagopusとかはどうなんでしょう…。最近触ってないのでわからないですが。。。

1.3.4 の仕様には OFPTT_MAX まで使ってよい、と書いてあるのでやはり vswitch のバグだと思います。

@shun159
Copy link

shun159 commented Oct 9, 2015

readonlyっぽい挙動ですね。

あまり関係はないですが、ちょっとした連携ですが、
flow_statsとaggreagate_statsはofptt_maxのテーブル統計を取ることはできます。
このテーブル、内部で利用されているっぽくて、もし、flow_statsをとりたくなったときは、
nxmのrecirc_id、reg0をサポートする必要あります。

@yasuhito
Copy link
Owner Author

yasuhito commented Oct 9, 2015

@shun159 すみません、もういっこ追加質問です。いまのソースコードでは、テーブルID=0に次の2つのフローエントリを指定しています。気になってるのは、どちらも優先度が 2 になってることです。

  1. IPマルチキャストフレームをdrop (優先度=2)
  2. それ以外は goto table 1 (優先度=2)

最初に 1. をやったあと、残ったやつを 2. にひっかけたいはずなので、2. の優先度はひょっとして 1 が正しいでしょうか?

@shun159
Copy link

shun159 commented Oct 9, 2015

です。これは実は先に気づいてたのですが、直すのを忘れてしまっていました…。

@yasuhito
Copy link
Owner Author

yasuhito commented Oct 9, 2015

わかりましたありがとうございます!

@shun159
Copy link

shun159 commented Oct 9, 2015

1.3.4 の仕様には OFPTT_MAX まで使ってよい、と書いてあるのでやはり vswitch のバグだと思います。

これについていろいろ聞いて回ったり、調べたりしてたのですが、
とりあえずOVS特有の問題っぽい感じでした。失礼しました。

@yasuhito yasuhito modified the milestones: ラーニングスイッチ1.3章 ドラフトrev.2, ラーニングスイッチ1.3章 ドラフトrev.1 Oct 12, 2015
@yasuhito
Copy link
Owner Author

3 番目の Match.new の件は #186 に移動しました。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

2 participants