- 発売日:2025/05/26
- 出版社:技術評論社
- ISBN/JAN:9784297149437
目次
■第1章 ホワイトボックススイッチとSONiCアーキテクチャ
1.1 ホワイトボックススイッチの内部構造
1.1.1 スイッチの機能レイヤー[マネジメントプレーン・コントロールプレーン・データプレーン]
1.1.2 スイッチの物理構成
1.1.3 ネットワークOSの役割
1.2 SAI誕生の背景と役割
1.2.1 SAIとは
1.3 SONiCアーキテクチャの全体像
1.3.1 SONiCのアーキテクチャ
1.3.2 サブシステムとデータベースの連携動作
■第2章 SONiCの機能とユースケース
2.1 SONiCの機能とユースケース
2.1.1 SONiCで利用可能な機能
2.1.2 開発中の機能とロードマップ
2.2 ユースケース/事例
2.2.1 Microsoft
2.2.2 Alibaba.com
2.2.3 Target
2.2.4 eBay
2.2.5 Google
2.2.6 Orange S.A.
2.2.7 LINE株式会社
2.2.8 KDDI株式会社
2.3 Switch ASIC以外への適用例
2.3.1 SONiC-DASH
2.3.2 SONiC-VPP
2.3.3 TPCM:Third Party Container Management
2.3.4 生成AI/機械学習ネットワーク
■第3章 コミュニティ運営と開発プロセス
3.1 組織構成やメンバー
3.1.1 運営組織のメンバー構成
3.1.2 TSCの活動内容
3.2 情報ソースとコミュニケーションチャネル
3.2.1 ポータルサイトやSNS
3.2.2 メーリングリストとワーキンググループ
3.2.3 GitHub SONiC OrganizationとWikiページ
3.2.4 ソースコード(GitHubレポジトリ)へのアクセス
3.2.5 コミュニティメンバーが集まるカンファレンス
3.2.6 まとめ:情報ソースとコミュニケーションチャネル
3.3 リリースプロセス
3.3.1 リリースプロセスの全体像
3.3.2 コミュニティが実施するテスト(テストベッドとテストプラン)
3.3.3 個人コントリビューター・ライセンス同意書(ICLA)
3.3.4 プロジェクトページ
3.4 不具合報告や修正提案
■第4章 商用版SONiCと有償サポート
4.1 コミュニティ版と商用版SONiCの違い
4.1.1 対応プラットフォーム
4.1.2 機能
4.1.3 テスト
4.1.4 ドキュメント
4.2 新機能追加までの流れ
4.3 主な商用版SONiC提供ベンダー
4.4 有償サポート提供ベンダー
4.4.1 APRESIA Systems株式会社
4.4.2 Aviz Networks
4.4.3 Dell Technologies
4.4.4 株式会社マクニカ
4.4.5 PalC Networks
4.5 まとめ:商用版SONiCや有償サポートの検討ポイント
■第5章 SONiCの入手とインストール
5.1 SONiCが動作する環境の用意
5.1.1 ハードウェア環境(実機環境)
5.1.2 仮想マシン環境
5.1.3 SONiCが動作するスイッチの探し方
5.2 イメージの入手
5.2.1 プリビルドイメージの入手方法
5.2.2 実行イメージのファイル名
5.2.3 ビルド状況の確認方法
5.3 実機での利用方法
5.3.1 実機へのインストールと起動(ONIE)
5.3.2 実機でのアップグレード/ダウングレード方法
5.4 仮想環境での利用方法(sonic-vs on KVM)
5.4.1 KVM環境の準備
5.4.2 SONiC Switch Imageの入手とビルド
5.4.3 KVMドメイン設定ファイルsonic.xmlの編集
5.4.4 SONiC VM(仮想マシン)の起動
5.4.5 ログインIDとパスワードの変更
5.4.6 SSH経由でのログイン方法
5.4.7 起動時設定の変更
■第6章 SONiCの基本操作と設定方法
6.1 SONiCの基本操作と設定ファイル
6.1.1 SONiCの基本的な操作について
6.1.2 設定/設定ファイルの保存場所
6.2 設定ファイルを用いた設定方法
6.2.1 設定の読み込み
6.2.2 設定のスナップショットとロールバック
6.3 2種類のコマンドラインインターフェース
6.3.1 ClickベースのCLI
6.3.2 KlishベースのCLI
6.4 SONiCの基本的な設定
6.4.1 環境の設定
6.4.2 レイヤー2の設定[port VLAN, Tag VLAN]
6.4.3 レイヤー3の設定
■第7章 SONiCの内部構造:アーキテクチャとサブシステム
7.1 SONiCアーキテクチャの全体像
7.1.1 SONiCを構成するサブシステム
7.1.2 サブシステムの連携
7.2 主要なサブシステム
7.2.1 コンテナ一覧の確認方法
7.2.2 主要なコンテナとその役割
7.3 各サブシステムで動作するモジュール
7.3.1 サブシステムで起動しているモジュールの確認
7.3.2 サブシステムに含まれるモジュールと起動制御
7.3.3 コンテナやモジュールのレポジトリ
7.4 databaseコンテナ
7.4.1 databaseコンテナとは
7.5 swssコンテナ
7.5.1 swssコンテナとは
7.5.2 swssコンテナのモジュール起動シーケンス
7.5.3 swssコンテナの機能:*mgrd
7.5.4 swssコンテナの機能:*syncd
7.5.5 swssコンテナの機能:orchagent
7.6 syncdコンテナ
7.6.1 syncdコンテナとは
7.7 bgpコンテナ(routingコンテナ)
7.7.1 bgpコンテナとは
7.7.2 各モジュールの役割
7.8 mgmt-frameworkコンテナとgnmiコンテナ
7.8.1 SONiC管理フレームワークとは
7.9 pmonコンテナ
7.9.1 pmonコンテナとは
7.10 snmpコンテナ
7.10.1 snmpコンテナとそのモジュール
7.11 lldpコンテナ
7.11.1 lldpコンテナとそのモジュール
7.12 teamdコンテナ
7.12.1 teamdコンテナとそのモジュール
7.13 eventdコンテナ
7.13.1 eventdコンテナとeventdモジュール
7.14 フロントパネルポートとホストインターフェース
7.14.1 ホストインターフェースの確認
7.14.2 フロントパネルポートの定義
■第8章 SONiCの内部構造:ステートの流れとモジュール連携
8.1 SONiCのデータベース
8.1.1 SONiCで定義されているデータベース
8.1.2 データベース内のテーブル名
8.1.3 データベースエントリのフォーマット
8.1.4 データベースのスキーマ定義
8.1.5 データベースへのアクセス
8.2 モジュールからデータベースへのアクセス
8.2.1 基本的なデータベースアクセス用のクラス[DBConnector, Table]
8.2.2 ルーティング関連を効率的に処理するクラス[ProducerStateTable]
8.3 モジュールとホストの通信
8.3.1 モジュールからホスト(Kernel)に対する通信
8.3.2 ホスト(Kernel)からモジュールに対する通信
8.3.3 モジュールとホスト(ペリフェラル)に対する通信
8.3.4 フロントパネルポートからホストを経由したパケットの通信[CoPP]
8.4 モジュールからモジュールへのアクセス
8.4.1 orchagent内部の通信
8.5 コンテナのネットワーク構成
8.5.1 コンテナへの権限付与
8.6 SONiCのインターフェース管理
8.6.1 インターフェース管理の流れ
8.7 SONiCのルーティング機能
8.7.1 bgpコンテナで動作するモジュール
8.7.2 ルーティング機能に関連したモジュール連携の流れ
8.7.3 FRRの設定管理
8.7.4 FRR管理フレームワークのメリット
8.8 SONiCの起動とユーザーインターフェース
8.8.1 SONiC起動時の設定の流れ
8.8.2 SONiC CLI(Click)
8.8.3 SONiC CLI(Klish)
8.9 SONiC管理フレームワーク
8.9.1 アーキテクチャやモジュール構成
8.9.2 REST APIの利用
8.9.3 ビルドタイムの流れ
8.9.4 ランタイム処理の流れ
8.9.5 FRR管理フレームワーク
■第9章 SAI詳細解説[API・オブジェクト・データプレーンパイプライン]
9.1 SAI概要
9.1.1 SAIとは
9.2 SAIのパケット処理パイプライン
9.2.1 SAIパイプライン全体像
9.2.2 レイヤー2パイプライン
[COLUMN]2種類のSAIブリッジタイプ(sai_bridge_type_t)
9.2.3 レイヤー3パイプライン
9.3 SAIの定義ファイル[機能共通]
9.3.1 SAIのメタデータ
9.3.2 sai.h
9.3.3 saitypes.h
9.3.4 saistatus.h
9.3.5 saiobject.h
9.3.6 saiversion.h
9.4 SAIの定義ファイル[機能毎]
9.4.1 SAIでサポートされる機能
[COLUMN]SAIの初期仕様におけるAPIセット
9.4.2 機能毎の定義ファイルの構成
9.5 SONiCにおけるSAIの実装
9.5.1 orchagentとsyncdにおけるSAI APIの違い
9.5.2 orchagentにおけるSAIの初期化
9.5.3 syncdにおけるSAIの初期化
9.5.4 sairedisのRedis操作マクロ
■第10章 高度な設定と利用法
10.1 SRv6のサポート状況
10.1.1 SONiCでサポートされているSRv6 機能
10.1.2 SRv6をサポートしているデータプレーン
10.1.3 SONiC SRv6のアーキテクチャ
10.2 SONiCのSRv6設定
10.2.1 SONiCでのSRv6設定反映の流れ
10.2.2 SRv6関連のAPPL_DBスキーマ
10.2.3 テスト構成
10.2.4 基本設定
10.2.5 swssconfigを用いたAPPL_DBエントリの作成と確認
10.3 パケット変換動作の確認
10.3.1 パケット変換動作の確認(End.DT46)
10.3.2 パケット変換動作の確認(H.Encaps.Red)
10.3.3 SAIオブジェクトとASIC_DBエントリ
10.3.4 APPL_DB, ASIC_DBエントリの変換フロー
■第11章 SONiCのトラブルシューティング
11.1 showコマンドによる状態の確認
11.1.1 showコマンドのオプション確認方法
11.1.2 代表的なコマンドの紹介
11.2 ログの参照方法と読み方
11.2.1 syslogのログフォーマット
11.2.2 ログレベルの変更
11.3 APPL_DB変更/SAI呼び出しのログ
11.3.1 ログファイルの場所
11.3.2 ログの読み方
11.4 SONiCのデバッグ
11.4.1 GDBによるデバッグ
11.4.2 ASICの状態確認
11.4.3 バグを発見したら
■Appendix
Appendix1 ソースコードからのビルド
A.1.1 SONiCビルドシステムの概要
A.1.2 SONiCイメージのビルドの流れ
A.1.3 仮想環境でのビルド手順例
A.1.4 ビルドオプションのカスタマイズ(rules/config)
A.1.5 特定モジュール(コンテナ)のビルドと入れ替え
Appendix2 SONiCで利用されているオープンソースプロジェクト
1.1 ホワイトボックススイッチの内部構造
1.1.1 スイッチの機能レイヤー[マネジメントプレーン・コントロールプレーン・データプレーン]
1.1.2 スイッチの物理構成
1.1.3 ネットワークOSの役割
1.2 SAI誕生の背景と役割
1.2.1 SAIとは
1.3 SONiCアーキテクチャの全体像
1.3.1 SONiCのアーキテクチャ
1.3.2 サブシステムとデータベースの連携動作
■第2章 SONiCの機能とユースケース
2.1 SONiCの機能とユースケース
2.1.1 SONiCで利用可能な機能
2.1.2 開発中の機能とロードマップ
2.2 ユースケース/事例
2.2.1 Microsoft
2.2.2 Alibaba.com
2.2.3 Target
2.2.4 eBay
2.2.5 Google
2.2.6 Orange S.A.
2.2.7 LINE株式会社
2.2.8 KDDI株式会社
2.3 Switch ASIC以外への適用例
2.3.1 SONiC-DASH
2.3.2 SONiC-VPP
2.3.3 TPCM:Third Party Container Management
2.3.4 生成AI/機械学習ネットワーク
■第3章 コミュニティ運営と開発プロセス
3.1 組織構成やメンバー
3.1.1 運営組織のメンバー構成
3.1.2 TSCの活動内容
3.2 情報ソースとコミュニケーションチャネル
3.2.1 ポータルサイトやSNS
3.2.2 メーリングリストとワーキンググループ
3.2.3 GitHub SONiC OrganizationとWikiページ
3.2.4 ソースコード(GitHubレポジトリ)へのアクセス
3.2.5 コミュニティメンバーが集まるカンファレンス
3.2.6 まとめ:情報ソースとコミュニケーションチャネル
3.3 リリースプロセス
3.3.1 リリースプロセスの全体像
3.3.2 コミュニティが実施するテスト(テストベッドとテストプラン)
3.3.3 個人コントリビューター・ライセンス同意書(ICLA)
3.3.4 プロジェクトページ
3.4 不具合報告や修正提案
■第4章 商用版SONiCと有償サポート
4.1 コミュニティ版と商用版SONiCの違い
4.1.1 対応プラットフォーム
4.1.2 機能
4.1.3 テスト
4.1.4 ドキュメント
4.2 新機能追加までの流れ
4.3 主な商用版SONiC提供ベンダー
4.4 有償サポート提供ベンダー
4.4.1 APRESIA Systems株式会社
4.4.2 Aviz Networks
4.4.3 Dell Technologies
4.4.4 株式会社マクニカ
4.4.5 PalC Networks
4.5 まとめ:商用版SONiCや有償サポートの検討ポイント
■第5章 SONiCの入手とインストール
5.1 SONiCが動作する環境の用意
5.1.1 ハードウェア環境(実機環境)
5.1.2 仮想マシン環境
5.1.3 SONiCが動作するスイッチの探し方
5.2 イメージの入手
5.2.1 プリビルドイメージの入手方法
5.2.2 実行イメージのファイル名
5.2.3 ビルド状況の確認方法
5.3 実機での利用方法
5.3.1 実機へのインストールと起動(ONIE)
5.3.2 実機でのアップグレード/ダウングレード方法
5.4 仮想環境での利用方法(sonic-vs on KVM)
5.4.1 KVM環境の準備
5.4.2 SONiC Switch Imageの入手とビルド
5.4.3 KVMドメイン設定ファイルsonic.xmlの編集
5.4.4 SONiC VM(仮想マシン)の起動
5.4.5 ログインIDとパスワードの変更
5.4.6 SSH経由でのログイン方法
5.4.7 起動時設定の変更
■第6章 SONiCの基本操作と設定方法
6.1 SONiCの基本操作と設定ファイル
6.1.1 SONiCの基本的な操作について
6.1.2 設定/設定ファイルの保存場所
6.2 設定ファイルを用いた設定方法
6.2.1 設定の読み込み
6.2.2 設定のスナップショットとロールバック
6.3 2種類のコマンドラインインターフェース
6.3.1 ClickベースのCLI
6.3.2 KlishベースのCLI
6.4 SONiCの基本的な設定
6.4.1 環境の設定
6.4.2 レイヤー2の設定[port VLAN, Tag VLAN]
6.4.3 レイヤー3の設定
■第7章 SONiCの内部構造:アーキテクチャとサブシステム
7.1 SONiCアーキテクチャの全体像
7.1.1 SONiCを構成するサブシステム
7.1.2 サブシステムの連携
7.2 主要なサブシステム
7.2.1 コンテナ一覧の確認方法
7.2.2 主要なコンテナとその役割
7.3 各サブシステムで動作するモジュール
7.3.1 サブシステムで起動しているモジュールの確認
7.3.2 サブシステムに含まれるモジュールと起動制御
7.3.3 コンテナやモジュールのレポジトリ
7.4 databaseコンテナ
7.4.1 databaseコンテナとは
7.5 swssコンテナ
7.5.1 swssコンテナとは
7.5.2 swssコンテナのモジュール起動シーケンス
7.5.3 swssコンテナの機能:*mgrd
7.5.4 swssコンテナの機能:*syncd
7.5.5 swssコンテナの機能:orchagent
7.6 syncdコンテナ
7.6.1 syncdコンテナとは
7.7 bgpコンテナ(routingコンテナ)
7.7.1 bgpコンテナとは
7.7.2 各モジュールの役割
7.8 mgmt-frameworkコンテナとgnmiコンテナ
7.8.1 SONiC管理フレームワークとは
7.9 pmonコンテナ
7.9.1 pmonコンテナとは
7.10 snmpコンテナ
7.10.1 snmpコンテナとそのモジュール
7.11 lldpコンテナ
7.11.1 lldpコンテナとそのモジュール
7.12 teamdコンテナ
7.12.1 teamdコンテナとそのモジュール
7.13 eventdコンテナ
7.13.1 eventdコンテナとeventdモジュール
7.14 フロントパネルポートとホストインターフェース
7.14.1 ホストインターフェースの確認
7.14.2 フロントパネルポートの定義
■第8章 SONiCの内部構造:ステートの流れとモジュール連携
8.1 SONiCのデータベース
8.1.1 SONiCで定義されているデータベース
8.1.2 データベース内のテーブル名
8.1.3 データベースエントリのフォーマット
8.1.4 データベースのスキーマ定義
8.1.5 データベースへのアクセス
8.2 モジュールからデータベースへのアクセス
8.2.1 基本的なデータベースアクセス用のクラス[DBConnector, Table]
8.2.2 ルーティング関連を効率的に処理するクラス[ProducerStateTable]
8.3 モジュールとホストの通信
8.3.1 モジュールからホスト(Kernel)に対する通信
8.3.2 ホスト(Kernel)からモジュールに対する通信
8.3.3 モジュールとホスト(ペリフェラル)に対する通信
8.3.4 フロントパネルポートからホストを経由したパケットの通信[CoPP]
8.4 モジュールからモジュールへのアクセス
8.4.1 orchagent内部の通信
8.5 コンテナのネットワーク構成
8.5.1 コンテナへの権限付与
8.6 SONiCのインターフェース管理
8.6.1 インターフェース管理の流れ
8.7 SONiCのルーティング機能
8.7.1 bgpコンテナで動作するモジュール
8.7.2 ルーティング機能に関連したモジュール連携の流れ
8.7.3 FRRの設定管理
8.7.4 FRR管理フレームワークのメリット
8.8 SONiCの起動とユーザーインターフェース
8.8.1 SONiC起動時の設定の流れ
8.8.2 SONiC CLI(Click)
8.8.3 SONiC CLI(Klish)
8.9 SONiC管理フレームワーク
8.9.1 アーキテクチャやモジュール構成
8.9.2 REST APIの利用
8.9.3 ビルドタイムの流れ
8.9.4 ランタイム処理の流れ
8.9.5 FRR管理フレームワーク
■第9章 SAI詳細解説[API・オブジェクト・データプレーンパイプライン]
9.1 SAI概要
9.1.1 SAIとは
9.2 SAIのパケット処理パイプライン
9.2.1 SAIパイプライン全体像
9.2.2 レイヤー2パイプライン
[COLUMN]2種類のSAIブリッジタイプ(sai_bridge_type_t)
9.2.3 レイヤー3パイプライン
9.3 SAIの定義ファイル[機能共通]
9.3.1 SAIのメタデータ
9.3.2 sai.h
9.3.3 saitypes.h
9.3.4 saistatus.h
9.3.5 saiobject.h
9.3.6 saiversion.h
9.4 SAIの定義ファイル[機能毎]
9.4.1 SAIでサポートされる機能
[COLUMN]SAIの初期仕様におけるAPIセット
9.4.2 機能毎の定義ファイルの構成
9.5 SONiCにおけるSAIの実装
9.5.1 orchagentとsyncdにおけるSAI APIの違い
9.5.2 orchagentにおけるSAIの初期化
9.5.3 syncdにおけるSAIの初期化
9.5.4 sairedisのRedis操作マクロ
■第10章 高度な設定と利用法
10.1 SRv6のサポート状況
10.1.1 SONiCでサポートされているSRv6 機能
10.1.2 SRv6をサポートしているデータプレーン
10.1.3 SONiC SRv6のアーキテクチャ
10.2 SONiCのSRv6設定
10.2.1 SONiCでのSRv6設定反映の流れ
10.2.2 SRv6関連のAPPL_DBスキーマ
10.2.3 テスト構成
10.2.4 基本設定
10.2.5 swssconfigを用いたAPPL_DBエントリの作成と確認
10.3 パケット変換動作の確認
10.3.1 パケット変換動作の確認(End.DT46)
10.3.2 パケット変換動作の確認(H.Encaps.Red)
10.3.3 SAIオブジェクトとASIC_DBエントリ
10.3.4 APPL_DB, ASIC_DBエントリの変換フロー
■第11章 SONiCのトラブルシューティング
11.1 showコマンドによる状態の確認
11.1.1 showコマンドのオプション確認方法
11.1.2 代表的なコマンドの紹介
11.2 ログの参照方法と読み方
11.2.1 syslogのログフォーマット
11.2.2 ログレベルの変更
11.3 APPL_DB変更/SAI呼び出しのログ
11.3.1 ログファイルの場所
11.3.2 ログの読み方
11.4 SONiCのデバッグ
11.4.1 GDBによるデバッグ
11.4.2 ASICの状態確認
11.4.3 バグを発見したら
■Appendix
Appendix1 ソースコードからのビルド
A.1.1 SONiCビルドシステムの概要
A.1.2 SONiCイメージのビルドの流れ
A.1.3 仮想環境でのビルド手順例
A.1.4 ビルドオプションのカスタマイズ(rules/config)
A.1.5 特定モジュール(コンテナ)のビルドと入れ替え
Appendix2 SONiCで利用されているオープンソースプロジェクト
