フル機能のネットワークスタックを、深く組み込まれたターゲットに組み込もうとした経験がある方ならこんな経験があるのではないでしょうか — メモリ資源はすぐに逼迫し、タイミングは不安定になり、動的メモリ割り当ては認証作業に時間がかかる。
wolfIP は、そうした課題に対する私たちからの提案です。組み込みシステムを第一に考えて設計したコンパクトな TCP/IP スタックで、予期せぬ挙動よりも予測可能性を重視しています。
malloc は使いません。隠れたスレッドもありません。
あるのは、事前割り当てされたバッファ、固定数のソケット、そして統合しやすい BSD 風のノンブロッキング・ソケット API だけです。
wolfIP は、小さく予測可能なネットワーキングコアを提供し、wolfSSL と自然に組み合わせることでエンドツーエンドのセキュア通信を実現します。静的メモリモデルにより、航空機向けソフトウェアの認証DO-178C のような安全規格を目指すセーフティクリティカルなプロジェクトにも適しています。
なぜ wolfIP なのか
設計段階からの決定性
wolfIP は、すべての作業用メモリをコンパイル時に割り当てます。RX/TX プールやソケットテーブルのサイズを事前に決めるため、実行時のメモリ使用量が変動することはありません。RAM 制約が厳しい環境や、検証用アーティファクトが求められる開発では、これは非常に重要です。
組み込み最優先の小さなフットプリント
マイコンやリソース制約のあるシステムを対象としています。現バージョンは、エンドポイントモード(ホスト専用、ルーティングなし)で、単一のネットワークインタフェースだけをサポートします。これは、多くの MCU にとって必要十分な構成です。
安全規格に配慮した設計
動的メモリ割り当てを排除し、事前に定義されたバッファ数を用いることで、最悪ケース解析やスタック/ヒープ監査が容易になります。安全・セキュリティ認証の実績を持つ wolfSSL と組み合わせることで、高信頼設計への明確な道筋が得られます。
wolfSSL と最初から相性抜群
ソケットおよびコールバックモデルは wolfSSL の I/O フックと自然に対応しており、wolfIP の上に TLS 1.3 を重ねて安全な通信を簡単に実装することができます。
現バージョンの機能
– IPv4 ホストスタック(エンドポイントモード)
– ARP、ICMP(エコー応答)、DHCP クライアント、DNS クライアント
– UDP(ユニキャスト)
– TCP(RFC 793、Timestamp および MSS オプション対応)
– BSD 風ノンブロッキングソケット(カスタム I/O コールバック対応)
– 動的メモリ割り当てなし
– 固定同時接続ソケット数
– 静的メモリに事前割り当てされた RX/TX パケットバッファ
この構成により、スタックは小さく保たれつつ、組み込み用途の“スイートスポット”をカバーします。デバイス検出、基本的な IP サービス、UDP によるテレメトリ/コマンド通信、制御や TLS 用の信頼性ある TCP ストリームなどです。
小さなコードベースと静的メモリが安全認証に有利な理由
RTCA DO-178C のような安全規格では、予測可能で解析しやすい設計が評価されます。ネットワークスタックが次の条件を満たしていれば、
– 実行時にメモリを割り当てない
– 固定サイズの事前割り当てプールを使用する
– 実行経路が明確で、リソースが上限付きである
最悪ケースのメモリ/タイミング解析が大幅に簡素化され、決定性を示すための工数も削減できます。つまり、「想定外が少なく、説明可能なアーティファクトが増える」ということです。wolfIP の設計はこれらの期待に沿っており、DO-178C(最大 DAL-A)向けのアーティファクトを提供している wolfSSL / wolfCrypt と自然に組み合わせることが可能です。
wolfSSL との自然な統合
TCP の上に TLS が必要ですか? wolfIP のソケットに wolfSSL を直接重ね、慣れ親しんだ wolfSSL の I/O コールバックを使うだけです。
その結果、極小 MCU から本格的な RTOS/MPU 環境までスケールする、単一ベンダー・単一 API スタイルのコンパクトなオール wolf スタックが実現します。
まずはじめに
- リポジトリをクローンし、提供されているサンプル/ターゲットをビルドします。
- 構成ヘッダを編集し、最大ソケット数や RX/TX バッファサイズを用途に合わせて設定します。
- 送受信およびリンク状態を扱う、シンプルなコールバックインタフェースを実装して NIC/ドライバを接続します。
- ドライバがない場合は、tap インタフェースを使って POSIX システムとの通信をテストできます。
- (任意)TLS を追加:wolfIP ソケットを WOLFSSL オブジェクトにバインドし、wolfSSL の send/recv コールバックで TLS 1.3 を有効化します。
- curl でテスト済みの https サンプルコードを確認してください。
wolfIP は単一インタフェース・エンドポイント専用のため、立ち上げは非常に迅速です。
クライアント用途なら DHCP+DNS、固定設置なら静的 IP。ICMP エコー応答も内蔵されているので、リンクが上がればすぐに ping できます。
wolfIPはこんなユーザ/プロジェクトにおすすめです
– RAM とコードサイズの予測性が重要な MCU/ベアメタルプロジェクト
– メモリやスケジューリングを細かく制御したい RTOS 環境
– 静的メモリとリソース上限の恩恵を受けるセーフティクリティカル分野(航空、産業、医療)
– wolfSSL と密に統合された TLS を、単一ベンダーで使いたいチーム
安定版に向けたロードマップ
wolfIP は活発に開発が進められています。最近実装され、現在レビュー中の項目には以下があります。
- 複数データリンクインタフェース対応:複数インタフェースの配列をサポートし、既存 API は最初の(非ループバック)インタフェースを既定とします。ループバックデバイスの追加や、インタフェース間の簡易トラフィック転送も含まれます。
- IPsec ESP(トランスポートモード): 選択したフローに対するネットワーク層保護を可能にする、初期的な ESP 暗号化/復号パスと、パケットデバッグ用ヘルパ(Ethernet/IP/TCP/ESP)。
優先してほしいプラットフォーム、NIC、機能があれば、info@wolfssl.jp
までご連絡ください。
リソース制約のある組み込み、またはセーフティクリティカルなシステム向けに TCP/IP スタックを検討中で、決定的なメモリ使用、堅牢な TCP、シームレスな TLSをお探しでしたら、ぜひ wolfIP を試してみてください。
小さく、予測可能なネットワークの良さをきっと実感いただけるはずです。
ご質問やお問い合わせは info@wolfssl.jpまでお寄せください。
原文:https://www.wolfssl.com/introducing-wolfip-a-tiny-safe-tcp-ip-stack-for-embedded-and-safetycritical-systems/