書きかけ 自作OpenFlow Controller(OpenFlow 1.5について①)
最近、OpenFlow1.5が公開されました。
大まかな特徴としては(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という概念が追加され、 考え方も変わっています。が、この辺はいまいち調べきれてないです。
また、今までテーブル間で一貫して利用できるフィールドに加え、 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で書くとこんな感じに書けそうです。
個人的には、nicira_extで提供されていたlearnアクションが specとして利用できると、コントローラの実装ももっと簡単になるのになー と思ったりするばかりです。
つづく