# SD-Fabric
SD-Fabricは、[[ONOS]]上で稼働する一連の制御アプリケーション群として実装されたリーフスパインスイッチングファブリックである。Open Networking Foundationが開発する(本章内Further Readingで"SD-Fabric", Open Networking Foundation, 2021として言及される)。データセンター内の複数ラックを相互接続する定番のリーフスパインファブリックトポロジを支えるほか、マルチサイト展開、PON・RANのようなアクセス/エッジネットワーク技術もサポートする。ベアメタルスイッチのみで構成され、固定機能パイプラインとプログラマブルパイプラインの両方で稼働できるが、実運用では前者(固定機能)で動いている。掲載ページのURLスラッグは`trellis`である(https://sdn.systemsapproach.org/trellis.html)。(Source: [[@2021__SystemsApproach__Software-Defined Networks - A Systems Approach - Chapter 7 Leaf-Spine Fabric]] ch.7)
## 機能セット
L2/L3の広い範囲の機能を、DHCPリレー用のDHCPサーバとBGP経路交換用のQuagga BGPサーバを除いて、すべてSDN制御アプリケーションとして再実装している。ラック内はL2接続性、ラック間はL3接続性を実装する。
- **L2**: VLAN id基準の転送、Q-in-Q(外側/内側VLAN idペア)、L2トンネル(単一・二重タグ付け)
- **L3**: IPv4/IPv6のユニキャスト・マルチキャストルーティング。マルチキャストは集中型ツリー構築を実装しつつIGMPもサポート。ARP・NDP・DHCPv4/DHCPv6もサポート
- **高可用性**: dual-homing・リンクボンディング・ECMPグループの組み合わせ。ONOS自体も3〜5台のサーバにレプリケートされる
- **拡張性**: スパイン2台・リーフ8台(ラック最大4台相当)の構成で12万経路・25万フローを実証
(Source: [[@2021__SystemsApproach__Software-Defined Networks - A Systems Approach - Chapter 7 Leaf-Spine Fabric]] ch.7 §7.1)
## 実装戦略
中核戦略はセグメントルーティング(MPLSの転送プレーンを利用)であり、リーフ-スパイン間の経路をあらかじめ計算してmatch/actionルールとしてスイッチに投入する。OSPFやPIMのような分散プロトコルは実行せず、第6章で導入されたRoute service・Mcast serviceに大域計算した経路・マルチキャストツリーを投入する。外部BGPピアとの経路交換はFPM(Forwarding Plane Manager)がQuaggaプロセス経由で仲介する。リーフ-スパイン間のECMPグループ集合の管理には独自のAtomixマップを使う。(Source: [[@2021__SystemsApproach__Software-Defined Networks - A Systems Approach - Chapter 7 Leaf-Spine Fabric]] ch.7 §7.2, §7.3)
## 転送プレーン: fabric.p4
SD-Fabricの転送プレーンは、P4プログラム`fabric.p4`としてカスタム実装されている。Broadcom OF-DPAパイプラインを緩く参考にしつつSD-Fabricが不要とするテーブルを省いて単純化されており、ONOSのFlowObjective API(Filtering・Forwarding・Next)に対応する構造を持つ。プリプロセッサ条件分岐(`#ifdef`)により、UPF(4G/5Gモバイルネットワーク向け、実体はupf.p4)・BNG(Fiber-to-the-Home向け、実体はbng.p4)・INT(Inband Network Telemetry)という拡張機能を選択的に組み込める。SD-Fabricは元々Tomahawkベースのスイッチ上に実装され、その後Tofinoのようなプログラマブル転送パイプラインの導入を経て`fabric.p4`に至った。(Source: [[@2021__SystemsApproach__Software-Defined Networks - A Systems Approach - Chapter 7 Leaf-Spine Fabric]] ch.7 §7.4)
## 第9章での役割: アクセスネットワークとの組み合わせ
第9章は、SD-Fabricがアクセスネットワーク(PON・RAN)のIPゲートウェイ側と組み合わさる役割を報告する。PONをインターネットへ接続するBNGはベンダー定義のコントロール/管理プレーンを持つ一方、データプレーンはサブスクライバサービスを差別化するQ-in-Qタギングを要し、これがSD-Fabricがこの機能を提供する理由の一つになっている。SD-PONアーキテクチャ図のファブリックスイッチは、第2章のSEBA構成図・第7章のTrellis構成図のファブリックスイッチと同一であり、SD-Fabricは(1) OLT群をインターネットへ接続する役割と、(2) BNGのコントロール・管理機能(その他のVirtual Network Functions含む)をホストするサーバ群を相互接続する役割の両方を担う。RANについては、Mobile CoreのデータプレーンであるUPF(User Plane Function)をサーバホスト型マイクロサービスの代わりにスイッチへオフロードでき、これは`fabric.p4`への`upf`拡張として実装される。アクセスネットワークとスイッチングファブリックはSDNにおいて相補的なユースケースであり、この組み合わせの結果が*access-edge cloud*である。[[Aether]]はSD-Fabric・SD-RAN・SD-Coreを自己完結パッケージとして統合したaccess-edge cloudのオープンソース例として挙げられる。(Source: [[@2021__SystemsApproach__Software-Defined Networks - A Systems Approach - Chapter 9 Access Networks]] ch.9 §9.4)
## 第3章(Basic Architecture)での位置づけ
*Software-Defined Networks: A Systems Approach* 第3章§3.5は、SD-Fabricを「ONOSがNetwork OSである以上、扱える制御アプリケーションはONOSホストのものに限られる」という文脈で導入し、その3つの役割(マルチラッククラスタ内のサーバ/VMを相互接続するスイッチングファブリック、上流ピアネットワークへのBGP接続、下流アクセスネットワーク(PON・RAN)への接続)を、第7章の詳細な機能セット・実装戦略・`fabric.p4`の解説より先に概観として示す。ch.3は、SD-Fabricをデータセンター内に閉じた従来型のリーフスパインファブリックとしてではなく、アクセス特有のエッジクラウドとIPベースのデータセンタークラウドを橋渡しするネットワークエッジのインターコネクトとして位置づける点を強調しており、この位置づけは第9章のアクセスネットワークとの組み合わせ(access-edge cloud)を先取りするものである。(Source: [[@2021__SystemsApproach__Software-Defined Networks - A Systems Approach - Chapter 3 Basic Architecture]] ch.3 §3.5)
## 関連
- [[ONOS]] — SD-Fabricが制御アプリケーション群として動作する基盤Network OS
- [[P4]] — fabric.p4を記述する言語
- [[Open Networking Foundation]] — SD-Fabricの開発元
- [[Aether]] — SD-Fabric・SD-RAN・SD-Coreを統合したaccess-edge cloudの例
- [[@2021__SystemsApproach__Software-Defined Networks - A Systems Approach - Chapter 7 Leaf-Spine Fabric]]
- [[@2021__SystemsApproach__Software-Defined Networks - A Systems Approach - Chapter 9 Access Networks]]
- [[@2021__SystemsApproach__Software-Defined Networks - A Systems Approach - Chapter 3 Basic Architecture]]
## 出典
- [[@2021__SystemsApproach__Software-Defined Networks - A Systems Approach - Chapter 7 Leaf-Spine Fabric]](ch.7 §7.1-§7.4)
- [[@2021__SystemsApproach__Software-Defined Networks - A Systems Approach - Chapter 9 Access Networks]](ch.9 §9.4)
- [[@2021__SystemsApproach__Software-Defined Networks - A Systems Approach - Chapter 3 Basic Architecture]](ch.3 §3.5)