source: rubycfg_asp/trunk/asp_dcre/tinet/doc/tinet.txt@ 315

Last change on this file since 315 was 315, checked in by coas-nagasima, 7 years ago

SVNプロパティを設定

  • Property svn:eol-style set to native
  • Property svn:keywords set to Id
  • Property svn:mime-type set to text/plane; charset=UTF-8
File size: 101.7 KB
Line 
1 TCP/IP プロトコルスタック(TINET)
2 ユーザズマニュアル(リリース 1.7)[2017/4/5]
3
41. TCP/IP プロトコルスタック(TINET)の概要
5
6 TINET は、TOPPERS/ASP と TOPPERS/JSP 用の IPv6/IPv4 デュアルスタック
7の TCP/IP プロトコルスタックである。
8
91. 1 機能一覧
10
11 以下に、TINET リリース 1.7 の機能一覧を示す。
12
13 (1) API
14
15 ・ITRON TCP/IP API 仕様の標準機能
16 ・暫定的な ITRON TCP/IP(バージョン 6)API 仕様の標準機能
17 ・ITRON TCP/IP API 仕様の拡張機能
18
19 (2) TCP
20
21 ・BSD の通信機能
22 ・最大セグメントサイズ(MSS)オプション
23 ・省コピー API
24 ・ノンブロッキングコール(組込み選択可)
25 ・タスクからの Time Wait 状態の TCP 通信端点分離機能(組込み
26 選択可)
27 ・送受信ウィンドバッファの省コピー機能(組込み選択可)
28 ・TCP ヘッダのトレース出力機能(組込み選択可)
29
30 (3) UDP
31
32 ・ノンブロッキングコール(組込み選択可)
33
34 (4) 近隣探索
35
36 ・近隣探索要請の送受信
37 ・近隣探索通知の送受信
38 ・ルータ通知メッセージの受信
39 ・ルータ要請メッセージの送信
40 ・アドレス重複検出機能
41
42 (5) ICMPv6
43
44 ・エコー要求・応答の送受信
45 ・エラーの送信(組込み選択可)
46 ・向け直しメッセージの受信(組込み選択可)
47 ・Path MTU
48
49 (6) ICMPv4
50
51 ・エコー要求・応答の送受信
52 ・エラーの送信(組込み選択可)
53 ・向け直しメッセージの受信(組込み選択可)
54
55 (7) IPv6
56
57 ・アドレスの自動設定
58 ・静的経路表
59 ・非 PC 系ディジタル機器への適用に向けた IPv6 最小要求仕様の
60 IPv6 最小ホスト仕様に準拠
61 ・拡張ヘッダのエラーの通知
62 ・断片ヘッダ(組込み選択可)
63 ・ホスト情報キャッシュ(組込み選択可)
64 ・IPv6/IPv4 完全デュアルスタック【リリース 1.7 新規】
65 ・IPv4 射影アドレス(組込み選択可)【リリース 1.7 新規】
66
67 (8) IPv4
68
69 ・静的経路表
70 ・IP データグラムの分割・再構成(組込み選択可)
71 ・IPSEC(組込み選択可、フックのみ実装)
72
73 (9) その他
74
75 ・ARP 要求・応答の送受信
76 ・ARP での IPv4 アドレス重複検出機能
77 ・DHCP への対応
78 ・SNMP 用管理情報ベース(MIB)の提供
79
801. 2 制限事項
81
82 以下に、TINET リリース 1.7 の制約事項を述べる。
83
84 (1) IPv6 では、ネットワークインタフェースはイーサネットのみ選択できる。
85 (2) IPv6 では、TCP と UDP の両方を選択するか、 どちらか一つを選択
86 しなければならない。 また、UDP のみを選択した場合は、ノンブロッ
87 キング機能を組み込む必要がある。
88 (3) ノンブロッキングコールにおいても、 通信端点の排他制御のため、
89 短時間であるがブロックすることがある。
90 (4) IPv6 に関する ITRON TCP/IP API 2.0 仕様には未対応である。
91 TINET リリース 1.2 からの暫定的な ITRON TCP/IP(バージョン 6)
92 API 仕様にのみ対応している。
93 (5) ITRON TCP/IP API 部分のライブラリ化は行われているが、ライブラ
94 リとアプリケーションプログラムを別々に構築しておき、 後でリン
95 クする方法はサポートしていない。
96 (6) 設定と読出し可能な TCP 通信端点オプションは無いため、TCP 通信
97 端点オプションの設定 API と読出し API の戻り値は E_PAR である。
98 (7) 設定と読出し可能な UDP 通信端点オプションは無いため、UDP 通信
99 端点オプションの設定 API と読出し API の戻り値は E_PAR である。
100
1011. 3 ディレクトリ構成
102
103 TINET のディレクトリは、 TOPPERS/ASP または TOPPERS/JSP のルートディ
104レクトリの下に置くことを想定しており、以下のディレクトリから構成されて
105いる。
106
107 tinet TINET のルートディレクトリ
108 tinet/cfg TINET コンフィギュレータ(TOPPERS/JSP 用のみ)
109 tinet/doc ドキュメント類
110 tinet/net 汎用ネットワーク
111 tinet/netapp サンプルのネットワークプログラム
112 tinet/netdev ネットワークインタフェースのドライバ
113 tinet/netinet IPv4/TCP/UDP/ICMP
114 tinet/netinet6 IPv6/ICMPv6/NDP
115
1161. 4 ドキュメント類
117
118 ドキュメント類を以下に示す。全てのファイルは PDF でも提供している。
119
120 tinet.txt ユーザズマニュアル
121 tinet_gcc.txt ユーザズマニュアル【GCC 環境】
122 tinet_cs.txt ユーザズマニュアル【CS+ 環境(参考)】
123 tinet_sample.txt サンプルアプリケーション
124 tinet_config.txt コンパイル時コンフィギュレーション
125 tinet_defs.txt プロセッサ、システム依存定義
126
127
128
129
130
131苫小牧工業高等専門学校 - 2 - 情報工学科
132
133
134
135
136TINET ユーザズマニュアル 1. 4 ドキュメント類
137
138 tinet_chg.txt 変更メモ
139 tinet_ether.pdf TINET-1.4 におけるイーサネットの実装(PDFのみ)
140
1412. TINET コンフィギュレータと TINET コンフィグレーションファイル
142
1432. 1 TOPPERS/ASP
144
145 TOPPERS/ASP では、 TOPPERS/ASP 用コンフィギュレータを流用するため、
146TINET 独自のコンフィギュレータはない。
147 TOPPERS/ASP 用コンフィギュレータを流用して、TINET コンフィギュレーショ
148ンファイル(標準は tinet_$(APPLNAME).cfg)から以下のファイルを生成する。
149
150 (1) tinet_cfg.c
151 TINET カーネル構成ファイルで、 アプリケーションプログラム、
152 TINET と共にコンパイルしてリンクする。
153
154 (2) tinet_kern.cfg
155 TINET 内部で使用するカーネルオブジェクトの静的 API が生成され、
156 TOPPERS/ASP システムコンフィギュレーションファイル(標準は
157 $(APPLNAME).cfg)にインクルードする。
158
159 (3) tinet_cfg.h
160 TINET 内部で使用するカーネルオブジェクトの ID 自動割付結果ファ
161 イルである。
162
1632. 2 TOPPERS/JSP
164
165 TINET コンフィギュレータは tinet/cfg/tinet_cfg (cygwin では
166tinet_cfg.exe) であり、ターゲットには依存していない。 TINET コンフィグ
167レータの生成については「8. TOPPERS/JSP 環境におけるインストールとファ
168イルの作成・変更 」を参照すること。
169 TOPPERS/JSP 用 TINET コンフィギュレータは TINET コンフィギュレーショ
170ンファイル(標準は tinet_$(UNAME).cfg)から以下のファイルを生成する。
171
172 (1) tinet_cfg.c
173 TINET カーネル構成ファイルで、 アプリケーションプログラム、
174 TINET と共にコンパイルしてリンクする。
175
176 (2) tinet_kern.cfg
177 TINET 内部で使用するカーネルオブジェクトの静的 API が生成され、
178 TOPPERS/JSP システムコンフィギュレーションファイル(標準は
179 $(UNAME).cfg)にインクルードする。
180
181 (3) tinet_id.h
182 TINET 内部で使用するカーネルオブジェクトの ID 自動割付結果ファ
183 イルである。
184
1853. ITRON TCP/IP API仕様
186
1873. 1 暫定的なITRON TCP/IP(バージョン6)API仕様
188
189 IPv6 に関する ITRON TCP/IP API 2.0 仕様には未対応である。 TINET リリー
190ス 1.2 からの暫定的な ITRON TCP/IP(バージョン 6)API 仕様にのみ対応し
191ている。
192
193 (1) 1.5.1 データ構造/データ型 (1) IP アドレス/ポート番号を入れ
194 るデータ構造
195
196 /* IPv6 アドレス */
197 struct t_in6_addr {
198 union {
199 uint8_t __u6_addr8[16];
200 uint16_t __u6_addr16[8];
201 uint32_t __u6_addr32[4];
202 } __u6_addr;
203 } T_IN6_ADDR;
204
205 typedef struct t_ipv6ep {
206 T_IN6_ADDR ipaddr; /* IPv6 アドレス */
207 uint16_t portno; /* ポート番号 */
208 } T_IPV6EP;
209
210 (2) 1.5.1 データ構造/データ型 (2) オブジェクト生成用のデータ構造
211
212 typedef struct t_tcp6_crep {
213 /* 標準 */
214 ATR repatr; /* 受付口属性 */
215 T_IPV6EP myaddr; /* 自分のアドレス */
216 /* 実装依存 */
217 } T_TCP6_CREP;
218
219 (3) 1.5.1 データ構造/データ型 (5) 特殊な IP アドレスとポート番号
220
221 #define IPV6_ADDR_UNSPECIFIED_INIT \
222 {{{ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, \
223 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }}}
224 #define IPV6_ADDRANY IPV6_ADDR_UNSPECIFIED_INIT
225
226 (4) 2.2 TCP 受付口の生成/削除
227 【静的 API】
228 TCP6_CRE_REP(ID repid, { ATR repatr,
229 { T_IN6_ADDR myipaddr, uint16_t myportno } } );
230
231 【API の機能】
232 myipaddr の型が T_IN6_ADDR になった以外は、 ITRON
233 TCP/IP API 仕様と同じである。myipaddr には IPV6_ADDRANY
234 を指定できる。
235
236 (5) 2.4 接続/切断「接続要求待ち(受動オープン)」
237 【C 言語 API】
238 ER ercd = tcp6_acp_cep(ID cepid, ID repid,
239 T_IPV6EP *p_dstaddr, TMO tmout);
240
241 【API の機能】
242 p_dstaddr の型が、 T_IPV6EP* になった以外は、 ITRON
243 TCP/IP API 仕様と同じである。
244
245 (6) 2.4 接続/切断「接続要求(能動オープン)」
246 【C 言語 API】
247 ER ercd = tcp6_con_cep(ID cepid, T_IPV6EP *p_myaddr,
248 T_IPV6EP *p_dstaddr, TMO tmout);
249
250 【機能】
251 p_myaddr と p_dstaddr の型が、 T_IPV6EP* になった以外
252 は、ITRON TCP/IP API 仕様と同じである。
253
254 (7) 3.2 UDP 通信端点の生成/削除
255 【静的 API】
256 UDP6_CRE_CEP(ID cepid, { ATR cepatr,
257 { T_IN6_ADDR myipaddr, uint16_t myportno },
258 FP callback } );
259
260 【機能】
261 myipaddr の型が T_IN6_ADDR になった以外は、 ITRON
262 TCP/IP API 仕様と同じである。myipaddr には IPV6_ADDRANY
263 を指定できる。
264
265 (8) 3.3 データの送受信「パケットの送信」
266 【C 言語 API】
267 ER ercd = udp6_snd_dat(ID cepid, T_IPV6EP *p_dstaddr,
268 void *data, int_t len, TMO tmout);
269
270 【機能】
271 p_dstaddr の型が、 T_IPV6EP* になった以外は、 ITRON
272 TCP/IP API 仕様と同じである。
273
274 (9) 3.4 データの送受信「パケットの受信」
275 【C 言語 API】
276 ER ercd = udp6_rcv_dat(ID cepid, T_IPV6EP *p_dstaddr,
277 void *data, int_t len, TMO tmout);
278
279 【機能】
280 p_dstaddr の型が、 T_IPV6EP* になった以外は、 ITRON
281 TCP/IP API 仕様と同じである。
282
2833. 2 サポートするオブジェクトの定義
284
285 サポートするオブジェクトの定義は、以下に示す ITRON TCP/IP API 仕様の
286静的 API、 暫定的な ITRON TCP/IP(バージョン 6)API 仕様の静的 API、
287TINET 独自の静的 API、ファイルのインクルードである。
288
289 (1) TCP 受付口(IPv4)
290 【静的 API】
291 TCP_CRE_REP(ID repid, { ATR repatr,
292 { uint32_t myipaddr, uint16_t myportno } } );
293
294 【パラメータ】
295 パラメータについては、ITRON TCP/IP API 仕様と同じであ
296 り、実装依存の TCP 受付口属性はない。
297 【TCP 受付口数の定義】
298 TCP 受付口数を定義するプリプロセッサディレクティブで
299 あり、tinet_cfg.c に出力される。
300 #define TNUM_TCP_REPID <TCP受付口数>
301
302 【TCP 受付口 ID の最大値の変数の定義】
303 TCP 受付口 ID の最大値の変数の定義であり、tinet_cfg.c
304 に出力される。
305 const ID tmax_tcp_repid =
306 (TMIN_TCP_REPID + TNUM_TCP_REPID - 1);
307
308 (2) TCP 通信端点(IPv4)
309 【静的 API】
310 TCP_CRE_CEP(ID cepid, { ATR cepatr, void *sbuf, int_t sbufsz,
311 void *rbuf, int_t rbufsz,
312 FP callback } );
313
314 【パラメータ】
315 パラメータについては、ITRON TCP/IP API 仕様と同じであ
316 り、実装依存の TCP 通信端点属性はない。
317 【TCP 通信端点数の定義】
318 TCP 通信端点数を定義するプリプロセッサディレクティブ
319 であり、tinet_cfg.c に出力される。
320 #define TNUM_TCP_CEPID <TCP通信端点数>
321
322 【TCP 通信端点 ID の最大値の変数の定義】
323 TCP 通信端点 ID の最大値の変数の定義であり、
324 tinet_cfg.c に出力される。
325 const ID tmax_tcp_cepid =
326 (TMIN_TCP_CEPID + TNUM_TCP_CEPID - 1);
327
328 (3) UDP 通信端点(IPv4)
329 【静的 API】
330 UDP_CRE_CEP(ID cepid, { ATR cepatr,
331 { uint32_t myipaddr, uint16_t myportno },
332 FP callback } );
333
334 【パラメータ】
335 パラメータについては、ITRON UDP/IP API 仕様と同じであ
336 り、実装依存の UDP 通信端点属性はない。
337 【UDP 通信端点数の定義】
338 UDP 通信端点数を定義するプリプロセッサディレクティブ
339 であり、tinet_cfg.c に出力される。
340 #define TNUM_UDP_CEPID <UDP通信端点数>
341
342 【UDP 通信端点 ID の最大値の変数の定義】
343 UDP 通信端点 ID の最大値の変数を定義であり、
344 tinet_cfg.c に出力される。
345 const ID tmax_udp_cepid =
346 (TMIN_UDP_CEPID + TNUM_UDP_CEPID - 1);
347
348 (4) TCP 受付口(IPv6)
349 【静的 API】
350 TCP6_CRE_REP(ID repid, { ATR repatr,
351 { T_IN6_ADDR myipaddr, uint16_t myportno } } );
352
353 【パラメータ】
354 パラメータについては、myipaddr で指定する IP アドレス
355 は IPv6 であり、 IPv4 の IP_ADDRANY の代わりに、IPv6 で
356 は IPV6_ADDRANY を指定できる。これ以外は、 ITRON TCP/IP
357 API 仕様と同じであり、実装依存の TCP 受付口属性はない。
358 【TCP 受付口数の定義】
359 TCP 受付口数を定義するプリプロセッサディレクティブで
360 あり、tinet_cfg.c に出力される。
361 #define TNUM_TCP_REPID <TCP受付口数>
362
363 【TCP 受付口 ID の最大値の変数の定義】
364 TCP 受付口 ID の最大値の変数を定義であり、tinet_cfg.c
365 に出力される。
366 const ID tmax_tcp_repid =
367 (TMIN_TCP_REPID + TNUM_TCP_REPID - 1);
368
369 (5) TCP 通信端点(IPv6)
370 【静的 API】
371 TCP6_CRE_CEP(ID cepid, { ATR cepatr, void *sbuf, int_t sbufsz,
372 void *rbuf, int_t rbufsz,
373 FP callback } );
374
375 【パラメータ】
376 パラメータについては、ITRON TCP/IP API 仕様と同じであ
377 り、実装依存の TCP 通信端点属性はない。
378
379 【TCP 通信端点数の定義】
380 TCP 通信端点数を定義するプリプロセッサディレクティブ
381 であり、tinet_cfg.c に出力される。
382 #define TNUM_TCP_CEPID <TCP通信端点数>
383
384 【TCP 通信端点 ID の最大値の変数の定義】
385 最大の TCP 通信端点 ID の最大値の変数を定義であり、
386 tinet_cfg.c に出力される。
387 const ID tmax_tcp_cepid =
388 (TMIN_TCP_CEPID + TNUM_TCP_CEPID - 1);
389
390 (6) UDP 通信端点(IPv6)
391 【静的 API】
392 UDP6_CRE_CEP(ID cepid, { ATR cepatr,
393 { T_IN6_ADDR myipaddr, uint16_t myportno },
394 FP callback } );
395
396 【パラメータ】
397 パラメータについては、myipaddr で指定する IP アドレス
398 は IPv6 であり、 IPv4 の IP_ADDRANY の代わりに、IPv6 で
399 は IPV6_ADDRANY を指定できる。これ以外は、 ITRON TCP/IP
400 API 仕様と同じであり、実装依存の TCP 受付口属性はない。
401 【UDP 通信端点数の定義】
402 UDP 通信端点数を定義するプリプロセッサディレクティブ
403 であり、tinet_cfg.c に出力される。
404 #define TNUM_UDP_CEPID <UDP通信端点数>
405
406 【UDP 通信端点 ID の最大値の変数の定義】
407 UDP 通信端点 ID の最大値の変数を定義であり、
408 tinet_cfg.c に出力される。
409 const ID tmax_udp_cepid =
410 (TMIN_UDP_CEPID + TNUM_UDP_CEPID - 1);
411
412 (7) TCP 受付口の予約 ID(IPv4、TINET 独自)
413 【静的 API】
414 VRID_TCP_REP(ID repid);
415
416 【パラメータ】
417 ID repid 予約するTCP受付口ID
418
419 (8) TCP 通信端点の予約 ID(IPv4、TINET 独自)
420 【静的 API】
421 VRID_TCP_CEP(ID cepid);
422
423 【パラメータ】
424 ID repid 予約するTCP通信端点ID
425
426 (9) UDP 通信端点の予約 ID(IPv4、TINET 独自)
427 【静的 API】
428 VRID_UDP_CEP(ID cepid);
429
430 【パラメータ】
431 ID repid 予約するUDP通信端点ID
432
433 (10) TCP 受付口の予約 ID(IPv6、TINET 独自)
434 【静的 API】
435 VRID_TCP6_REP(ID repid);
436
437 【パラメータ】
438 ID repid 予約するTCP受付口ID
439
440 (11) TCP 通信端点の予約 ID(IPv6、TINET 独自)
441 【静的 API】
442 VRID_TCP6_CEP(ID cepid);
443
444 【パラメータ】
445 ID repid 予約するTCP通信端点ID
446
447 (12) UDP 通信端点の予約 ID(IPv6、TINET 独自)
448 【静的 API】
449 VRID_UDP6_CEP(ID cepid);
450
451 【パラメータ】
452 ID repid 予約するUDP通信端点ID
453
4544. ITRON TCP/IP API 拡張機能
455
456 TINET リリース 1.3 までは、ITRON TCP/IP API の標準機能のみに対応して
457いたが、 リリース 1.4 からは、拡張機能にも対応した。ただし、応用プログ
458ラムから使用する場合は、以下に示すコンパイル時コンフィギュレーションパ
459ラメータを指定しなければならない。
460
461 (1) TCP_CFG_EXTENTIONS
462 ITRON TCP/IP API の TCP の拡張機能を有効にする。
463
464 (2) UDP_CFG_EXTENTIONS
465 ITRON TCP/IP API の UDP の拡張機能を有効にする。
466
4674. 1 TCP の ITRON TCP/IP API 拡張機能
468
469 TCP_CFG_EXTENTIONS を指定することにより使用可能となる API を以下に示
470す。
471
472 ・TCP 受付口の予約 ID【静的 API、VRID_TCP_REP】(IPv4、TINET 独自)
473 ・TCP 受付口の予約 ID【静的 API、VRID_TCP6_REP】(IPv6、TINET 独自)
474 ・TCP 通信端点の予約 ID【静的 API、VRID_TCP_CEP】(IPv4、TINET 独自)
475 ・TCP 通信端点の予約 ID【静的 API、 VRID_TCP6_CEP】(IPv6、TINET 独自)
476 ・TCP 受付口の生成【動的 API、tcp_cre_rep】(IPv4)
477 ・TCP 受付口の生成【動的 API、tcp6_cre_rep】(IPv6、TINET 独自)
478 ・TCP 受付口の削除【動的 API、tcp_del_rep】
479 ・TCP 通信端点の生成【動的 API、tcp_cre_cep】
480 ・TCP 通信端点の削除【動的 API、tcp_del_cep】
481 ・緊急データの送信【tcp_snd_oob】
482 ・緊急データの受信【tcp_rcv_oob】
483 ・TCP 通信端点オプションの設定【tcp_set_opt】
484 ・TCP 通信端点オプションの読出し【tcp_get_opt】
485 ・緊急データ受信【コールバック、TEV_TCP_RCV_OOB】
486
487 (1) TCP 受付口の生成と削除
488 この機能により、1 個の TCP 受付口を複数のタスクで共有するこ
489 とができる。ただし、1 回に使用できるのは 1 個のタスクに限定さ
490 れる。 以下に標準的な使用方法を述べる。 なお、 煩雑になるため
491 IPv6 に関しての説明は、一部省略している。
492
493 [1] TCP 受付口の予約 ID【静的 API、 VRID_TCP_REP、
494 VRID_TCP6_REP】により、TCP 受付口 ID を予約する。
495
496 VRID_TCP_REP の書式を以下に示す。
497
498 VRID_TCP_REP(ID repid);
499
500 パラメータ repid は予約する TCP 受付口 ID であり、 一般
501 的には、 TINET コンフィグレーションファイルに以下のよう
502 に指定する。
503
504 VRID_TCP_REP (TCP_RSV_REPID1);
505
506 これにより、 TCP 受付口用のメモリ領域が確保され、 TINET
507 内部で使用するカーネルオブジェクトの ID 自動割付結果ファ
508 イル(TOPPERS/ASP は tinet_cfg.h、 TOPPERS/JSP は
509 tinet_id.h)に、 対応するマクロ定義が以下のように出力される。
510
511 #define TCP_RSV_REPID1 1
512
513 [2] TCP 受付口の生成【動的 API、tcp_cre_rep、tcp6_cre_rep】
514 により、TCP 受付口を生成する。
515
516 まず、TCP 受付口生成情報構造体に情報を設定する。IPv4 の
517 場合の例を以下に示す。
518
519 T_TCP_CREP crep;
520 crep.repatr = 0;
521 crep.myaddr.portno = 7;
522 crep.myaddr.ipaddr = IPV4_ADDRANY;
523
524 また IPv6 の場合の例を以下に示す。
525
526 T_TCP6_CREP crep;
527 crep.repatr = 0;
528 crep.myaddr.portno = 7;
529 memcpy(&crep.myaddr.ipaddr, &ipv6_addrany, sizeof(T_IN6_ADDR));
530
531 いずれも、 受付ける自分の IP アドレスは規定値(全て)である。
532 次に、tcp_cre_rep の書式を示す。
533
534 ER ercd = tcp_cre_rep(ID repid, T_TCP_CREP *pk_crep);
535
536 パラメータ repid には [1] で予約した TCP 受付口 ID を指
537 定し、pk_crep には上記で設定済みの TCP 受付口生成情報へ
538 のポインタを指定する。一般的な例を以下に示す。
539
540 ercd = tcp_cre_rep(TCP_RSV_REPID1, &crep);
541
542 これにより、 VRID_TCP_REP で確保された TCP 受付口用のメ
543 モリ領域に TCP 受付口生成情報が書込まれる。
544
545 [3] 接続要求待ち(受動オープン)【tcp_acp_cep、tcp6_acp_cep】
546 により、接続要求待ち(受動オープン)する。
547
548 tcp_acp_cep の書式を示す。
549
550 ER ercd = tcp_acp_cep(ID cepid, ID repid,
551 T_IPV4EP *p_dstaddr, TMO tmout);
552
553 パラメータ repid に [1] で予約した TCP 受付口 ID を指定
554 する以外は、 通常の呼び出しと同じである。
555
556 [4] TCP 受付口の削除【動的 API、tcp_del_rep】により、TCP 受
557 付口を削除する。
558
559 通常は、 接続要求待ち(受動オープン)が終了した後に、
560 TCP 受付口を削除するが、 接続要求待ち(受動オープン)中
561 に、tcp_del_cep により、 TCP 通信端点を削除することも可
562 能である。 この場合、tcp_acp_cep の戻り値には、E_DLT が
563 返される。TCP 受付口を削除すると、 他のタスクが同じ TCP
564 受付口 ID を利用できる。tcp_del_rep の書式を示す。
565
566 ER ercd = tcp_del_rep(ID cepid);
567
568 パラメータ repid には [1] で予約した TCP 受付口 ID を指
569 定する。
570
571 (2) TCP 通信端点の生成と削除
572 この機能により、1 個の TCP 通信端点を複数のタスクで共有する
573 ことができる。ただし、1 回に使用できるのは 1 個のタスクに限定
574 される。 以下に標準的な使用方法を述べる。なお、煩雑になるため
575 IPv6 に関しての説明は、一部省略している。
576
577 [1] TCP 通信端点の予約 ID【静的 API、 VRID_TCP_CEP、
578 VRID_TCP6_CEP】により、TCP 通信端点 ID を予約する。
579
580 VRID_TCP_CEP の書式を以下に示す。
581
582 VRID_TCP_CEP(ID cepid);
583
584 パラメータ cepid は予約する TCP 通信端点 ID であり、 一
585 般的には、 TINET コンフィグレーションファイルに以下のよ
586 うに指定する。
587
588 VRID_TCP_CEP (TCP_RSV_CEPID1);
589
590 これにより、TCP 通信端点用のメモリ領域が確保され、TINET
591 内部で使用するカーネルオブジェクトの ID 自動割付結果ファ
592 イル(TOPPERS/ASP は tinet_cfg.h、 TOPPERS/JSP は
593 tinet_id.h)に、 対応するマクロ定義が以下のように出力される。
594
595 #define TCP_RSV_CEPID1 1
596
597 [2] TCP 通信端点の生成【動的 API、 tcp_cre_cep】により、TCP
598 通信端点を生成する。
599
600 まず、TCP 通信端点生成情報構造体に情報を設定する。 一般
601 的な例を以下に示す。
602
603 T_TCP_CCEP ccep;
604 ccep.cepatr = 0;
605 ccep.sbufsz = TCP_ECHO_SRV_SWBUF_SIZE;
606 ccep.rbufsz = TCP_ECHO_SRV_RWBUF_SIZE;
607 ccep.sbuf = tcp_echo_srv_swbuf;
608 ccep.rbuf = tcp_echo_srv_rwbuf;
609 ccep.callback = (FP)callback_nblk_tcp_echo_srv;
610
611 次に、tcp_cre_cep の書式を示す。
612
613 ER ercd = tcp_cre_cep(ID cepid, T_TCP_CCEP *pk_ccep);
614
615 パラメータ cepid には [1] で予約した TCP 通信端点 ID を
616 指定し、pk_ccep には上記で設定済みの TCP 通信端点生成情
617 報へのポインタを指定する。 一般的な例を以下に示す。
618
619 ercd = tcp_cre_cep(TCP_RSV_CEPID1, &ccep);
620
621 これにより、 VRID_TCP_CEP で確保された TCP 通信端点用の
622 メモリ領域に TCP 通信端点生成情報が書込まれる。
623 この後、TCP の各 API のパラメータ cepid に [1] で予約
624 した TCP 通信端点 ID を指定する以外は、 通常の TCP 通信
625 端点と同じように使用できる。
626
627 [3] TCP 通信端点の削除【動的 API、tcp_del_cep】により、 TCP
628 通信端点を削除する。
629
630 tcp_cls_cep を呼び出すまでは、 TCP 通信端点を削除でき
631 ないが、tcp_cls_cep の後は TCP 通信端点を削除でき、他の
632 タスクが同じ TCP 通信端点 ID を利用できる。 tcp_del_cep
633 の書式を示す。
634
635 ER ercd = tcp_del_cep(ID cepid);
636
637 パラメータ cepid には [1] で予約した TCP 通信端点 ID を
638 指定する。
639
640 (3) 緊急データの送受信
641
642 [1] 緊急データの送信【tcp_snd_oob】
643
644 tcp_snd_oob の書式を以下に示す。
645
646 ER_UINT ercd = tcp_snd_oob(ID cepid, void *data, int_t len, TMO tmout);
647
648 なお、 以下に示すような制約がある。
649
650 ・緊急データだからといって、 すでに送信ウィンドバッファ
651 にある通常のデータより先に送信されるわけではない。
652 ・tcp_snd_oob で、複数バイトのデータを送信しても(len >
653 1)、受信側で受信できるのは、送信した data の最後の 1
654 バイトのみである。また、 これより前のデータは通常のデー
655 タとして受信される。
656
657 [2] 緊急データの受信【tcp_rcv_oob】
658
659 tcp_rcv_oob の書式を以下に示す。
660
661 ER_UINT ercd = tcp_rcv_oob(ID cepid, void *data, int_t len);
662
663 なお、 以下に示すような制約がある。
664
665 ・緊急データ受信のコールバック関数内で呼び出すことを想
666 定している。
667 ・受信できるのは、緊急データの最後の 1 バイトのみである。
668 従って、正常に tcp_rcv_oob から戻ってきた時の戻り値は、
669 常に 1 である。
670
671 [3] 緊急データ受信【コールバック、TEV_TCP_RCV_OOB】
672 緊急データを受信した時、 TCP 通信端点に指定されている
673 コールバック関数を呼び出す。 この時の事象の種類が
674 TEV_TCP_RCV_OOB である。ただし、 TCP 通信端点にコールバッ
675 ク関数が指定されていない場合、 または、コールバック関数
676 内で tcp_rcv_oob が呼び出されなければ、受信した緊急デー
677 タは通常のデータとして受信する。
678
679 [4] コンパイル時コンフィギュレーションパラメータ
680
681 TCP_CFG_URG_OFFSET
682
683 緊急データの最後のバイトのオフセット、 値が -1 の場合は
684 BSD の実装と同じで、 緊急ポインタは、緊急データの最後の
685 バイトの次のバイトを差す。 値が 0 の場合は RFC1122 の規
686 定と同じで、 緊急ポインタは、緊急データの最後のバイトを
687 差す。既定値は -1 である。
688
689 (4) TCP 通信端点オプションの設定と読出し
690 設定可能な TCP 通信端点オプションは無いため、どちらの関数も
691 戻り値として E_PAR が返される。
692
6934. 2 UDP の ITRON TCP/IP API 拡張機能
694
695 UDP_CFG_EXTENTIONS を指定することにより使用可能となる API を以下に示
696す。
697
698 ・UDP 通信端点の予約 ID【静的 API、VRID_UDP_CEP】(IPv4、TINET 独自)
699 ・UDP 通信端点の予約 ID【静的 API、VRID_UDP6_CEP】(IPv6、TINET 独自)
700 ・UDP 通信端点の生成【動的 API、udp_cre_cep】(IPv4)
701 ・UDP 通信端点の生成【動的 API、udp6_cre_cep】(IPv6、TINET 独自)
702 ・UDP 通信端点の削除【動的 API、udp_del_cep】
703 ・UDP 通信端点オプションの設定【udp_set_opt】
704 ・UDP 通信端点オプションの読出し【udp_get_opt】
705
706 (1) UDP 通信端点の生成と削除
707 この機能により、1 個の UDP 通信端点を複数のタスクで共有する
708 ことができる。ただし、1 回に使用できるのは 1 個のタスクに限定
709 される。 以下に標準的な使用方法を述べる。なお、煩雑になるため
710 IPv6 に関しての説明は、一部省略している。
711
712 [1] UDP 通信端点の予約 ID【静的 API、 VRID_UDP_CEP、
713 VRID_UDP6_CEP】により、UDP 通信端点 ID を予約する。
714
715 VRID_UDP_CEP の書式を以下に示す。
716
717 VRID_UDP_CEP(ID cepid);
718
719 パラメータ cepid は予約する UDP 通信端点 ID であり、 一
720 般的には、 TINET コンフィグレーションファイルに以下のよ
721 うに指定する。
722
723 VRID_UDP_CEP (UDP_RSV_CEPID1);
724
725 これにより、UDP 通信端点用のメモリ領域が確保され、TINET
726 内部で使用するカーネルオブジェクトの ID 自動割付結果ファ
727 イル(TOPPERS/ASP は tinet_cfg.h、 TOPPERS/JSP は
728 tinet_id.h)に、 対応するマクロ定義が以下のように出力される。
729
730 #define UDP_RSV_CEPID1 1
731
732 [2] UDP 通信端点の生成【動的 API、 udp_cre_cep】により、UDP
733 通信端点を生成する。
734
735 まず、UDP 通信端点生成情報構造体に情報を設定する。 通信
736 相手からのデータの受信を待つ応用アプリケーションで、
737 IPv4 の場合の例を以下に示す。
738
739 T_UDP_CCEP ccep;
740 ccep.cepatr = 0;
741 ccep.myaddr.portno = 7;
742 ccep.myaddr.ipaddr = IPV4_ADDRANY;
743
744 また IPv6 の場合の例を以下に示す。
745
746 T_UDP_CCEP ccep;
747 ccep.cepatr = 0;
748 ccep.myaddr.portno = 7;
749 memcpy(&ccep.myaddr.ipaddr, &ipv6_addrany, sizeof(T_IN6_ADDR));
750
751 いずれも、 受付ける自分の IP アドレスは規定値(全て)である。
752 次に、udp_cre_cep の書式を示す。
753
754 ER ercd = udp_cre_cep(ID cepid, T_UDP_CCEP *pk_ccep);
755
756 パラメータ cepid には [1] で予約した UDP 通信端点 ID を
757 指定し、pk_ccep には上記で設定済みの UDP 通信端点生成情
758 報へのポインタを指定する。 一般的な例を以下に示す。
759
760 ercd = udp_cre_cep(UDP_RSV_CEPID1, &ccep);
761
762 これにより、 VRID_UDP_CEP で確保された UDP 通信端点用の
763 メモリ領域に UDP 通信端点生成情報が書込まれる。
764 この後、UDP の各 API のパラメータ cepid に [1] で予約
765 した UDP 通信端点 ID を指定する以外は、 通常の UDP 通信
766 端点と同じように使用できる。
767
768 [3] UDP 通信端点の削除【動的 API、 udp_del_cep】により、UDP
769 通信端点を削除する。
770
771 UDP 通信端点はいつでも削除でき、 他のタスクが同じ UDP
772 通信端点 ID を利用できる。 なお、udp_snd_dat で送信待ち
773 の時、または、udp_rcv_dat で受信待ちの時に、udp_del_cep
774 により、UDP 通信端点を削除すると、 それぞれの関数の戻り
775 値には、E_DLT が返される。
776 次に、udp_del_cep の書式を示す。
777
778 ER ercd = udp_del_cep(ID cepid);
779
780 パラメータ cepid には [1] で予約した UDP 通信端点 ID を
781 指定する。
782
783 (2) UDP 通信端点オプションの設定と読出し
784 設定可能な TCP 通信端点オプションは無いため、どちらの関数も
785 戻り値として E_PAR が返される。
786
7875. ルーティングの設定
788
789 ルーティングエントリには、静的ルーティングエントリと向け直し(ICMP)
790によるルーティングエントリがある。
791 静的ルーティングエントリは、予め決められたルーティング情報であり、ルー
792ティング設定ファイル route_cfg.c のルーティング表エントリ配列に設定す
793る。なお、ディフォルトゲートウェイのみのシンプルなネットワークでは、サ
794ンプルアプリケーション echos の route_cfg.c をそのまま流用できる。
795 向け直し(ICMP)によるルーティングエントリは、TINET コンフィギュレー
796ション・パラメータ定義ファイルで、ルーティング表で予め確保するエントリ
797数を定義し、 ルーティング設定ファイル route_cfg.c のルーティング表エン
798トリ配列に、 空のエントリとして確保する。
799
800 (1) ルーティング表のエントリ数の設定
801 エントリ数の設定するマクロは、 TINET コンフィギュレーション・
802 パラメータ定義ファイルで定義する。
803
804 [1] NUM_IN6_STATIC_ROUTE_ENTRY
805 IPv6 用のルーティング表の静的ルーティングエントリ数を指
806 定する。
807 [2] NUM_IN6_REDIRECT_ROUTE_ENTRY
808 IPv6 用のルーティング表で予め確保する、向け直し(ICMP)
809 によるルーティングエントリ数を指定する。 0 を指定すると、
810 向け直し(ICMPv6)を無視する。
811 [3] NUM_IN4_STATIC_ROUTE_ENTRY
812 IPv4 用のルーティング表の静的ルーティングエントリ数を指
813 定する。
814 [4] NUM_IN4_REDIRECT_ROUTE_ENTRY
815 IPv4 用のルーティング表で予め確保する、向け直し(ICMP)
816 によるルーティングエントリ数を指定する。 0 を指定すると、
817 向け直し(ICMP)を無視する。
818
819 (2) ルーティング表エントリ構造体(IPv6)
820 IPv6 では、#include <netinet6/in6_var.h> で定義されている。
821 各フィールドの意味を以下に示す。
822
823 T_IN6_ADDR target 目標ネットワークアドレス
824 T_IN6_ADDR gateway ゲートウェイの IP アドレス
825 uint32_t expire 有効時間が切れる時刻、0xffffffff を指定すること。
826 uint8_t flags フラグ、0x01 を指定すること。
827 uint8_t prefix_len プレフィックス長
828
829 IP アドレスは、{{{ と }}} で囲み、 1 オクテット単位で指定する。
830 例を以下に示す。
831
832 { { { 0xfe, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x41,
833 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } } }
834
835 (3) ルーティング表エントリ構造体(IPv4)
836 IPv4 では、#include <netinet/in_var.h> で定義されている。各
837 フィールドの意味を以下に示す。
838
839 T_IN4_ADDR targe 目標ネットワークのIPアドレス、
840 ディフォルトゲートウェイでは0を指定する。
841 T_IN4_ADDR mask 目標ネットワークのサブネットマスク、
842 ディフォルトゲートウェイでは0を指定する。
843 T_IN4_ADDR gateway ゲートウェイの IP アドレス、
844 自ネットワーク内では0を指定する。
845
846 (4) インクルードファイル
847 以下のインクルードファイルを指定すること。
848
849 [1] TOPPERS/ASP
850
851 #include <kernel.h>
852 #include <tinet_defs.h>
853 #include <tinet_config.h>
854 #include <netinet/in.h>
855 #include <netinet/in_var.h>
856
857 [2] TOPPERS/JSP
858
859 #include <s_services.h>
860 #include <t_services.h>
861 #include <tinet_defs.h>
862 #include <tinet_config.h>
863 #include <netinet/in.h>
864 #include <netinet/in_var.h>
865
866 (5) ルーティング表エントリ配列(IPv6)
867 以下のように指定すること。
868
869 T_IN6_RTENTRY routing6_tbl[NUM_ROUTE_ENTRY] = {
870 <ルーティング表エントリ構造体 1>,
871 <ルーティング表エントリ構造体 2>,
872 ...
873 <ルーティング表エントリ構造体 n>,
874 };
875
876 (6) ルーティング表エントリ配列(IPv4)
877 以下のように指定すること。
878
879 T_IN4_RTENTRY routing4_tbl[NUM_ROUTE_ENTRY] = {
880 <ルーティング表エントリ構造体 1>,
881 <ルーティング表エントリ構造体 2>,
882 ...
883 <ルーティング表エントリ構造体 n>,
884 };
885
886 (7) 探索順序
887 探索は、インデックスが大きな順、つまり、 ルーティング表エン
888 トリ配列の最後の <ルーティング表エントリ構造体 n> から、 最初
889 の <ルーティング表エントリ構造体 1> に向って行われる。
890
8916. TINET 独自機能
892
8936. 1 タスクからの Time Wait 状態の TCP 通信端点分離機能
894
895 TCP 通信端点は、ソケットインタフェースにおけるファイルディスクリプタ
896と異なり、 TCP の接続状態が完全に終了するまで再利用可能とはならない。
897TCP/IP プロトコルの仕様に従うと、 接続状態が完全に終了するまで数分かか
898る場合がある。問題になるのは、先に、TCP 通信端点のコネクション切断 API
899の tcp_sht_cep を呼出し、 コネクションを切断する場合である。 この時、
900tcp_sht_cep で指定された TCP 通信端点は、最終的に Time Wait 状態になり、
901TCP 通信端点のクローズ API の tcp_cls_cep を呼出したタスクも、タイムア
902ウト待ち状態になる。従って、サーバ側から切断する応用プログラム(WWW な
903ど)のタスクでは、タイムアウトするまで、次の接続要求を受信することがで
904きない。
905 これに対応するため、 TINET は、終了待ちの TCP 通信端点をタスクから切
906り離すことにより、タスクが待ち状態にならないようにする機能を持っており、
907有効にするためには、 コンパイル時コンフィギュレーションパラメータ
908NUM_TCP_TW_CEP_ENTRY を tinet_app_config.h 等に指定し、 確保する TW 用
909TCP 通信端点の数(1 以上の値)を定義する。
910 TCP 通信端点が Time Wait になると、TCP 通信端点から、 Time Wait に必
911要な通信管理データを TW 用 TCP 通信端点にコピーし、元の TCP 通信端点を
912開放する。 これに伴って、 タスクも待ち状態から開放される。 また、TW 用
913TCP 通信端点には Time Wait に必要な通信管理データのみをコピーすること
914で、メモリの消費を抑えている。
915 ただし、この機能を有効にしていても、コネクションの同時切断のタイミン
916グによっては、分離されない場合がある。
917
9186. 2 受信ウィンドバッファの省コピー機能
919
920 ITRON TCP/IP API 仕様では、TCP 通信端点を生成する静的 API で、受信ウ
921インドバッファの先頭アドレスの指定に、 NADR を指定すると、プロトコルス
922タックで、 受信ウインドバッファを確保することになっている。
923 TINET では、ネットワークバッファを、受信ウインドバッファとすることで、
924NADR の指定に対応している。 さらに、ネットワークインタフェースで受信し
925たプロトルコデータを保持するネットワークバッファを、そのまま受信ウイン
926ドバッファとすることで、ネットワークインタフェースと、TINET 内部で、デー
927タのコピーを省いている。特に、 省コピー API を使用することにより、 API
928におけるデータのコピーも行わないことも可能である。
929 この機能に関係するコンパイル時コンフィギュレーションパラメータを、以
930下に示す。
931
932 (1) TCP_CFG_RWBUF_CSAVE_ONLY
933 TCP 通信端点の受信ウィンドバッファの省コピー機能を組込み、 こ
934 の機能のみ使用する。TCP 通信端点を生成する静的 API で、受信ウ
935 インドバッファの先頭アドレスの指定に、 応用プログラムが用意し
936 たバッファを指定しても無視する。
937
938 (2) TCP_CFG_RWBUF_CSAVE
939 TCP 通信端点の受信ウィンドバッファの省コピー機能を組込む。TCP
940 通信端点を生成する静的 API で、受信ウインドバッファの先頭アド
941 レスの指定に、NADR を指定した場合は、受信ウィンドバッファの省
942 コピー機能を使用するが、 応用プログラムが用意したバッファを指
943 定した場合は、 受信ウィンドバッファの省コピー機能を使用しない。
944
945 (3) TCP_CFG_RWBUF_CSAVE_MAX_QUEUES
946 TCP 通信端点の受信ウィンドバッファの省コピー機能の、 受信ウィ
947 ンドバッファキューの最大エントリ数である。 ただし、正常に受信
948 したセグメントも破棄するため、再送回数が増加する。また、 指定
949 しないと制限しない。
950
951なお、TCP_CFG_RWBUF_CSAVE_ONLY と TCP_CFG_RWBUF_CSAVE の、いずれも指定
952しない場合は、 TCP 通信端点を生成する静的 API で、受信ウインドバッファ
953の先頭アドレスの指定に、NADR を指定することができない。
954
9556. 3 送信ウィンドバッファの省コピー機能
956
957 ITRON TCP/IP API 仕様では、TCP 通信端点を生成する静的 API で、受信ウ
958インドバッファと同様に、 送信ウインドバッファの先頭アドレスの指定に、
959NADR を指定すると、 プロトコルスタックで、送信ウインドバッファを確保す
960ることになっている。
961 TINET では、ネットワークバッファを、送信ウインドバッファとすることで、
962NADR の指定に対応している。さらに、 書込まれたデータの前に必要なヘッダ
963を付加して、そのままネットワークインタフェースに渡すことにより、ネット
964ワークインタフェースと、TINET 内部で、データのコピーを省いている。特に、
965省コピー API を使用することで、 API におけるデータのコピーも行わないこ
966とも可能である。
967 ただし、 イーサネット出力時に、 NIC でネットワークバッファを開放する
968(コンパイル時コンフィギュレーションパラメータ
969ETHER_NIC_CFG_RELEASE_NET_BUF を、指定する必要がある)ディバイスドライ
970バでは、 この送信ウィンドバッファの省コピー機能を利用することはできない。
971 この機能に関係するコンパイル時コンフィギュレーションパラメータを、以
972下に示す。
973
974 (1) TCP_CFG_SWBUF_CSAVE_ONLY
975 TCP 通信端点の送信ウィンドバッファの省コピー機能を組込み、 こ
976 の機能のみ使用する。TCP 通信端点を生成する静的 API で、送信ウ
977 インドバッファの先頭アドレスの指定に、 応用プログラムが用意し
978 たバッファを指定しても無視する。
979
980 (2) TCP_CFG_SWBUF_CSAVE
981 TCP 通信端点の送信ウィンドバッファの省コピー機能を組込む。TCP
982 通信端点を生成する静的 API で、送信ウインドバッファの先頭アド
983 レスの指定に、NADR を指定した場合は、送信ウィンドバッファの省
984 コピー機能を使用するが、 応用プログラムが用意したバッファを指
985 定した場合は、 送信ウィンドバッファの省コピー機能を使用しない。
986
987 (3) TCP_CFG_SWBUF_CSAVE_MAX_SIZE
988 TCP 通信端点の送信ウィンドバッファの省コピー機能で、 送信ウィ
989 ンドバッファに使用するネットワークバッファの最大サイズであり、
990 標準値は IF_PDU_SIZE である。
991
992 (4) TCP_CFG_SWBUF_CSAVE_MIN_SIZE
993 TCP 通信端点の送信ウィンドバッファの省コピー機能で、 送信ウィ
994 ンドバッファに使用するネットワークバッファの最小サイズであり、
995 標準値は 0 である。
996
997なお、TCP_CFG_SWBUF_CSAVE_ONLY と TCP_CFG_SWBUF_CSAVE の、いずれも指定
998しない場合は、TCP 通信端点を生成する静的 API で、 送信ウインドバッファ
999の先頭アドレスの指定に、NADR を指定することができない。
1000
10016. 4 ノンブロッキングコールの無効化
1002
1003 応用プロクラムで、 ノンブロッキングコールを使用しない場合は、 TCP と
1004UDP のノンブロッキングコール機能を組込まないで、メモリを節約することが
1005できる。
1006 この機能に関係するコンパイル時コンフィギュレーションパラメータを、以
1007下に示す。
1008
1009 (1) TCP_CFG_NON_BLOCKING
1010 TCP のノンブロッキングコール機能を組込む。
1011
1012 (2) UDP_CFG_NON_BLOCKING
1013 UDP のノンブロッキングコール機能を組込む。
1014
1015ただし、 過去のリリースとの互換性のため、 どちらのパラメータも、
1016tinet/tinet_config.h に指定されており、 既定では、ノンブロッキングコー
1017ル機能が組込まれるようになっている。 なお、 サンプルアプリケーションの
1018tinet_app_config.h には、 指定を解除するマクロが定義されている。組込ま
1019ない場合は、以下のマクロを Makefile に定義する。
1020
1021 UNDEF_TCP_CFG_NON_BLOCKING
1022 UNDEF_UDP_CFG_NON_BLOCKING
1023
10246. 5 TINETのライブラリ化
1025
1026 TINET のライブラリ化は、メモリ使用量を削減することを目的に実装してい
1027る。このため、ライブラリ化されているのは ITRON TCP/IP API 部分のみであ
1028り、TINET のコア部分のライブラリ化は行われていない。また、コンパイル時
1029オプションにより、処理内容が変わるため、ライブラリも再構築する必要があ
1030る。従って、ライブラリとアプリケーションプログラムを別々に構築しておき、
1031後でリンクする方法はサポートしていない。
1032 ITRON TCP/IP API 部分もライブラリ化させないためには、 アプリケーショ
1033ンの Makefile に NO_USE_TINET_LIBRARY = true を指定する。
1034
10356. 6 TCP ヘッダのトレース出力機能
1036
1037 送受信する TCP セグメントの TCP ヘッダと TCP 通信端点の情報を出力す
1038る機能である。なお、 CONSOLE_PORTID で指定されるシリアルポートに直接出
1039力するので、 SYSLOG 出力が乱れることがある。受信時の出力例と意味を以下
1040に示す。
1041
1042 <I 329.599=c: 4 s:CW f:60c00:--A---- a: 74461 s: 76082 w:58400 l: 0=
1043
1044 329.599 受信した時間、1/1000 秒単位、または 1 秒単位
1045 c: 4 TCP 通信端点 ID
1046 s:CW TCP FSM 状態(tinet/netinet/tcp_fsm.h 参照)
1047 f:60c00 TCP 通信端点の状態フラグ(16 進数、
1048 tinet/netinet/tcp_var.h 参照)
1049 :--A---- TCP ヘッダのフラグフィールドの値(tinet/netinet/tcp.h
1050 参照)
1051 a: 74461 TCP ヘッダの確認応答番号(コネクション確立時からの相
1052 対値)
1053 s: 76082 TCP ヘッダのシーケンス番号(コネクション確立時からの
1054 相対値)
1055 w:58400 TCP ヘッダのウインドサイズ
1056 l:0 受信ペイロードデータ数
1057
1058 送信時の出力例と意味を以下に示す。
1059
1060 =O 329.627=c: 4 s:CW f:60d20:--AP--- s: 74461 a: 76082 w: 2920 l:1460>
1061
1062 329.627 送信した時間、1/1000 秒単位、または 1 秒単位
1063 c: 4 TCP 通信端点 ID
1064 s:CW TCP FSM 状態(tinet/netinet/tcp_fsm.h 参照)
1065 f:60d20 TCP 通信端点の状態フラグ(16 進数、
1066 tinet/netinet/tcp_var.h 参照)
1067 :--AP--- TCP ヘッダのフラグフィールドの値(tinet/netinet/tcp.h
1068 参照)
1069 s: 74461 TCP ヘッダのシーケンス番号(コネクション確立時からの
1070 相対値)
1071 a: 76082 TCP ヘッダの確認応答番号(コネクション確立時からの相
1072 対値)
1073 w: 2920 TCP ヘッダのウインドサイズ
1074 l:1460 送信ペイロードデータ数
1075
1076 この機能に関係するコンパイル時コンフィギュレーションパラメータを、以
1077下に示す。
1078
1079 (1) TCP_CFG_TRACE
1080 TCP ヘッダのトレース出力機能を組込む。
1081
1082 (2) TCP_CFG_TRACE_IPV4_RADDR
1083 トレース出力対象のリモートホストの IPv4 アドレスを指定する。
1084 IPV4_ADDRANY を指定すると、全てのホストを対象とする。
1085
1086 (3) TCP_CFG_TRACE_LPORTNO
1087 トレース出力対象のローカルホストのポート番号を指定する。
1088 TCP_PORTANY を指定すると、全てのポート番号を対象にする。
1089
1090 (4) TCP_CFG_TRACE_RPORTNO
1091 トレース出力対象のリモートホストのポート番号を指定する。
1092 TCP_PORTANY を指定すると、全てのポート番号を対象にする。
1093
10946. 7 IPv6におけるアドレス管理とPath MTUへの対応
1095
1096 TINET リリース 1.3 まで、IPv6 におけるアドレス管理は限定的な対応のみ
1097であり、 Path MTU にも対応していなかったが、ホスト情報のキャッシュを実
1098装することにより、TINET リリース 1.4 からは、ほぼ完全に対応した。
1099 この機能に関係するコンパイル時コンフィギュレーションパラメータを、以
1100下に示す。
1101
1102 (1) NUM_IN6_IFADDR_ENTRY
1103 インタフェースのアドレスリスト(IPv6)のエントリ数である。
1104
1105 (2) NUM_ND6_DEF_RTR_ENTRY
1106 ディフォルトルータリストのエントリ数で、最大値は 16 である。0
1107 を指定するとルータ通知を受信しない。ただし、現在は、 ルータ通
1108 知の受信以外にサイトローカルアドレス等を設定する方法がない。
1109
1110 (3) NUM_ND6_PREFIX_ENTRY
1111 プレフィックスリストのエントリ数で、最大値は 16 である。
1112
1113 (4) NUM_IN6_HOSTCACHE_ENTRY
1114 IPv6 用ホスト情報キャッシュのエントリ数で、 0 を指定すると
1115 IPv6 用ホスト情報キャッシュを組込まない。また、この場合、Path
1116 MTU への対応も限定的になる。
1117
11186. 8 IPv6/IPv4完全デュアルスタック
1119
1120 TINET リリース 1.5 まで、 組込み可能なネットワーク層は IPv6 か IPv4
1121のいずれかであったが、 TINET リリース 1.7 からは両方を組込むことがが可
1122能になった。
1123 ネットワーク層として IPv6 を選択した場合は、 IPv6 の API における
1124IPv6 アドレスとして IPv4 射影アドレスを使用することが可能である。
1125 この機能を有効にするコンパイル時コンフィギュレーションパラメータを、
1126以下に示す。
1127 API_CFG_IP4MAPPED_ADDR
1128このコンパイル時コンフィギュレーションパラメータをしない時は、以下の示
1129す API の引数として IPv4 射影アドレスを指定すると、 戻り値として E_PAR
1130が返される。
1131
1132 [1] tcp_cre_rep
1133 [2] tcp_acp_cep
1134 [3] tcp_con_cep
1135 [4] udp_cre_cep
1136 [5] udp_snd_dat
1137
11387. TINET 独自 API
1139
11407. 1 ネットワーク統計情報
1141
1142 送受信オクテット数、 送受信パケット数等の統計情報のカウンタ
1143(net_count)が、単純変数、構造体、配列により組込まれている。
1144
1145 (1) ネットワーク統計情報の有効化
1146 コンパイル時コンフィギュレーション・ファイルのいずれかで、
1147 プロトコル毎にネットワーク統計情報を有効にする事が必要である。
1148 有効にするためには、マクロ NET_COUNT_ENABLE に、 プロトコル識
1149 別フラグ(インクルードファイル net/net.h で定義されている)を
1150 ビット論理和により設定する。
1151
1152 (2) ネットワーク統計情報の標準データ型と標準構造体
1153 いずれもインクルードファイル net/net_count.h に定義されている。
1154
1155 typedef UD T_NET_COUNT_VAL;
1156
1157 typedef struct t_net_count {
1158 T_NET_COUNT_VAL in_octets; /* 受信オクテット数 */
1159 T_NET_COUNT_VAL out_octets; /* 送信オクテット数 */
1160 T_NET_COUNT_VAL in_packets; /* 受信バケット数 */
1161 T_NET_COUNT_VAL out_packets; /* 送信バケット数 */
1162 T_NET_COUNT_VAL in_err_packets; /* 受信エラーバケット数 */
1163 T_NET_COUNT_VAL out_err_packets; /* 送信エラーバケット数 */
1164 } T_NET_COUNT;
1165
1166 (3) プロトコル毎のネットワーク統計情報
1167 以下に、 プロトコル毎のネットワーク統計情報の変数または配列
1168 を示す。()内はインクルードファイル net/net.h に定義されてい
1169 るプロトコル識別フラグである。また、配列変数の場合、 配列の内
1170 容は、インクルードファイル net/net_count.h を参照すること。
1171
1172 [1] PPP の HDLC(PROTO_FLG_PPP_HDLC)
1173 標準構造体変数で、変数名は net_count_hdlc である。
1174
1175 [2] PPP の認証プロトコル(PROTO_FLG_PPP_PAP)
1176 標準データ型変数で、 変数名は、受信オクテット数が
1177
1178 net_count_ppp_upap_in_octets
1179
1180 送信オクテット数が
1181
1182 net_count_ppp_upap_out_octets
1183
1184 [3] PPP のリンク制御プロトコル(PROTO_FLG_PPP_LCP)
1185 標準データ型変数で、変数名は、 受信オクテット数が
1186
1187 net_count_ppp_lcp_in_octets
1188
1189 送信オクテット数が
1190
1191 net_count_ppp_lcp_out_octets
1192
1193 [4] PPP の IP 依存制御プロトコル(PROTO_FLG_PPP_IPCP)
1194 標準データ型変数で、 変数名は、受信オクテット数が
1195
1196 net_count_ppp_ipcp_in_octets
1197
1198 送信オクテット数が
1199
1200 net_count_ppp_ipcp_out_octets
1201
1202 [5] PPP 全体(PROTO_FLG_PPP)
1203 PPP 全体のネットワーク統計情報は、 標準構造体変数で、
1204 変数名は net_count_ppp である。 また、 PPP での net_buf
1205 の割当て失敗数は、 標準データ型変数で、 変数名は
1206 net_count_ppp_no_buf である。
1207
1208 [6] ループバックインタフェース(PROTO_FLG_LOOP)
1209 標準構造体変数で、変数名は net_count_loop である。
1210
1211 [7] イーサネットディバイスドライバ NIC(PROTO_FLG_ETHER_NIC)
1212 標準データ型配列変数で、 変数名は net_count_ether_nic
1213 である。
1214
1215 [8] (PROTO_FLG_ETHER)
1216 標準構造体変数で、変数名は net_count_ether である。
1217
1218 [9] (PROTO_FLG_ARP)
1219 標準構造体変数で、変数名は net_count_arp である。
1220
1221 [10] (PROTO_FLG_IP4)
1222 標準データ型配列変数で、変数名は net_count_ip4 である。
1223
1224 [11] (PROTO_FLG_IP6)
1225 標準データ型配列変数で、変数名は net_count_ip6 である。
1226
1227 [12] (PROTO_FLG_ICMP4)
1228 標準構造体変数で、変数名は net_count_icmp4 である。
1229
1230 [13] (PROTO_FLG_ICMP6)
1231 標準データ型配列変数で、変数名は net_count_icmp6 である。
1232
1233 [14] (PROTO_FLG_ND6)
1234 標準データ型配列変数で、変数名は net_count_nd6 である。
1235
1236 [15] (PROTO_FLG_UDP)
1237 標準構造体変数で、変数名は net_count_udp である。
1238
1239 [16] (PROTO_FLG_TCP)
1240 標準データ型配列変数で、変数名は net_count_tcp である。
1241
1242 [17] (PROTO_FLG_NET_BUF)
1243 net_buf に関しては、 特殊であるためサンプルアプリケー
1244 ション nserv で使用している netapp/dbg_cons.c の関数
1245 net_count を参照すること。
1246
12477. 2 SNMP 用管理情報ベース(MIB)
1248
1249 コンパイル時コンフィギュレーション・ファイルのいずれかで、 マクロ
1250SUPPORT_MIB を定義することにより、SNMP 用管理情報ベース(MIB)に準拠し
1251たネットワーク統計の取得が可能である。ただし、TINET 自体は、管理情報ベー
1252ス(MIB)に準拠したネットワーク統計を提供するだけで,SNMP をサポートし
1253ていない。また、RFC1213、RFC2465、RFC2466 に定義されている全ての情報が
1254取得できるわけではない。取得できる情報は、関係するインクルードファイル
1255の構造体の定義を参照すること。
1256 以下に、グループ、構造体を定義しているインクルードファイル、構造体名、
1257構造体変数名を示す。
1258
1259 (1) TCP グループ
1260
1261 インクルードファイル netinet/tcp_var.h
1262 構造体名 T_TCP_STATS
1263 変数名 tcp_stats
1264
1265 (2) UDP グループ
1266
1267 インクルードファイル netinet/udp_var.h
1268 構造体名 T_UDP_STATS
1269 変数名 udp_stats
1270
1271 (3) ICMPv4 グループ
1272
1273 インクルードファイル netinet/icmp_var.h
1274 構造体名 T_ICMP_STATS
1275 変数名 icmp_stats
1276
1277 (4) IPv4 グループ
1278
1279 インクルードファイル netinet/ip_var.h
1280 構造体名 T_IP_STATS
1281 変数名 ip_stats
1282
1283 (5) ICMPv6 グループ
1284
1285 インクルードファイル netinet/icmp6.h
1286 構造体名 T_ICMP6_IFSTAT
1287 変数名 icmp6_ifstat
1288
1289 (6) IPv6 グループ
1290
1291 インクルードファイル netinet6/ip6_var.h
1292 構造体名 T_IN6_IFSTAT
1293 変数名 in6_ifstat
1294
1295 (7) ネットワークインタフェース(イーサネット)グループ
1296
1297 インクルードファイル net/if_var.h
1298 構造体名 T_IF_STATS
1299 変数名 if_stats
1300
13017. 3 TINET 内部アクセス関数、サポート関数、全域変数とマクロ
1302
1303 応用プログラムから TINET 内部にアクセスするための関数、 サポート関数、
1304全域変数とマクロである。
1305
1306 (1) IPv6 アドレスをリテラル表現(文字列)に変換する関数
1307 【C 言語 API】
1308 char *p_retbuf = ipv62str (char *p_buf, const T_IN6_ADDR *p_addr);
1309
1310 【パラメータ】
1311 char buf リテラル表現のIPv6アドレスを格納するバッファ
1312 const T_IN6_ADDR addr IPv6アドレス
1313
1314 【リターンパラメータ】
1315 char retbuf リテラル表現の IPv6 アドレスが格納されたバッファ
1316
1317 【インクルードファイル】
1318 <netinet/in.h>
1319
1320 【機能】
1321 IPv6 アドレスをリテラル表現(文字列)に変換する。パラ
1322 メータ buf には、最低 46 バイトの領域が必要である。また、
1323 パラメータ buf に、 NULL を指定すると、TINET 内部で確保
1324 してあるバッファに IPv6 アドレスをリテラル表現に変換し
1325 て書き込み、そのアドレスを返す。 コンパイル時コンフィギュ
1326 レーションパラメータ NUM_IPADDR_STR_BUFF によりバッファ
1327 数を指定することが出来る。 ただし、バッファ数を超えて連
1328 続的に呼出すとバッファを上書きする。
1329
1330 (2) 設定可能な最大 IPv6 アドレス数を返す関数
1331 【C 言語 API】
1332 u_int num = in6_get_maxnum_ifaddr (void);
1333
1334 【リターンパラメータ】
1335 u_int num 設定可能な最大IPv6アドレス数
1336
1337 【インクルードファイル】
1338 <netinet/in.h>
1339
1340 【機能】
1341 ネットワークインタフェースに設定可能な最大 IPv6 アド
1342 レス数を返す関数である。 なお、 現在設定されている IPv6
1343 アドレス数とは異なる。
1344
1345 (3) 設定されている IPv6 アドレスを返す関数
1346 【C 言語 API】
1347 const T_IN6_ADDR *p_addr = in6_get_ifaddr (int_t index);
1348
1349 【パラメータ】
1350 int_t index IPv6アドレスのインデックス値
1351
1352 【リターンパラメータ】
1353 T_IN6_ADDR addr 設定されているIPv6アドレスが格納されたバッファ
1354
1355 【インクルードファイル】
1356 <netinet/in.h>
1357
1358 【機能】
1359 ネットワークインタフェースに設定されている IPv6 アド
1360 レスを返す関数である。ただし、 未定義の場合は NULL を返
1361 す。 index には 0 ~ ( 設定可能な最大 IPv6 アドレス数
1362 -1) を指定できる。
1363
1364 (4) 設定されている IPv6 アドレスを更新する関数
1365 【C 言語 API】
1366 ER ercd = in6_upd_ifaddr (T_IN6_ADDR *p_addr,
1367 uint_t prefixlen,
1368 uint32_t vltime,
1369 uint32_t pltime);
1370
1371 【パラメータ】
1372 T_IN6_ADDR addr 更新するIPv6アドレス
1373 int_t prefixlen プレフィックス長
1374 int32_t vltime 有効時間(単位は秒)
1375 int32_t pltime 推奨有効時間(単位は秒)
1376
1377 【リターンパラメータ】
1378 ER ercd エラーコード
1379
1380 【エラーコード】
1381 E_OBJ 空きがない。
1382 E_PAR パラメータエラー(p_addrがNULL等)。
1383
1384 【インクルードファイル】
1385 <netinet/in.h>
1386
1387 【機能】
1388 ネットワークインタフェースに設定されている IPv6 アド
1389 レスのプレフィックス長、有効時間、 推奨有効時間を更新す
1390 る。 ただし、未定義の場合は追加する。
1391
1392 (5) 設定されている IPv6 アドレスを削除する関数
1393 【C 言語 API】
1394 ER ercd = in6_del_ifaddr (T_IN6_ADDR *p_addr);
1395
1396 【パラメータ】
1397 T_IN6_ADDR addr 削除するIPv6アドレス
1398
1399 【リターンパラメータ】
1400 ER ercd エラーコード
1401
1402 【エラーコード】
1403 E_PAR パラメータエラー(指定されたアドレスがない等)。
1404
1405 【インクルードファイル】
1406 <netinet/in.h>
1407
1408 【機能】
1409 ネットワークインタフェースに設定されている IPv6 アド
1410 レスを削除する。
1411
1412 (6) 設定可能な最大 IPv4 アドレス数を返す関数
1413 【C 言語 API】
1414 uint_t num = in4_get_maxnum_ifaddr (void);
1415
1416
1417 【リターンパラメータ】
1418 uint_t num 設定可能な最大IPv4アドレス数を返す関数
1419
1420 【インクルードファイル】
1421 <netinet/in.h>
1422
1423 【機能】
1424 ネットワークインタフェースに設定可能な最大 IPv4 アド
1425 レス数を返す関数である。なお、現在は常に 1 を返す。
1426
1427 (7) インタフェースに IPv4 アドレスを設定する関数
1428 【C 言語 API】
1429 ER ercd = in4_add_ifaddr (T_IN4_ADDR addr, T_IN4_ADDR mask);
1430
1431 【パラメータ】
1432 T_IN4_ADDR addr IPアドレス
1433 T_IN4_ADDR mask サブネットマスク
1434
1435 【リターンパラメータ】
1436 ER ercd エラーコード(現在は常にE_OK)
1437
1438 【エラーコード】
1439 E_OK 現在は常にE_OK
1440
1441 【インクルードファイル】
1442 <netinet/in.h>
1443
1444 【機能】
1445 インタフェースに IPv4 アドレスを設定する。
1446
1447 (8) IPv4 用静的経路表に経路情報を設定する関数
1448 【C 言語 API】
1449 ER ercd = in4_add_route (int index, T_IN4_ADDR target,
1450 T_IN4_ADDR mask,
1451 T_IN4_ADDR gateway);
1452
1453 【パラメータ】
1454 int index エントリのインデックス
1455 T_IN4_ADDR target 目標ネットワークのIPアドレス
1456 T_IN4_ADDR mask 目標ネットワークのサブネットマスク
1457 T_IN4_ADDR gateway ゲートウェイのIPアドレス
1458
1459 【リターンパラメータ】
1460 ER ercd エラーコード
1461
1462 【エラーコード】
1463 E_PAR 引数indexの値が負か、コンパイル時コンフィギュレーション
1464 パラメータNUM_ROUTE_ENTRY以上のときE_PAR
1465
1466 【インクルードファイル】
1467 <netinet/in.h>
1468
1469 【機能】
1470 IPv4 用静的経路表に経路情報を設定する。
1471
1472 (9) IPv4 アドレスをリテラル表現(文字列)に変換する関数
1473 【C 言語 API】
1474 char *p_retbuf = ip2str (char *p_buf, const T_IN4_ADDR *p_ipaddr);
1475
1476 【パラメータ】
1477 char buf リテラル表現のIPv4アドレスを格納するバッファ
1478 const T_IN4_ADDR ipaddr IPv4アドレス
1479
1480 【リターンパラメータ】
1481 char retbuf リテラル表現の IPv4 アドレスが格納されたバッファ
1482
1483 【インクルードファイル】
1484 <netinet/in.h>
1485
1486 【機能】
1487 IPv4 アドレスをリテラル表現(文字列)に変換する。パラ
1488 メータ buf には、最低 16 バイトの領域が必要である。また、
1489 パラメータ buf に、 NULL を指定すると、TINET 内部で確保
1490 してあるバッファに IPv4 アドレスをリテラル表現に変換し
1491 て書き込み、そのアドレスを返す。 コンパイル時コンフィギュ
1492 レーションパラメータ NUM_IPADDR_STR_BUFF によりバッファ
1493 数を指定することが出来る。 ただし、バッファ数を超えて連
1494 続的に呼出すとバッファを上書きする。
1495
1496 (10) ITRON TCP/IP API 機能コードを文字表現に変換する関数
1497 【C 言語 API】
1498 const char *p_str = in_strtfn (FN fncd);
1499
1500 【パラメータ】
1501 FN fncd ITRON TCP/IP API 機能コード
1502
1503 【リターンパラメータ】
1504 const char str ITRON TCP/IP API 機能コードの文字表現
1505
1506 【インクルードファイル】
1507 <netinet/in.h>
1508
1509 【機能】
1510 ITRON TCP/IP API 機能コードを文字表現に変換する。
1511
1512 (11) MAC アドレスをリテラル表現(文字列)に変換する関数
1513 【C 言語 API】
1514 char *p_retbuf = mac2str (char *p_buf, uint8_t *p_macaddr);
1515
1516 【パラメータ】
1517 char buf リテラル表現のMACアドレスを格納するバッファ
1518 uint8_t macaddr MACアドレス
1519
1520 【リターンパラメータ】
1521 char retbuf リテラル表現の MAC アドレスが格納されたバッファ
1522
1523 【インクルードファイル】
1524 <sil.h> TOPPERS/ASP では必要
1525 <net/net.h>
1526
1527 【機能】
1528 MAC アドレスをリテラル表現(文字列)に変換する。 パラ
1529 メータ buf には、最低 18 バイトの領域が必要である。また、
1530 パラメータ buf に、NULL を指定すると、 TINET 内部で確保
1531 してあるバッファに MAC アドレスをリテラル表現に変換して
1532 書き込み、 そのアドレスを返す。コンパイル時コンフィギュ
1533 レーションパラメータ NUM_MACADDR_STR_BUFF によりバッファ
1534 数を指定することが出来る。ただし、 バッファ数を超えて連
1535 続的に呼出すとバッファを上書きする。
1536
1537 (12) IPv4 アドレスを IPv6 の IPv4 射影アドレスに変換する関数
1538 【C 言語 API】
1539 T_IN6_ADDR *p_dstaddr = in6_make_ipv4mapped (T_IN6_ADDR *dst,
1540 T_IN4_ADDR src);
1541
1542 【パラメータ】
1543 T_IN6_ADDR *dst 格納先のIPv6アドレス変数へのポインタ
1544 T_IN4_ADDR src 変換するIPv4アドレス
1545
1546 【リターンパラメータ】
1547 T_IN6_ADDR *p_dstaddr 格納先のIPv6アドレス変数へのポインタ
1548
1549 【インクルードファイル】
1550 <netinet/in.h>
1551
1552 【機能】
1553 IPv4 アドレスを IPv6 の IPv4 射影アドレスに変換する。
1554
1555 (13) 指定した IPv6 アドレスが IPv4 射影アドレスかを判定する関数
1556 【C 言語 API】
1557 bool_t ret = in6_is_addr_ipv4mapped (const T_IN6_ADDR *addr);
1558
1559 【パラメータ】
1560 T_IN6_ADDR *p_dstaddr 判定するIPv6アドレス変数へのポインタ
1561
1562 【リターンパラメータ】
1563 bool_t ret IPv6アドレスがIPv4射影アドレスであればtrueが返される。
1564
1565 【インクルードファイル】
1566 <netinet/in.h>
1567
1568 【機能】
1569 指定した IPv6 アドレスが IPv4 射影アドレスかを判定す
1570 る。IPv6 アドレスが IPv4 射影アドレスであれば true が返
1571 される。
1572
1573 (14) IPv6 の特殊なアドレスに対応する全域変数
1574 【C 言語 API】
1575 const T_IN6_ADDR in6_addr_unspecified;
1576 const T_IN6_ADDR in6_addr_linklocal_allnodes;
1577 const T_IN6_ADDR in6_addr_linklocal_allrouters;
1578
1579 【機能】
1580 IPv6 では、アドレス長が 128 ビット(16 バイト)で、値
1581 をマクロで定義することができないために用意した全域変数
1582 であり、以下のように、 メモリ操作関数を呼び出してコピーする。
1583 memcpy(&myaddr.ipaddr, &in6_addr_unspecified, sizeof(T_IN6_ADDR));
1584
1585 (15) IPv6 の IPV6_ADDRANY に対応する全域変数
1586 【C 言語 API】
1587 const T_IN6_ADDR ipv6_addrany;
1588
1589 【機能】
1590 T_IPV6EP の ipaddr フィールドに、値 IPV4_ADDRANY を代
1591 入するとき、IPv4 では、
1592 myaddr.ipaddr = IPV4_ADDRANY;
1593
1594 と指定できるが、IPv6 では、同様の指定ができないために用
1595 意した全域変数であり、 以下のように、メモリ操作関数を呼
1596 び出してコピーする。
1597 memcpy(&myaddr.ipaddr, &ipv6_addrany, sizeof(T_IN6_ADDR));
1598
1599 なお、この全域変数はマクロで定義している。
1600
1601 (16) TINET のバージョン情報マクロ
1602 【C 言語 API】
1603 TINET_PRVER
1604
1605 【ビット配分】
1606 ビット12~15 メジャーリリース(現在の値は1)
1607 ビット4~11 マイナーリリース(現在の値は7)
1608 ビット3~0 パッチレベル(現在の値は0)
1609
1610 【インクルードファイル】
1611 <net/net.h>
1612
1613 (17) 8 ビット毎に指定した IPv4 アドレスを 32 ビットにするマクロ
1614 【C 言語 API】
1615 T_IN4_ADDR addr = MAKE_IPV4_ADDR(uint8_t a, uint8_t b,
1616 uint8_t c, uint8_t d);
1617
1618 【パラメータ】
1619 uint8_t a IPv4アドレスのビット24~31
1620 uint8_t b IPv4アドレスのビット16~23
1621 uint8_t c IPv4アドレスのビット8~15
1622 uint8_t d IPv4アドレスのビット0~7
1623
1624 【リターンパラメータ】
1625 T_IN4_ADDR addr 32ビットのIPv4アドレス
1626
1627 【インクルードファイル】
1628 <netinet/in.h>
1629
1630 【機能】
1631 各オクテットの値から IPv4 アドレスを生成する。
1632
1633 (18) 一般定数マクロ
1634
1635 TCP_REP_NONE 該当する TCP 受付口が無い。値は(0)。
1636 TCP_CEP_NONE 該当する TCP 通信端点が無い。値は(0)。
1637 UDP_CEP_NONE 該当する UDP 通信端点が無い。値は(0)。
1638
16397. 4 応用プログラムコールバック関数
1640
1641 TINET から呼出される応用プログラムコールバック関数であり、応用プログ
1642ラム側で用意する必要がある。
1643
1644 (1) IPv4 アドレス重複検出時のコールバック関数
1645 【C 言語 API】
1646 boot_t reply = arp_callback_duplicated(uint8_t *shost);
1647
1648 【パラメータ】
1649 uint8_t shost 重複相手のMACアドレス
1650
1651 【リターンパラメータ】
1652 bool_t reply 重複の通知
1653
1654 【インクルードファイル】
1655 <netinet/if_ether.h>
1656
1657 【コンパイル時コンフィギュレーションパラメータ】
1658 ARP_CFG_CALLBACK_DUPLICATED
1659
1660 【機能】
1661 戻り値に TRUE を指定すると、TINET で重複相手の MAC ア
1662 ドレスを syslog に出力し、 重複相手にも重複したことを伝
1663 える。FALSE を指定すると何もしない。
1664
16658. 謝辞
1666
1667 本 TCP/IP プロトコルスタックは、次の組織の皆様の御支援により研究・開
1668発を行いました。関係各位に感謝いたします。
1669
1670 (1) 財団法人道央産業技術振興機構様
1671
1672 [1] 事業名(実施年度)
1673 高度技術開発委託事業(平成 12 年度)
1674 [2] テーマ名
1675 組込み型制御システム用 TCP/IP プロトコルスタックの開発
1676
1677 (2) 株式会社 NTT ドコモ北海道苫小牧支店様
1678 (3) 経済産業省東北経済産業局(委託先管理法人: 財団法人みやぎ産業
1679 振興機構)様
1680
1681 [1] 事業名(実施年度)
1682 地域新生コンソーシアム研究開発事業(平成14年度~15年度)
1683 [2] テーマ名
1684 組込みシステム・オープンプラットホームの構築とその実用化開発
1685
1686 (4) 宮城県産業技術総合センター様
1687 (5) TOPPERS プロジェクト様
1688 (6) 株式会社ヴィッツ様
1689 (7) 財団法人電気・電子情報学術振興財団様
1690
1691 [1] 第 6 回 LSI IP デザイン・アワード IP 受賞
1692 (2004 年、 平成 16 年 5 月 20 日)
1693 オープンソースの組込みシステム用 TCP/IP
1694 プロトコルスタック : TINET
1695 [2] 第 7 回 LSI IP デザイン・アワード IP 受賞
1696 (2005 年、 平成 17 年 5 月 19 日)
1697 組込みシステム用 IP バージョン 6 対応 TCP/IP
1698 プロトコルスタック : TINET-1.2
1699
1700 (8) 株式会社北斗電子様
1701 (9) 有限会社品川通信計装サービス様
1702 (10) 北海道立工業試験場様
1703
1704 [1] 事業名(実施年度)
1705 重点領域特別研究(平成 17 年度~ 18 年度)
1706 [2] テーマ名
1707 組込みシステム向けネットワーク接続ソフトウェア群の開発
1708
1709 (11) 総務省北海道総合通信局様
1710
1711 [1] 事業名(実施年度)
1712 戦略的情報通信研究開発推進制度【SCOPE】「地域 ICT 振興
1713 型研究開発」(平成 22 年度~平成 23 年度)
1714 [2] テーマ名
1715 ユビキタスサービスプラットフォームに対応した組込みシス
1716 テム用 TCP/IP プロトコルスタックとサポートシステムの研究開発
1717
1718 (12) ルネサスエレクトロニクス株式会社様
1719
1720 (13) 経済産業省北海道経済産業局様
1721
1722 [1] 事業名(実施年度)
1723 中小企業経営支援等対策費補助金「戦略的基盤技術高度化支援事業」
1724 (平成 26 年度~平成 28 年度)
1725 [2] テーマ名
1726 農業機械のさらなる高度化と海外進出に資する
1727 次世代電子制御ソフトウェア基盤の開発
1728
17299. ライセンス
1730
1731 TINET は FreeBSD を元に開発を行ったため、 TINET を含むソフトウェアを、
1732他のソフトウェア開発に使用できない形で再配布する場合(TOPPERS ライセン
1733ス (3) に規程されている形態)は、 TOPPERS ライセンス (3) の (b) の報告
1734だけでは不十分で、(a) による方法が必要である。
1735 以下に示す TOPPERS、 FreeBSD および FreeBSD へのソフトウェアの寄贈者
1736のライセンス規定に従って、再配布に伴うドキュメント(利用者マニュアルな
1737ど)に、ライセンス表示を行うと。
1738
1739(1)FreeBSD
1740
1741 /*
1742 * Copyright (c) 1980, 1986, 1993
1743 * The Regents of the University of California. All rights reserved.
1744 *
1745 * Redistribution and use in source and binary forms, with or without
1746 * modification, are permitted provided that the following conditions
1747 * are met:
1748 * 1. Redistributions of source code must retain the above copyright
1749 * notice, this list of conditions and the following disclaimer.
1750 * 2. Redistributions in binary form must reproduce the above copyright
1751 * notice, this list of conditions and the following disclaimer in the
1752 * documentation and/or other materials provided with the distribution.
1753 * 3. All advertising materials mentioning features or use of this software
1754 * must display the following acknowledgement:
1755 * This product includes software developed by the University of
1756 * California, Berkeley and its contributors.
1757 * 4. Neither the name of the University nor the names of its contributors
1758 * may be used to endorse or promote products derived from this software
1759 * without specific prior written permission.
1760 *
1761 * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
1762 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
1763 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
1764 * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
1765 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
1766 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
1767 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
1768 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
1769 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
1770 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
1771 * SUCH DAMAGE.
1772 */
1773
1774(2)KAME
1775
1776 /*
1777 * Copyright (C) 1995, 1996, 1997, and 1998 WIDE Project.
1778 * All rights reserved.
1779 *
1780 * Redistribution and use in source and binary forms, with or without
1781 * modification, are permitted provided that the following conditions
1782 * are met:
1783 * 1. Redistributions of source code must retain the above copyright
1784 * notice, this list of conditions and the following disclaimer.
1785 * 2. Redistributions in binary form must reproduce the above copyright
1786 * notice, this list of conditions and the following disclaimer in the
1787 * documentation and/or other materials provided with the distribution.
1788 * 3. Neither the name of the project nor the names of its contributors
1789 * may be used to endorse or promote products derived from this software
1790 * without specific prior written permission.
1791 *
1792 * THIS SOFTWARE IS PROVIDED BY THE PROJECT AND CONTRIBUTORS ``AS IS'' AND
1793 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
1794 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
1795 * ARE DISCLAIMED. IN NO EVENT SHALL THE PROJECT OR CONTRIBUTORS BE LIABLE
1796 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
1797 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
1798 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
1799 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
1800 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
1801 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
1802 * SUCH DAMAGE.
1803 */
1804
1805(3)イーサネット・ディバイスドライバ
1806
1807 /*
1808 * Copyright (c) 1995, David Greenman
1809 * All rights reserved.
1810 *
1811 * Redistribution and use in source and binary forms, with or without
1812 * modification, are permitted provided that the following conditions
1813 * are met:
1814 * 1. Redistributions of source code must retain the above copyright
1815 * notice unmodified, this list of conditions, and the following
1816 * disclaimer.
1817 * 2. Redistributions in binary form must reproduce the above copyright
1818 * notice, this list of conditions and the following disclaimer in the
1819 * documentation and/or other materials provided with the distribution.
1820 *
1821 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
1822 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
1823 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
1824 * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
1825 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
1826 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
1827 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
1828 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
1829 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
1830 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
1831 * SUCH DAMAGE.
1832 *
1833 * $FreeBSD: src/sys/i386/isa/if_ed.c,v 1.148.2.4 1999/09/25 13:08:18 nyan Exp $
1834 */
1835
1836 /*
1837 * Device driver for National Semiconductor DS8390/WD83C690 based ethernet
1838 * adapters. By David Greenman, 29-April-1993
1839 *
1840 * Currently supports the Western Digital/SMC 8003 and 8013 series,
1841 * the SMC Elite Ultra (8216), the 3Com 3c503, the NE1000 and NE2000,
1842 * and a variety of similar clones.
1843 *
1844 */
1845
1846(4)/usr/sbin/ppp
1847
1848 /*
1849 * User Process PPP
1850 *
1851 * Written by Toshiharu OHNO (tony-o@iij.ad.jp)
1852 *
1853 * Copyright (C) 1993, Internet Initiative Japan, Inc. All rights reserverd.
1854 *
1855 * Redistribution and use in source and binary forms are permitted
1856 * provided that the above copyright notice and this paragraph are
1857 * duplicated in all such forms and that any documentation,
1858 * advertising materials, and other materials related to such
1859 * distribution and use acknowledge that the software was developed
1860 * by the Internet Initiative Japan, Inc. The name of the
1861 * IIJ may not be used to endorse or promote products derived
1862 * from this software without specific prior written permission.
1863 * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
1864 * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
1865 * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
1866 */
1867
1868(5)/usr/sbin/pppd
1869
1870 /*
1871 * main.c - Point-to-Point Protocol main module
1872 *
1873 * Copyright (c) 1989 Carnegie Mellon University.
1874 * All rights reserved.
1875 *
1876 * Redistribution and use in source and binary forms are permitted
1877 * provided that the above copyright notice and this paragraph are
1878 * duplicated in all such forms and that any documentation,
1879 * advertising materials, and other materials related to such
1880 * distribution and use acknowledge that the software was developed
1881 * by Carnegie Mellon University. The name of the
1882 * University may not be used to endorse or promote products derived
1883 * from this software without specific prior written permission.
1884 * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
1885 * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
1886 * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
1887 */
1888
1889(6)TOPPERS/ASP
1890
1891 /*
1892 * TOPPERS/ASP Kernel
1893 * Toyohashi Open Platform for Embedded Real-Time Systems/
1894 * Advanced Standard Profile Kernel
1895 *
1896 * Copyright (C) 2000-2003 by Embedded and Real-Time Systems Laboratory
1897 * Toyohashi Univ. of Technology, JAPAN
1898 * Copyright (C) 2004-2013 by Embedded and Real-Time Systems Laboratory
1899 * Graduate School of Information Science, Nagoya Univ., JAPAN
1900 *
1901 * 上記著作権者は,以下の(1)~(4)の条件を満たす場合に限り,本ソフトウェ
1902 * ア(本ソフトウェアを改変したものを含む.以下同じ)を使用・複製・改
1903 * 変・再配布(以下,利用と呼ぶ)することを無償で許諾する.
1904 * (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作
1905 * 権表示,この利用条件および下記の無保証規定が,そのままの形でソー
1906 * スコード中に含まれていること.
1907 * (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使
1908 * 用できる形で再配布する場合には,再配布に伴うドキュメント(利用
1909 * 者マニュアルなど)に,上記の著作権表示,この利用条件および下記
1910 * の無保証規定を掲載すること.
1911 * (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使
1912 * 用できない形で再配布する場合には,次のいずれかの条件を満たすこ
1913 * と.
1914 * (a) 再配布に伴うドキュメント(利用者マニュアルなど)に,上記の著
1915 * 作権表示,この利用条件および下記の無保証規定を掲載すること.
1916 * (b) 再配布の形態を,別に定める方法によって,TOPPERSプロジェクトに
1917 * 報告すること.
1918 * (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
1919 * 害からも,上記著作権者およびTOPPERSプロジェクトを免責すること.
1920 * また,本ソフトウェアのユーザまたはエンドユーザからのいかなる理
1921 * 由に基づく請求からも,上記著作権者およびTOPPERSプロジェクトを
1922 * 免責すること.
1923 *
1924 * 本ソフトウェアは,無保証で提供されているものである.上記著作権者お
1925 * よびTOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的
1926 * に対する適合性も含めて,いかなる保証も行わない.また,本ソフトウェ
1927 * アの利用により直接的または間接的に生じたいかなる損害に関しても,そ
1928 * の責任を負わない.
1929 *
1930 * $Id: tinet.txt 315 2017-07-23 05:29:40Z coas-nagasima $
1931 */
1932
1933(7)TOPPERS/JSP
1934
1935 /*
1936 * TOPPERS/JSP Kernel
1937 * Toyohashi Open Platform for Embedded Real-Time Systems/
1938 * Just Standard Profile Kernel
1939 *
1940 * Copyright (C) 2000-2003 by Embedded and Real-Time Systems Laboratory
1941 * Toyohashi Univ. of Technology, JAPAN
1942 * Copyright (C) 2004 by Embedded and Real-Time Systems Laboratory
1943 * Graduate School of Information Science, Nagoya Univ., JAPAN
1944 *
1945 * 上記著作権者は,以下の (1)~(4) の条件か,Free Software Foundation
1946 * によって公表されている GNU General Public License の Version 2 に記
1947 * 述されている条件を満たす場合に限り,本ソフトウェア(本ソフトウェア
1948 * を改変したものを含む.以下同じ)を使用・複製・改変・再配布(以下,
1949 * 利用と呼ぶ)することを無償で許諾する.
1950 * (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作
1951 * 権表示,この利用条件および下記の無保証規定が,そのままの形でソー
1952 * スコード中に含まれていること.
1953 * (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使
1954 * 用できる形で再配布する場合には,再配布に伴うドキュメント(利用
1955 * 者マニュアルなど)に,上記の著作権表示,この利用条件および下記
1956 * の無保証規定を掲載すること.
1957 * (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使
1958 * 用できない形で再配布する場合には,次のいずれかの条件を満たすこ
1959 * と.
1960 * (a) 再配布に伴うドキュメント(利用者マニュアルなど)に,上記の著
1961 * 作権表示,この利用条件および下記の無保証規定を掲載すること.
1962 * (b) 再配布の形態を,別に定める方法によって,TOPPERSプロジェクトに
1963 * 報告すること.
1964 * (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
1965 * 害からも,上記著作権者およびTOPPERSプロジェクトを免責すること.
1966 *
1967 * 本ソフトウェアは,無保証で提供されているものである.上記著作権者お
1968 * よびTOPPERSプロジェクトは,本ソフトウェアに関して,その適用可能性も
1969 * 含めて,いかなる保証も行わない.また,本ソフトウェアの利用により直
1970 * 接的または間接的に生じたいかなる損害に関しても,その責任を負わない.
1971 *
1972 * @(#) $Id: tinet.txt 315 2017-07-23 05:29:40Z coas-nagasima $
1973 */
1974
1975(8)TOPPERS/ASP/CFG
1976
1977 /*
1978 * TOPPERS Software
1979 * Toyohashi Open Platform for Embedded Real-Time Systems
1980 *
1981 * Copyright (C) 2007-2012 by TAKAGI Nobuhisa
1982 *
1983 * 上記著作権者は,以下の(1)~(4)の条件を満たす場合に限り,本ソフトウェ
1984 * ア(本ソフトウェアを改変したものを含む.以下同じ)を使用・複製・改
1985 * 変・再配布(以下,利用と呼ぶ)することを無償で許諾する.
1986 * (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作
1987 * 権表示,この利用条件および下記の無保証規定が,そのままの形でソー
1988 * スコード中に含まれていること.
1989 * (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使
1990 * 用できる形で再配布する場合には,再配布に伴うドキュメント(利用
1991 * 者マニュアルなど)に,上記の著作権表示,この利用条件および下記
1992 * の無保証規定を掲載すること.
1993 * (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使
1994 * 用できない形で再配布する場合には,次のいずれかの条件を満たすこ
1995 * と.
1996 * (a) 再配布に伴うドキュメント(利用者マニュアルなど)に,上記の著
1997 * 作権表示,この利用条件および下記の無保証規定を掲載すること.
1998 * (b) 再配布の形態を,別に定める方法によって,TOPPERSプロジェクトに
1999 * 報告すること.
2000 * (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
2001 * 害からも,上記著作権者およびTOPPERSプロジェクトを免責すること.
2002 * また,本ソフトウェアのユーザまたはエンドユーザからのいかなる理
2003 * 由に基づく請求からも,上記著作権者およびTOPPERSプロジェクトを
2004 * 免責すること.
2005 *
2006 * 本ソフトウェアは,無保証で提供されているものである.上記著作権者お
2007 * よびTOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的
2008 * に対する適合性も含めて,いかなる保証も行わない.また,本ソフトウェ
2009 * アの利用により直接的または間接的に生じたいかなる損害に関しても,そ
2010 * の責任を負わない.
2011 *
2012 */
2013
2014(9)TINET
2015
2016 /*
2017 * TINET (TCP/IP Protocol Stack)
2018 *
2019 * Copyright (C) 2001-2016 by Dep. of Computer Science and Engineering
2020 * Tomakomai National College of Technology, JAPAN
2021 *
2022 * 上記著作権者は,以下の(1)~(4)の条件を満たす場合に限り,本ソフトウェ
2023 * ア(本ソフトウェアを改変したものを含む.以下同じ)を使用・複製・改
2024 * 変・再配布(以下,利用と呼ぶ)することを無償で許諾する.
2025 * (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作
2026 * 権表示,この利用条件および下記の無保証規定が,そのままの形でソー
2027 * スコード中に含まれていること.
2028 * (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使
2029 * 用できる形で再配布する場合には,再配布に伴うドキュメント(利用
2030 * 者マニュアルなど)に,上記の著作権表示,この利用条件および下記
2031 * の無保証規定を掲載すること.
2032 * (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使
2033 * 用できない形で再配布する場合には,次のいずれかの条件を満たすこ
2034 * と.
2035 * (a) 再配布に伴うドキュメント(利用者マニュアルなど)に,上記の著
2036 * 作権表示,この利用条件および下記の無保証規定を掲載すること.
2037 * (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
2038 * 害からも,上記著作権者およびTOPPERSプロジェクトを免責すること.
2039 * また,本ソフトウェアのユーザまたはエンドユーザからのいかなる理
2040 * 由に基づく請求からも,上記著作権者およびTOPPERSプロジェクトを
2041 * 免責すること.
2042 *
2043 * 本ソフトウェアは,無保証で提供されているものである.上記著作権者お
2044 * よびTOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的
2045 * に対する適合性も含めて,いかなる保証も行わない.また,本ソフトウェ
2046 * アの利用により直接的または間接的に生じたいかなる損害に関しても,そ
2047 * の責任を負わない.
2048 *
2049 * @(#) $Id: tinet.txt 315 2017-07-23 05:29:40Z coas-nagasima $
2050 */
Note: See TracBrowser for help on using the repository browser.