
Rustベースのルーティングプロトコルスイート。BGP、OSPF、IS-IS、RIP、VRRPを実装し、YANGモデルによる設定、gNMI/gRPCによる自動化、およびビルトインファジングを備えており、大規模な自動化駆動型ネットワークに対応します。
Holoは、大規模かつ自動化駆動型ネットワークをサポートするために設計されたルーティングプロトコルスイートです。
ルーティングプロトコルの説明については、こちらのWikipediaページを参照してください。
Holoの主な目標は、信頼性が高く、保守が容易で、拡張可能なコードベースを作ることです。ルーティングプロトコルとその拡張機能の複雑さが増す中、堅牢な基盤の上にルーティングプロトコルの実装を構築することが重要です。そのために、Holoのコードベースはシンプルさ、モジュール性、そして徹底したドキュメントを優先しています。Rustコンパイラの厳格さと広範な単体テストのおかげで、新機能の開発サイクルにおいてほとんどの回帰バグを早期に発見できることが期待されます。詳細については、Architectureページを参照してください。
Holoは、構造化およびモデル化されたデータを用いたプログラム可能な設定と監視を必要とする、大規模な自動化駆動ネットワーク向けに特別に開発されました。Holoは、IETFの標準YANGモジュールをネイティブに実装し、ネイティブのgRPCやgNMIを含む複数の管理インターフェースをサポートします。さらに、HoloはスタンドアロンのCLIを備えており、YANGモジュールからコマンドを動的にレンダリングし、gRPCを介してHoloデーモンと通信します。
設定に対する変更はトランザクションとして処理され、すべての変更が適用されるか、まったく適用されないかのいずれかが保証されます。この機能は、管理アプリケーションでのエラー復旧の必要性を排除するため、ネットワーク自動化の重要な促進要因です。Holoはまた、複数のネットワークデバイスを含むネットワーク全体のトランザクションもサポートします。その他のネットワーク自動化機能には、確認付きコミットや設定ロールバックのサポートが含まれます。
メモリ安全な言語で書かれていることにより、Holoは多種多様なメモリ関連のバグやセキュリティ脆弱性の影響を受けません。Rustが提供する安全性の保証に加えて、Holoデーモンは起動時に権限をドロップします。特定の操作(ソケットのバインドなど)では、Linuxのケイパビリティを使用して、最小限の時間だけ必要な最小限の権限を取得します。
Holoはまた、ルーティングプロトコルスタックにおける最も一般的な攻撃ベクトルである、悪意のあるパケット入力によるサービス拒否(DoS)攻撃に対する堅牢な保護を提供します。受信パケットは分離された監視付きの非同期タスクでデコードされ、プロトコル実装はパニックから正常に回復できます。例えば、不正なパケットを無視したり、影響を受けるTCPストリームのみを閉じたりすることで、デーモン全体の安定性を損なうことなく処理できます。さらに、Holoのモジュラー設計とカバレッジガイド付きファジングの組み込みサポートのおかげで、ほとんどのパースバグは開発中に検出され対処されることが期待されます。
OSPFやRIPなどの一部のプロトコルには、広く展開されている異なるバージョンがあり、通常はIPv4用とIPv6用があります。HoloはRustのジェネリクスを活用してバージョン非依存のプロトコル実装を実現し、異なるプロトコルバージョンでコードの大部分が共有されます。このアプローチにより、これらのプロトコルのメンテナンスコストが削減され、すべてのプロトコルバージョンに利益をもたらす新機能の導入が容易になります。
Holoは非同期操作を広範囲に利用し、Tokioランタイムに依存してタスクをスケジュールし、スレッドプールで実行します。より良いパフォーマンスを達成するために、I/O要求とCPU集約型アルゴリズムの両方が別々のタスクにオフロードされ、利用可能なすべてのCPUコアの使用率を最大化します。ランタイムに依存しないコードのサポートは、Rust言語チームによって必要な抽象化が標準化された後、将来計画されています。
Holoは構造化データを含むログメッセージを生成し、JSON、テキストなどのさまざまな形式で表示できます。ロギングはtraitngファサードを介して実行されるため、多様なtraitngサブスクライバを利用してさまざまなユーザー要件を満たすことができます。例えば、ロギングをファイル、journald、集中型OpenTelemetryコレクター、またはこれらのオプションの任意の組み合わせ(異なるログレベルで設定可能)に送ることができます。
Holoは記録・再生機能を提供し、ユーザーから報告された任意のバグを簡単に再現できます。Holoデーモンは、プロトコルインスタンスの全ライフスパンをファイルに記録するように設定できます。そのファイルを別のマシンで再生して、同じ一連のイベントを再現できます。記録セッションは数時間から数日続く場合がありますが、再生プロセスは数秒で完了します。これは、時間関連およびI/O操作がすべて別々のタスクで実行され、イベントメッセージとして抽象化されているHoloのモジュラーアーキテクチャのおかげで可能です。
インストールの詳細な手順については、INSTALL.mdファイルを参照してください。
現時点では、HoloはLinuxオペレーティングシステムとのみ互換性があります。WebAssemblyのサポートは将来計画されています。
Holoを使い始める最も簡単な方法は、事前にビルドされたDockerコンテナをcontainerlabソフトウェアと組み合わせて使用することです。事前設定されたさまざまなネットワークトポロジをこのリンクで見つけることができます。これらのトポロジは単一のコマンドでデプロイでき、他の実装との相互運用性テストを含むさまざまなネットワークセットアップでHoloをテストできます。
さらに、Holoは、機能セットが特定のニーズに合致する限り、ソフトウェアルーターなど、ルーティングスタックが必要な場所ならどこでも使用できます。
Holoは以下のインターネット標準をサポートしています。
Ixia IxANVL RFCコンプライアンステスターで実行されたコンフォーマンステストの結果はこちらで入手できます。
このプロジェクトは、欧州委員会のNext Generation Internetプログラムからの財政的支援を受けてNLnetによって設立された基金であるNGI Zero Coreを通じて資金提供されています。詳細はNLnetプロジェクトページをご覧ください。
このプロジェクトは[MITライセンス]の下でライセンスされています。
バグレポートからプルリクエストまで、あらゆるコントリビューションを歓迎します。貢献のアイデアについては、プロジェクトウィッシュリストを参照してください。
あなたが明示的に別途述べない限り、Holoに含めるためにあなたが意図的に提出したコントリビューションは、追加の条件なしにMITとしてライセンスされるものとします。
| モジュール | 設定 | 状態 | RPC | 通知 | 合計 |
|---|
| ietf-bfd-ip-mh@2022-09-22 | 100.00% | 100.00% | - | 100.00% | 100.00% |
| ietf-bfd-ip-sh@2022-09-22 | 100.00% | 100.00% | - | 100.00% | 100.00% |
| ietf-bfd@2022-09-22 | 100.00% | 100.00% | - | - | 100.00% |
| ietf-bgp-policy@2023-07-05 | 100.00% | - | - | - | 100.00% |
| ietf-bgp@2023-07-05 | 32.38% | 85.95% | - | - | 60.40% |
| ietf-bier@2023-09-12 | 100.00% | - | - | 0.00% | 72.50% |
| ietf-if-extensions@2023-01-26 | 100.00% | 0.00% | - | - | 50.00% |
| ietf-if-vlan-encapsulation@2023-01-26 | 42.86% | - | - | - | 42.86% |
| ietf-igmp-mld@2019-11-01 | 84.62% | 100.00% | - | - | 95.83% |
| ietf-interfaces@2018-02-20 | 100.00% | 0.00% | - | - | 22.22% |
| ietf-ip@2018-02-22 | 52.17% | 0.00% | - | - | 40.00% |
| ietf-ipv4-unicast-routing@2018-03-13 | 100.00% | 100.00% | - | - | 100.00% |
| ietf-ipv6-unicast-routing@2018-03-13 | 40.62% | 100.00% | - | - | 45.71% |
| ietf-isis-flex-algo@2026-06-26 | 0.00% | 100.00% | - | 0.00% | 74.00% |
| ietf-isis-link-attr@2026-06-26 | 81.82% | 78.43% | - | - | 78.76% |
| ietf-isis-msd@2024-09-02 | - | 100.00% | - | - | 100.00% |
| ietf-isis-sr-mpls@2025-12-09 | 15.38% | 57.27% | - | - | 52.85% |
| ietf-isis@2022-10-19 | 93.62% | 80.09% | 100.00% | 100.00% | 86.77% |
| ietf-key-chain@2017-06-15 | 100.00% | 100.00% | - | - | 100.00% |
| ietf-mpls-ldp@2022-03-14 | 86.96% | 92.31% | 100.00% | 100.00% | 92.38% |
| ietf-mpls@2020-12-18 | 0.00% | 57.14% | - | - | 35.29% |
| ietf-ospf-anycast-flag@2026-05-19 | 100.00% | - | - | - | 100.00% |
| ietf-ospf-sr-mpls@2025-12-09 | 21.43% | 51.36% | - | - | 49.82% |
| ietf-ospf@2022-10-19 | 95.70% | 85.04% | 100.00% | 58.06% | 83.89% |
| ietf-ospfv3-extended-lsa@2024-06-07 | 50.00% | 85.28% | - | - | 84.85% |
| ietf-rip@2020-02-20 | 27.91% | 93.33% | 100.00% | - | 55.41% |
| ietf-routing-policy@2021-10-11 | 100.00% | 0.00% | - | - | 98.11% |
| ietf-routing@2018-03-13 | 100.00% | 85.71% | - | - | 92.31% |
| ietf-segment-routing-mpls@2021-05-26 | 62.50% | 0.00% | - | 23.53% | 32.76% |
| ietf-segment-routing@2021-05-26 | 100.00% | - | - | - | 100.00% |
| ietf-system@2014-08-06 | 26.67% | 60.00% | 0.00% | - | 38.24% |
| ietf-vrrp@2018-03-13 | 53.19% | 80.00% | - | 66.67% | 66.35% |