これは何?
- このあたりの構成をちょっと覗いていく感じのなにかです
- とりあえずP4Runtime越しにパケットインされた情報がどう上位に伝わっていくのか見てみた
- コンパイルや動作確認は実施していません
P4Runtimeって何? ONOSって何?
- 割愛
リポジトリ構成
- ONOSは現在ビルドツールとしてBuckとMavenを併用している様子。いずれ統合されるとか。
- 全部Javaで書かれてます
onos/protocols/p4runtime/
+ api/ ・・・Javaのinterfaceが記述されたコードを格納
+ ctl/ ・・・テストとP4Runtimeの外部連携APIのコードが格納
+ model/ ・・・P4Runtimeの内部動作コードが格納
+ proto/ ・・・本フォルダ内BUCK/POMのなかで、P4.orgのPIリポジトリの.protoを引いてきてコンパイルしている
+ BUCK ・・・Buck用ファイル
+ pom.xml ・・・Maven用ファイル
CTL(外部連携API)の中身
-
p4runtime/ctl/
配下にはいろいろファイルが入っているが、ファイル名からしてP4RuntimeControllerImpl.java
とP4RuntimeClientImpl.java
がポイントっぽいので読んで見る -
ControllerImpl.java
ではあんまり何もやってなくてP4Runtimeの主要な動作の実装はP4RuntimeClientImpl.java
でやっている。 -
p4Runtimeの実装は
p4.P4RuntimeGrpc
をimportしており、P4RuntimeGrpcはp4runtime.proto
からコンパイル時に動的に生成される。 -
p4runtime越しにパケットインされたパケットは一旦
PiPacketOperation
というONOS内のP4Runtime向け専用のフォーマットに変換される。PiPacketOperation
は直接ONOSで扱えるパケット形式InboundPacket
ではなく、これに変換するにはmapInboundPacket
を用いる。
まとめ
- p4lang/PIの.protoを引いてきてjavaに変換して使っている。
- ODLの実装とも見比べたい。