# PINS (P4 Integrated Network Stack)
PINS(P4 Integrated Network Stack)は、[[SONiC]]をSDN環境で活用するために[[Open Networking Foundation]](ONF)・[[Microsoft]]・[[Google]]・Intelが共同開発した機能であり、コミュニティ版SONiCでは拡張機能として表2.1にも掲載される。[[Google]]がSDNコントローラー「Orion」でデータセンターネットワークJupyterとグローバルネットワークB4を制御してきた経験を背景に、SONiCをSDN環境で活用するために開発された。(Source: [[@2025__Gihyo__実践SONiC入門 - Chapter 2 SONiCの機能とユースケース]] ch.2 §2.2.5)
![[_attachments/jissen-sonic-nyumon-2025/ch02-fig2-4-pins-architecture.png]]
(図2.4 PINSアーキテクチャ。OCP 2022の資料Slide 3から引用。Source: ch.2 §2.2.5)
## アーキテクチャとデータフロー(『実践SONiC入門』第2章)
PINSが利用するP4は、Switch ASICをはじめとしたパケット処理データプレーンの動作をターゲット(ASIC, FPGA, CPU)の種類に依存せず記述できるドメイン特化プログラミング言語である。記述したP4プログラムから自動的にP4Runtime APIを生成でき、これを用いてSDNコントローラーなどと連携する。SDNコントローラーからの設定はP4Runtime経由でAPPL_DBに登録され、PINS関連エントリを処理するP4OrchによりASIC_DBのモデルに変換され書き込まれる。このようにSONiCのフレームワークに統合することで、通常のスイッチ機能とP4を用いたSDN機能を同時に利用可能になる。SDNコントローラーの開発・サービスへの統合自体が大きなプロジェクトであるため、Googleのようなハイパースケーラー以外でPINSを自社サービスに利用できるユーザーは少ないと見られるが、自社サービスに応じたSONiCの機能拡張が可能な事例として紹介されている。(Source: [[@2025__Gihyo__実践SONiC入門 - Chapter 2 SONiCの機能とユースケース]] ch.2 §2.2.5)
## SONiCとStratumの統合という位置づけ(*Software-Defined Networks: A Systems Approach* 第5章)
*Software-Defined Networks: A Systems Approach* 第5章は、PINSをSONiCと[[Stratum]](Thin Switch OS)という「同じ需要(ベンダー非依存なSwitch OS)を満たそうとする2つのオープンソースコミュニティ」を統合する取り組みとして位置づける。両者の主な違いは、Stratumが(P4と[[P4Runtime]]を含む)プログラム可能なフォワーディングパイプラインをサポートする点であり、これに対し[[SAI (Switch Abstraction Interface)]]は最大公約数的なフォワーディングへのアプローチを取る。PINSの目標は、(1) リモートのSDNコントローラ/アプリがP4RuntimeとgNMIを使ってSAIと相互作用できるようにすること、(2) データプレーンの機能開発速度を高めるためP4を使ったSAI拡張を可能にすることの2つであり、いずれもSAIの振る舞いモデル・パイプラインをP4プログラム(`sai.p4`)で新たに表現することに依拠する。(Source: [[@2021__SystemsApproach__Software-Defined Networks - A Systems Approach - Chapter 5 Switch OS]] ch.5 §5.4)
## 関連
- [[SONiC]] — PINSが統合対象とするSwitch OS
- [[SAI (Switch Abstraction Interface)]] — PINSが拡張するデータプレーン抽象化API
- [[Stratum]] — PINSが統合するもう一方のSwitch OS
- [[Google]] — PINS共同開発元、SDN環境でのSONiC活用事例(OCP 2022)
- [[Microsoft]] / [[Open Networking Foundation]] — 共同開発元
- [[P4Runtime]] — PINSが用いるコントロール/データプレーン間インターフェース
- [[プログラマブルデータプレーン]]
- [[@2025__Gihyo__実践SONiC入門 - Chapter 2 SONiCの機能とユースケース]]
- [[@2021__SystemsApproach__Software-Defined Networks - A Systems Approach - Chapter 5 Switch OS]]
## 出典
- 海老澤健太郎, 『実践SONiC入門』, 技術評論社, 2025, 第2章 §2.2.5.
- Peterson, Cascone, O'Connor, Vachuska, and Davie, *Software-Defined Networks: A Systems Approach*, 2021, Chapter 5: Switch OS, §5.4. https://sdn.systemsapproach.org/stratum.html