書きかけ 自作OpenFlow Controller(OpenFlow 1.5について①)

最近、OpenFlow1.5が公開されました。

https://www.opennetworking.org/images/stories/downloads/sdn-resources/onf-specifications/openflow/openflow-switch-v1.5.0.noipr.pdf

大まかな特徴としては(ovs/OPENFLOW-1.1+.md at master · openvswitch/ovs · GitHub)、

  • Time scheduled bundles [EXT-340] [optional for OF1.5+]
  • Egress Tables [EXT-306] [optional for OF1.5+]
  • Packet Type aware pipeline Prototype for OVS was done during specification. [EXT-112] [optional for OF1.5+]
  • Extensible Flow Entry Statistics [EXT-334] [required for OF1.5+]
  • Flow Entry Statistics Trigger [EXT-335] [optional for OF1.5+]
  • Controller connection status Prototype for OVS was done during specification. [EXT-454] [optional for OF1.5+]
  • Meter action [EXT-379] [required for OF1.5+ if metering is supported]
  • Enable setting all pipeline fields in packet-out Prototype for OVS was done during specification. [EXT-427] [required for OF1.5+]
  • Port properties for pipeline fields Prototype for OVS was done during specification. [EXT-388] [optional for OF1.5+]
  • Port property for recirculation Prototype for OVS was done during specification. [EXT-399] [optional for OF1.5+]

特に、EXT-306のEgress Tablesについては、Egress processingという概念が追加され、 考え方も変わっています。が、この辺はいまいち調べきれてないです。

f:id:shun3382:20150311123333p:plain

また、今までテーブル間で一貫して利用できるフィールドに加え、 openflow_basicクラスとは別にpacket_regsクラスが追加されています。 これは、nicira_extで利用可能だったreg(x)フィールドに由来してそうです。 metadataとは別に、packet_regsフィールドを持つのは、vlanidや、input_port等 各マッチフィールドの値を格納し、1つのテーブルで更に処理を分ける等するのでしょうか。 nicira_extにある、loadやmoveは、openflow1.5では、set_fieldと、copy_fieldとして、 アクションに追加されているようです。

Erlangで書くとこんな感じに書けそうです。

gist9c7e4ea87b9f282354c3

個人的には、nicira_extで提供されていたlearnアクションが specとして利用できると、コントローラの実装ももっと簡単になるのになー と思ったりするばかりです。

つづく