
2026/03/13 0:39
ウルフIP:動的メモリ確保を行わない軽量TCP/IPスタック
RSS: https://news.ycombinator.com/rss
要約▶
Japanese Translation:
(欠落した詳細を組み込む):**
WolfIPは、リソース制限のある組込みデバイス向けに設計されたコンパクトで静的メモリのみを使用するTCP/IPスタックで、BSD風のノンブロッキングソケットAPIを提供します。動的メモリ割り当てを行わずに実行できるよう設計されており、ソケットとバッファに固定制限を持つ「エンドポイントのみ」モードをサポートするため、高い決定性があり、制約のあるシステムへの埋め込みが容易です。スタックは、イーサネットからTCP/UDP/IPまでのすべての標準ネットワーク層を実装し、IPv4フォワーディング、IPsec ESP、およびHTTP/HTTPS用のwolfSSLベースのTLSレイヤーなどのオプション機能も含みます。また、DHCPやDNSといった一般的なクライアントプロトコルと、HTTP/HTTPSといったサーバ機能を提供します。
POSIXシムは
libwolfip.so を構築し、これを LD_PRELOAD してホストツールのソケット呼び出しをリダイレクトできます。TAPデバイス(wtcp0)を作成するため、nc や ping のようなユーティリティがスタックを透過的に利用できるようになります。FreeRTOS ポートはリアルタイムオペレーティングシステムへの適合性を示しており、バックグラウンドタスクで wolfIP_poll() を繰り返し呼び出し、ミューテックス保護されたラッパーでソケット操作のスレッドセーフを維持します。
将来的な計画としては、さらに多くのプロトコルや動的メモリサポートの追加が示唆されていますが、現在の焦点は静的割り当てと最小フットプリントにあります。組込み開発者向けにWolfIPはOSネットワーク層なしで完全なネットワーキング機能を提供し、リソース使用量を削減し統合を簡素化しますが、そのGPLv3ライセンスは商用展開の意思決定に影響する可能性があります。
本文
概要とプロジェクト目標
wolfIP は、動的メモリ割り当てを行わず、リソースが限られた組込みシステム向けに設計された TCP/IP スタックです。
- エンドポイントモードのみをサポートします ― ネットワーク接続は確立できますが、インタフェース間のトラフィックルーティングは行いません。
- デバイスには単一のネットワークインタフェースしか割り当てられません。
サポートされる機能
- BSD 風・非ブロッキングソケット API(カスタムコールバック付き)
- 動的メモリ割り当てなし
- 同時に使用できるソケット数は固定
- パケット処理用バッファは静的メモリに事前確保
プロトコルと RFC
| 層 | プロトコル | 機能 | RFC |
|---|---|---|---|
| データリンク | Ethernet II | フレームカプセル化 | IEEE 802.3 |
| データリンク | ARP | アドレス解決、リクエスト/リプライ | 826 |
| ネットワーク | IPv4 | データグラム配信、TTL 管理 | 791 |
| ネットワーク | IPv4 Forwarding | 複数インタフェース経由のルーティング(任意) | 1812 |
| ネットワーク | ICMP | エコーリクエスト/リプライ、TTL 超過 | 792 |
| ネットワーク | IPsec | ESP トランスポートモード | 4303 |
| トランスポート | UDP | ユニキャストデータグラム、チェックサム | 768 |
| トランスポート | TCP | コネクション管理、信頼性配信 | 793, 9293 |
| トランスポート | TCP | 最大セグメントサイズ交渉 | 793 |
| トランスポート | TCP | タイムスタンプ、RTT 測定、PAWS、ウィンドウスケーリング | 7323 |
| トランスポート | TCP | RTO 計算 | 6298, 5681 |
| トランスポート | TCP | SACK | 2018, 2883, 6675 |
| トランスポート | TCP | 減速開始・輻輳回避 | 5681 |
| トランスポート | TCP | ファストリトランスミット、重複 ACK 三連発検知 | 5681 |
| アプリケーション | DHCP | クライアントのみ(DORA) | 2131 |
| アプリケーション | DNS | A・PTR レコードクエリ(クライアント) | 1035 |
| アプリケーション | HTTP/HTTPS | wolfSSL TLS 対応サーバ | 9110 |
LD_PRELOAD
を用いた機能テスト
LD_PRELOADPOSIX シムは
libwolfip.so をビルドし、ホストツールの前に挿入して socket(2) などを wolfIP スタックへリダイレクトします。TAP デバイス(wtcp0)経由で動作します。
sudo LD_PRELOAD=$PWD/libwolfip.so nc 10.10.10.2 80
プロセスが開く TCP ソケットは、ホストカーネルではなく wolfIP により処理されます。
TAP デバイス経由の Ping:
sudo LD_PRELOAD=$PWD/libwolfip.so ping -I wtcp0 -c5 10.10.10.1
-I wtcp0 はテストを挿入されたインタフェースに固定し、-c5 が 5 回のエコーリクエストを送信します。応答が返ってくれば、tap デバイス経由での ICMP データグラムのエンドツーエンドサポートが確認できます。
FreeRTOS ポート
wolfIP は専用の FreeRTOS ラッパーポートを提供しています:
src/port/freeRTOS/bsd_socket.csrc/port/freeRTOS/bsd_socket.h
このポートは POSIX シムと同様のモデルに従います:
- バックグラウンドタスクが
をループします。wolfIP_poll() - ソケットラッパーはミューテックスでスタックアクセスを直列化します。
- ブロッキング操作はコールバック駆動のウェイクアップで待機(バッファリングではなく)します。
著作権とライセンス
wolfIP は GPLv3 の下で配布されています。詳細は LICENSE ファイルをご覧ください。
著作権 © 2025 wolfSSL Inc.