これは何?
- このあたりの構成をちょっと覗いていく感じのなにかです
- とりあえず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の実装とも見比べたい。