P4Runtime APIを試すチュートリアルを作りました
大規模なネットワークインフラ関連事業者のなかでは、Software Defined Network (SDN) は今や普通のものとなりました。自分もSDNコントローラを作ってみたい、と思った人も多いでしょう。
P4はデータプレーンをプログラムするためのプログラミング言語ですが、今日はP4Runtime APIを使ったSDNコントローラ作成のチュートリアルを紹介します。
まえおき - 読者の想定
- P4の概要を聞いたことがある
- 少しはP4プログラムを読んだ or 試したことがある
- P4Runtime については試したことが無い
- 無いけど、簡単なコントローラの一つでも作ってみたい
ひょっとしたら、P4Runtime APIを使ったコントローラを作りかけたが余りの資料の少なさとわかりにくさに挫折した、という人が最適かもしれません。私自身がそうなりかけて、このチュートリアルを作ったのですから。
本題 - チュートリアルの概要紹介
そこで、そうした人たち向けにP4Runtime APIの機能のいくつかを使った簡単なスイッチプログラムのチュートリアルを作りました。
P4Runtime-NanoSwitch
"A Simple L2 lerning switch development tutorial on P4Runtime"
がそれです。このチュートリアルでは、以下の四つのことを試します。最終的には非常に簡素な MAC Learning Switch が出来上がります。
- Multicast Group の設定と、それを利用した Flooding 処理
- Packet-In 処理を利用した、コントローラへの処理依頼
- Packet-Out 処理を利用した、スイッチのテーブルへのエントリ追加
- そうした実験を行うための P4Runtime Shell への機能追加
つまりこうした、コントローラを作成するための一般的な事項について、ざっと眺めて試してみれば、皆さん自分の望むコントローラを試作することができますよね?というコースです。
これらの実験は、以下の環境で行います。
- コントローラ役には P4Runtime Shell を用いる
- スイッチ役には P4Runtime に対応した Mininet を用いる
- P4 コンパイルにはオープンソースの p4c を用いる
Docker, Mininet あたりの操作に慣れた人なら、数時間で一通り試せるサイズだと思います。
資料など
P4/P4Runtimeについては、初学者・取っかかり時期の人向けの資料やリンクが思いつかず。。なにかあれば一報ください。
そうそう。
P4Runtime APIはgRPC / Protocol Bufferを用いているので、そのあたりの理解があると分かり良いと思います。
それから、こんなチュートリアルも作ってみました。はじめの一歩、のような感じで、コントローラなどは全く登場せず、ただP4Runtime APIを使って、Packet-In/Outやフローエントリの設定など基礎的な操作を試すものです。
こんなツールも作ってみました。CPU portの番号を「実環境」で調べるものです。P4RuntimeだとCPU portって何番か決まってないんですよね。。
おまけ
P4Runtimeを使ったスイッチ・プログラミングはそれなりに良く出来ていて分かりやすいところもあるのですが、とにかく易しくない&優しくないです。関連する要素を一通り把握して、最初の一歩が踏み出せるまでがとてもしんどい。初学者向けのまとまったものがなく、検索するとレベルが大幅に異なるドキュメントが出てくる。幾つかのものはバージョンが古かったりある環境では動作しなかったりで、いつも疑いながら進めていく感じです。
その中で何度も「これ簡単なチュートリアルがあったら短い時間で済んだのになあ」と思いました。簡単な入り口となるチュートリアルを作成したのはそのためです。
P4Runtime関連で、何か良いツールや教材となりそうなものをお持ちの方はぜひ共有して、取りかかる人を増やしましょう!