第6回LSI IP デザイン・アワード
オープンソースの組込みシステム用
TCP/IP プロトコルスタック: TINET

苫小牧工業高等専門学校
情報工学科
阿部 司 吉村 斎 稲川 清

TINET の特徴• ベースは FreeBSD– 枯れたソフトウェアで、他システムの手本– BSD ライセンスによる配布– 人的リソース制約• 組込みシステムのリソース制約に対応• 対応 RTOS は TOPPERS/JSP カーネル• API は ITRON TCP/IP API 仕様
2004/5/20

オープンソースの組込みシステム用
TCP/IP プロトコルスタック: TINET

2

TOPPERSプロジェクト• Toyohashi Open Platform for Embedded and Real Time Systems• ITRON仕様のRTOSの決定版– オープンソース– JSP（Just Standard Profile）カーネル• 問題点の解決– 過剰な重複投資、過剰な多様性• 次世代RTOS技術の開発• 組込みシステム技術者の育成
2004/5/20

オープンソースの組込みシステム用
TCP/IP プロトコルスタック: TINET

3

TOPPERSプロジェクト• 経緯– 2000年11月 JSPカーネルの最初のリリース公開– 2001年5月 第3回LSI IPアワードIP優秀賞受賞– 2003年9月 NPO法人設立• 会員数 109（2004/4/23 現在）• 会長– 名古屋大学教授 高田広章（元豊橋技術科学大学）• URL– http://www.toppers.jp/
2004/5/20

オープンソースの組込みシステム用
TCP/IP プロトコルスタック: TINET

4

TOPPERS/JSPカーネル• JSP カーネルの現在のリリースは 1.4• μITRON 4.0 スタンダードプロファイル準拠• 多様な CPU に対応– MC68040、SH1/3/4、H8/H8s、ARM7TDMI、
V850、M32R、MicroBlaze、TMS320C54x、i386、MIPS、Nios、PowerPC、M16C

2004/5/20

オープンソースの組込みシステム用
TCP/IP プロトコルスタック: TINET

5

ITRON TCP/IP API 仕様• 1998年、ITRON 専門委員会によりITRON 仕様に認定• 組込みシステムの制約– 厳しいハードウェア制約– リアルタイム性– 高信頼性2004/5/20

オープンソースの組込みシステム用
TCP/IP プロトコルスタック: TINET

6

ITRON TCP/IP API 仕様• プロトコルスタックに求められる性質– 最小限メモリ領域の使用– データのコピー回数の低減– 動的なメモリ管理の回避– 非同期インタフェース– ノンブロッキングコール– API 毎のエラーの詳細

2004/5/20

オープンソースの組込みシステム用
TCP/IP プロトコルスタック: TINET

7

TCP のAPI*

API 名機能TCP̲CRE̲REP TCP受付口の生成
TCP̲CRE̲CEP TCP通信端点の生成
tcp̲acp̲cep 接続要求待ち
tcp̲con̲cep 接続要求
tcp̲sht̲cep データ通信終了
tcp̲cls̲cep 通信端点のクローズ
tcp̲snd̲dat データの送信
tcp̲rcv̲dat データの受信
tcp̲get̲buf 送信用バッファの取得
tcp̲snd̲buf バッファ内データの送信
tcp̲rcv̲buf 受信バッファの取得
tcp̲rel̲buf 受信用バッファの解放
tcp̲can̲cep 処理のキャンセル*
NBLK : ノンプロッキングコール
2004/5/20

NBLK
省コピー
送信系 受信系

○○
○
○
○
○

オープンソースの組込みシステム用
TCP/IP プロトコルスタック: TINET

○○
○
○
○

8

UDP のAPI
API 名機能UDP̲CRE̲CEP
UDP通信端点の生成
udp̲snd̲dat
パケットの送信udp̲rcv̲dat
パケットの受信udp̲can̲cep
処理のキャンセル
UDPパケットの受信 UDPパケットの受信

2004/5/20

オープンソースの組込みシステム用
TCP/IP プロトコルスタック: TINET

NBLK
送信系 受信系○○

9実装上特に考慮した事項• 組込みシステムのリソース制約（TINET のみ）– RAM メモリの必要量: 約10Kバイト– ROM メモリの必要量: 約50Kバイト• ITRON TCP/IP API 仕様– 最小のコピー回数– 動的メモリ管理の排除• 実時間性の制約
2004/5/20

オープンソースの組込みシステム用
TCP/IP プロトコルスタック: TINET

10

対象の組込みシステムの規模• ROM容量128Kバイト• RAM容量32 K バイト• レジスタとALU32 ビット• ワンチップ CPU + 外部メモリ• メモリ管理ユニットなし

2004/5/20

オープンソースの組込みシステム用
TCP/IP プロトコルスタック: TINET

11

TINET が提供する機能• 幅広い応用層に対応• TCP のオプションは MSS のみ• IP のオプションと分割機能なし• 単一リンクの終端ノード• 単一のネットワークインタフェース

2004/5/20

オープンソースの組込みシステム用
TCP/IP プロトコルスタック: TINET

12

実装ターゲット• 秋月電子通商製H8/3069F LAN ボード– 内部ループバック– シリアルインタフェースを利用した PPP– NE2000 互換 NIC• 北斗電子製 HSB7727ST（SH3）– SMCS製 LAN91C111 NIC• XILINX製 MicroBlaze– ワイ・デー・ケー製 MAC_YG0130 NIC
2004/5/20

オープンソースの組込みシステム用
TCP/IP プロトコルスタック: TINET

13

TINET の階層
応用プログラム
ITRON TCP/IP API
UDP
TCP
IP
ICMPARP
汎用イーサネット制御
JSP カーネル
NIC 制御ハードウェア（H8/3069F、NE2000互換NIC）

2004/5/20

オープンソースの組込みシステム用
TCP/IP プロトコルスタック: TINET

14

ITRON TCP/IP API の実装• 基本機能• ノンブロッキングコール• 省コピー API• コールバック関数• 静的API– TCP/UDP 通信端点の生成– TCP 受付口の生成
2004/5/20

オープンソースの組込みシステム用
TCP/IP プロトコルスタック: TINET

15

TCP の機能• BSD 制御アルゴリズム– BSD TCP 状態遷移（内部）– MSS オプション– 遅延確認応答– 再送制御– 輻輳回避– 高速再転送と高速リカバリ• 省コピー API• ノンブロッキングコール
2004/5/20

オープンソースの組込みシステム用
TCP/IP プロトコルスタック: TINET

16

ネットワークバッファ（net_buf）
1

1

idix unit

20 or 2128 〜 ネットワークヘッダ+MTU

lenaligndata• 固定長のメモリブロック– 下位層のヘッダ領域をあらかじめ確保。
– 途中での動的なメモリ操作は行わない。
– ヘッダ長は 4 オクテット、1,514 オクテットのイーサネットフレームでオーバヘッドは0.4%。
2004/5/20

オープンソースの組込みシステム用
TCP/IP プロトコルスタック: TINET

17

TINET のメモリ必要量
機

能TCP
UDP
ICMP
IP
ARP
TCP/IP共通機能
汎用通信機能イーサネットnet̲buf 管理
小 計
応用プログラム
JSP カーネル
合 計
2004/5/20

RAM
1,328
1,104
20
0
160
0
1,184
2,140
3,524
9,460
13,404
4,364
27,228ROM
28,652
4,746
1,404
736
2,314
1,572
2,288
3,408
256
45,376
4,614
30,27680,266

オープンソースの組込みシステム用
TCP/IP プロトコルスタック: TINET

合 計
29,980
5,850
1,424
736
2,474
1,572
3,472
5,548
3,780
54,83618,01834,640107,494
18

TINET のメモリ必要量の固定分
機

能TCP
UDP
ICMP
IP
ARP
TCP/IP共通機能
汎用通信機能小 計
イーサネットnet̲buf 管理
合 計

RAM
32
16
20000
160
228
9220340

ROM
28,652
4,746
1,404
736
2,314
1,572
2,288
41,712
3,408
256
45,376

合 計
28,684
4,762
1,424
736
2,314
1,5722,448
41,9403,500
27645,716（スタック、静的API、ARPキャッシュ、net_buff を除く）
2004/5/20

オープンソースの組込みシステム用
TCP/IP プロトコルスタック: TINET

19

FreeBSD のメモリ必要量の固定分
機

能TCP
UDP
ICMP
IP
ARP
TCP/IP共通機能
汎用通信機能合 計

2004/5/20

RAM
3,492
536
648
3,804
488
1,528
1,368
11,864

ROM
39,986
5,196
4,914
28,9446,780
14,35437,498
137,672

オープンソースの組込みシステム用
TCP/IP プロトコルスタック: TINET

合 計
43,4785,732
5,562
32,748
7,268
15,882
38,866
149,536

20

TCP 制御用構造体
TINET の TCP 制御用構造体
構造体
サイズ
TCP 受付口
12
TCP 通信端点
130
合 計142FreeBSD の TCP 制御用構造体
構造体
サイズ
ファイル記述子28
ソケット
160
TCP 制御ブロック
188
プロトコル制御ブロック
96
合 計
472

2004/5/20

オープンソースの組込みシステム用
TCP/IP プロトコルスタック: TINET

21

応用プログラム実装例• ネットワークインタフェース– イーサネット– PPP（直接接続とダイアルアップ）• HTTPバージョン1.0– 要求・応答毎に接続と切断• 2 ページ表示可能– トップページ– ネットワーク統計情報
2004/5/20

オープンソースの組込みシステム用
TCP/IP プロトコルスタック: TINET

22

WWW サーバ表示例

2004/5/20

オープンソースの組込みシステム用
TCP/IP プロトコルスタック: TINET

23

コンソール画面「TCP状態遷移」

2004/5/20

オープンソースの組込みシステム用
TCP/IP プロトコルスタック: TINET

24

配布状況
• 最新リリースは、1.1.1 で、4/21 から配布
• 配布場所– 宮城県産業技術総合センター様• http://www.mit.pref.miyagi.jp/embedded/consortium/• ダウンロード数は、2月末までに832件– TOPPERSプロジェクト• http://www.toppers.jp/

2004/5/20

オープンソースの組込みシステム用
TCP/IP プロトコルスタック: TINET

25

今後の課題• IPv6 への対応
– IPv6 最小要求仕様（TAHI プロジェクト）– 厳しいリソース制約への対応• 全体のメモリ必要量の増加: 約 18%• RAM のメモリ必要量の増加: 約 3%

– TINET リリース 1.2 で対応予定• 多様なネットワークインタフェースへの対応– Bluetooth や無線 LAN
2004/5/20

オープンソースの組込みシステム用
TCP/IP プロトコルスタック: TINET

26

謝辞

• （財）道央産業技術振興機構様– テーマ「組込み型制御システム用TCP/IPプロトコ
ルスタックの開発」• （株）NTTドコモ北海道苫小牧支店様• 経済産業省東北経済産業局様（委託先管理法人: （財）みやぎ産業振興機構様）– テーマ「組込みシステム・オープンプラットフォー
ムの構築とその実用化開発」
2004/5/20

オープンソースの組込みシステム用
TCP/IP プロトコルスタック: TINET27