Changeset 318 for asp3_gr_sakura/trunk/tinet/netinet/in4_subr.c
- Timestamp:
- Aug 3, 2017, 10:46:41 PM (7 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
asp3_gr_sakura/trunk/tinet/netinet/in4_subr.c
- Property svn:keywords deleted
-
Property svn:mime-type
changed from
text/x-csrc
totext/x-csrc; charset=UTF-8
r317 r318 5 5 * Tomakomai National College of Technology, JAPAN 6 6 * 7 * ä¸è¨èä½æ¨©è 8 ã¯ï¼ä»¥ä¸ã® (1)ï½(4) ã®æ¡ä»¶ãï¼Free Software Foundation 9 * ã«ãã£ã¦å 10 ¬è¡¨ããã¦ãã GNU General Public License ã® Version 2 ã«è¨ 11 * è¿°ããã¦ããæ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§ã¢ï¼æ¬ã½ããã¦ã§ã¢ 12 * ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ã使ç¨ã»è¤è£½ã»æ¹å¤ã»åé 13 å¸ï¼ä»¥ä¸ï¼ 14 * å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼ 15 * (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½ 16 * 権表示ï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼ 17 * ã¹ã³ã¼ãä¸ã«å«ã¾ãã¦ãããã¨ï¼ 18 * (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿ 19 * ç¨ã§ããå½¢ã§åé 20 å¸ããå ´åã«ã¯ï¼åé 21 å¸ã«ä¼´ãããã¥ã¡ã³ãï¼å©ç¨ 22 * è 23 ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ 24 * ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼ 25 * (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿ 26 * ç¨ã§ããªãå½¢ã§åé 27 å¸ããå ´åã«ã¯ï¼æ¬¡ã®æ¡ä»¶ãæºãããã¨ï¼ 28 * (a) åé 29 å¸ã«ä¼´ãããã¥ã¡ã³ãï¼å©ç¨è 30 ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è 31 * ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼ 32 * (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ 33 * 害ãããï¼ä¸è¨èä½æ¨©è 34 ããã³TOPPERSããã¸ã§ã¯ããå 35 責ãããã¨ï¼ 36 * 37 * æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è 38 ã 39 * ãã³TOPPERSããã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ãã®é©ç¨å¯è½æ§ã 40 * å«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´ 41 * æ¥çã¾ãã¯éæ¥çã«çãããããªãæ害ã«é¢ãã¦ãï¼ãã®è²¬ä»»ãè² ããªãï¼ 7 * 上記著作権者は,以下の (1)~(4) の条件か,Free Software Foundation 8 * によって公表されている GNU General Public License の Version 2 に記 9 * 述されている条件を満たす場合に限り,本ソフトウェア(本ソフトウェア 10 * を改変したものを含む.以下同じ)を使用・複製・改変・再配布(以下, 11 * 利用と呼ぶ)することを無償で許諾する. 12 * (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作 13 * 権表示,この利用条件および下記の無保証規定が,そのままの形でソー 14 * スコード中に含まれていること. 15 * (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使 16 * 用できる形で再配布する場合には,再配布に伴うドキュメント(利用 17 * 者マニュアルなど)に,上記の著作権表示,この利用条件および下記 18 * の無保証規定を掲載すること. 19 * (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使 20 * 用できない形で再配布する場合には,次の条件を満たすこと. 21 * (a) 再配布に伴うドキュメント(利用者マニュアルなど)に,上記の著 22 * 作権表示,この利用条件および下記の無保証規定を掲載すること. 23 * (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損 24 * 害からも,上記著作権者およびTOPPERSプロジェクトを免責すること. 25 * 26 * 本ソフトウェアは,無保証で提供されているものである.上記著作権者お 27 * よびTOPPERSプロジェクトは,本ソフトウェアに関して,その適用可能性も 28 * 含めて,いかなる保証も行わない.また,本ソフトウェアの利用により直 29 * 接的または間接的に生じたいかなる損害に関しても,その責任を負わない. 42 30 * 43 31 * @(#) $Id$ … … 120 108 121 109 /* 122 * in_rtinit -- ã«ã¼ãã£ã³ã°è¡¨ãåæåããã110 * in_rtinit -- ルーティング表を初期化する。 123 111 */ 124 112 … … 136 124 137 125 /* 138 * in_rtnewentry -- æ°ããã¨ã³ããªãç²å¾ããã126 * in_rtnewentry -- 新しいエントリを獲得する。 139 127 */ 140 128 … … 146 134 int_t ix; 147 135 148 /* 空ãã¨ã³ããªãæ¢ãã*/136 /* 空きエントリを探す。*/ 149 137 for (ix = NUM_IN4_STATIC_ROUTE_ENTRY; ix < NUM_IN4_ROUTE_ENTRY; ix ++) { 150 138 rt = &routing4_tbl[ix]; … … 155 143 } 156 144 157 /* expire ã®åä½ã¯ [s]ã*/145 /* expire の単位は [s]。*/ 158 146 syscall(get_tim(&now)); 159 147 now /= SYSTIM_HZ; 160 148 161 149 if (frt == NULL) { 162 /* 空ãããªããã°ãæå¹æéããã£ã¨ãçãã¨ã³ããªã空ãã«ããã*/150 /* 空きがなければ、有効時間がもっとも短いエントリを空きにする。*/ 163 151 T_IN4_RTENTRY *srt = NULL; 164 152 int_t diff, sdiff = INT_MAX; … … 169 157 diff = (int_t)(rt->expire - now); 170 158 if (diff <= 0) { /* rt->expire <= now */ 171 /* æ¢ã«ãæå¹æéãéãã¦ããã*/159 /* 既に、有効時間が過ぎている。*/ 172 160 frt = rt; 173 161 break; … … 190 178 191 179 /* 192 * in_rttimer -- ã«ã¼ãã£ã³ã°è¡¨ã®ç®¡çã¿ã¤ãã¼180 * in_rttimer -- ルーティング表の管理タイマー 193 181 */ 194 182 … … 199 187 int_t ix; 200 188 201 /* expire ã®åä½ã¯ [s]ã*/189 /* expire の単位は [s]。*/ 202 190 syscall(get_tim(&now)); 203 191 now /= SYSTIM_HZ; … … 214 202 215 203 /* 216 * in4_get_maxnum_ifaddr -- ã¤ã³ã¿ãã§ã¼ã¹ã«è¨å®å¯è½ãªæ大ã¢ãã¬ã¹æ°ãè¿ãã204 * in4_get_maxnum_ifaddr -- インタフェースに設定可能な最大アドレス数を返す。 217 205 */ 218 206 … … 224 212 225 213 /* 226 * in4_get_ifaddr -- ã¤ã³ã¿ãã§ã¼ã¹ã«è¨å®ããã¦ããã¢ãã¬ã¹ãè¿ãã214 * in4_get_ifaddr -- インタフェースに設定されているアドレスを返す。 227 215 */ 228 216 … … 236 224 237 225 /* 238 * in4_set_header -- IPv4 ããããè¨å®ããã226 * in4_set_header -- IPv4 ヘッダを設定する。 239 227 */ 240 228 … … 246 234 T_IFNET *ifp = IF_GET_IFNET(); 247 235 248 /* IP ããããè¨å®ããã*/236 /* IP ヘッダを設定する。*/ 249 237 ip4h->vhl = IP4_MAKE_VHL(IPV4_VERSION, IP4_HDR_SIZE >> 2); 250 238 ip4h->len = htons(IP4_HDR_SIZE + len); … … 254 242 ip4h->id = ip4h->flg_off = ip4h->sum = 0; 255 243 256 /* IP ã¢ãã¬ã¹ãè¨å®ããã*/244 /* IP アドレスを設定する。*/ 257 245 ip4h->dst = htonl(*dstaddr); 258 246 … … 266 254 267 255 /* 268 * in4_get_datagram -- IPv4 ãã¼ã¿ã°ã©ã ãç²å¾ããããããè¨å®ããã256 * in4_get_datagram -- IPv4 データグラムを獲得し、ヘッダを設定する。 269 257 */ 270 258 … … 277 265 uint_t align; 278 266 279 /* ãã¼ã¿é·ã 4 ãªã¯ãããå¢çã«èª¿æ´ããã*/267 /* データ長を 4 オクテット境界に調整する。*/ 280 268 align = (len + 3) >> 2 << 2; 281 269 282 /* ãããã¯ã¼ã¯ãããã¡ãç²å¾ããã*/270 /* ネットワークバッファを獲得する。*/ 283 271 if ((error = tget_net_buf_ex(nbuf, (uint_t)(IF_IP4_HDR_SIZE + align), 284 272 (uint_t)(IF_IP4_HDR_SIZE + maxlen), nbatr, tmout)) != E_OK) … … 286 274 287 275 /* 288 * ãã大ããªãµã¤ãºã®ãããã¯ã¼ã¯ãããã¡ãç²å¾ããå ´åã®ã¿é·ãã調æ´ããã289 * ããå°ããªãµã¤ãºã®ãããã¯ã¼ã¯ãããã¡ã®ç²å¾ã¯ãéä¿¡ã¦ã£ã³ããããã¡ã®290 * çã³ãã¼æ©è½ã§ä½¿ç¨ãããå®éã«éä¿¡ããã¾ã§ããã¼ã¿ãµã¤ãºã¯æ±ºå®ã§ããªãã276 * より大きなサイズのネットワークバッファを獲得する場合のみ長さを調整する。 277 * より小さなサイズのネットワークバッファの獲得は、送信ウィンドバッファの 278 * 省コピー機能で使用され、実際に送信するまで、データサイズは決定できない。 291 279 */ 292 280 if ((nbatr & NBA_SEARCH_ASCENT) != 0) 293 281 (*nbuf)->len = (uint16_t)(IF_IP4_HDR_SIZE + len); 294 282 295 /* IP ããããè¨å®ããã*/283 /* IP ヘッダを設定する。*/ 296 284 if ((error = in4_set_header(*nbuf, len, dstaddr, srcaddr, proto, ttl)) != E_OK) 297 285 return error; 298 286 299 /* 4 ãªã¯ãããå¢çã¾ã§ããã£ã³ã°ã§åããã*/287 /* 4 オクテット境界までパディングで埋める。*/ 300 288 if (align > len) 301 289 memset((GET_IP4_SDU(*nbuf) + len), 0, (size_t)(align - len)); … … 305 293 306 294 /* 307 * in4_cksum -- IPv4 ã®ãã©ã³ã¹ãã¼ã層ãããã®ãã§ãã¯ãµã ãè¨ç®ããã308 * 309 * 注æ: æ»ãå¤ã¯ãããã¯ã¼ã¯ãã¤ããªã¼ã295 * in4_cksum -- IPv4 のトランスポート層ヘッダのチェックサムを計算する。 296 * 297 * 注意: 戻り値はネットワークバイトオーダ 310 298 */ 311 299 … … 316 304 uint_t align; 317 305 318 /* 4 ãªã¯ãããå¢çã®ãã¼ã¿é·*/306 /* 4 オクテット境界のデータ長 */ 319 307 align = (len + 3) >> 2 << 2; 320 308 321 /* 4 ãªã¯ãããå¢çã¾ã§ããã£ã³ã°ã§åããã*/309 /* 4 オクテット境界までパディングで埋める。*/ 322 310 if (align > len) 323 311 memset((uint8_t*)nbuf->buf + off + len, 0, (size_t)(align - len)); … … 332 320 333 321 /* 334 * in_cksum -- ãã§ãã¯ãµã è¨ç®é¢æ°ãIPv4ãICMPv4 ç¨335 * 336 * 注æ: data 㯠4 ãªã¯ãããåä½ã§ããã£ã³ã°ãããã¨ã337 * data ã 2 ãªã¯ãããåä½ã«ã¢ã©ã¤ã³ããã¦ããªãã¨338 * ä¾å¤ãçºçããå¯è½æ§ãããã339 * len 㯠4 ãªã¯ãããåä½ã«ã¢ã©ã¤ã³ããã¦ãããã¨ã340 * 341 * æ»ãå¤ã¯ãããã¯ã¼ã¯ãã¤ããªã¼ã322 * in_cksum -- チェックサム計算関数、IPv4、ICMPv4 用 323 * 324 * 注意: data は 4 オクテット単位でパディングすること。 325 * data が 2 オクテット単位にアラインされていないと 326 * 例外が発生する可能性がある。 327 * len は 4 オクテット単位にアラインされていること。 328 * 329 * 戻り値はネットワークバイトオーダ 342 330 */ 343 331 344 332 uint16_t 345 in_cksum (void *data, uint_t len /* ãªã¯ãããåä½*/)333 in_cksum (void *data, uint_t len /*オクテット単位*/) 346 334 { 347 335 uint16_t sum; … … 352 340 353 341 /* 354 * in4_is_dstaddr_accept -- å®å 355 ã¢ãã¬ã¹ã¨ãã¦æ£ããããã§ãã¯ããã 356 * 357 * 注æ: dstaddr ã¯ã 358 * TINET-1.2 ãããããã¯ã¼ã¯ãã¤ããªã¼ãã 359 * TINET-1.1 ã¾ã§ã¯ããã¹ããã¤ããªã¼ã 342 * in4_is_dstaddr_accept -- 宛先アドレスとして正しいかチェックする。 343 * 344 * 注意: dstaddr は、 345 * TINET-1.2 からネットワークバイトオーダ、 346 * TINET-1.1 までは、ホストバイトオーダ 360 347 */ 361 348 … … 370 357 371 358 /* 372 * inn4_is_dstaddr_accept -- å®å 373 ã¢ãã¬ã¹ã¨ãã¦æ£ããããã§ãã¯ããã 374 * 375 * 注æ: dstaddr ã¯ã 376 * TINET-1.2 ãããããã¯ã¼ã¯ãã¤ããªã¼ãã 377 * TINET-1.1 ã¾ã§ã¯ããã¹ããã¤ããªã¼ã 359 * inn4_is_dstaddr_accept -- 宛先アドレスとして正しいかチェックする。 360 * 361 * 注意: dstaddr は、 362 * TINET-1.2 からネットワークバイトオーダ、 363 * TINET-1.1 までは、ホストバイトオーダ 378 364 */ 379 365 … … 391 377 392 378 /* 393 * in4_addrwithifp -- å®å 394 ã¢ãã¬ã¹ã«ãµããããéä¿¡å 395 ã¢ãã¬ã¹ãã 396 * ãããã¯ã¼ã¯ã¤ã³ã¿ãã§ã¼ã¹ããæ¢ç´¢ããã 397 * in6_addrwithifp ãã·ãã¥ã¬ã¼ãããã ãã§ã 398 * ã¨ã©ã¼ãè¿ããã¨ã¯ãªãã 379 * in4_addrwithifp -- 宛先アドレスにふさわしい送信元アドレスを、 380 * ネットワークインタフェースから探索する。 381 * in6_addrwithifp をシミュレートするだけで、 382 * エラーを返すことはない。 399 383 */ 400 384 … … 407 391 408 392 /* 409 * in4_add_ifaddr -- ã¤ã³ã¿ãã§ã¼ã¹ã« IPv4 ã¢ãã¬ã¹ãè¨å®ããã393 * in4_add_ifaddr -- インタフェースに IPv4 アドレスを設定する。 410 394 */ 411 395 … … 423 407 424 408 /* 425 * in4_add_route -- çµè·¯è¡¨ã«ã¨ã³ããªãè¨å®ããã409 * in4_add_route -- 経路表にエントリを設定する。 426 410 */ 427 411 … … 443 427 444 428 /* 445 * in4_rtalloc -- ã«ã¼ãã£ã³ã°è¡¨ãæ¢ç´¢ããã429 * in4_rtalloc -- ルーティング表を探索する。 446 430 */ 447 431 … … 466 450 467 451 /* 468 * in4_rtredirect -- ã«ã¼ãã£ã³ã°è¡¨ã«ã¨ã³ããªãç»é²ããã469 * 470 * 注æ: å¼æ° tmo ã®åä½ã¯ [ms]ã452 * in4_rtredirect -- ルーティング表にエントリを登録する。 453 * 454 * 注意: 引数 tmo の単位は [ms]。 471 455 */ 472 456 … … 485 469 486 470 /* 487 * in4_timer -- IPv4 å 488 ±éã¿ã¤ãã¼ 489 * 490 * 1ç§å¨æã§èµ·åãããã 471 * in4_timer -- IPv4 共通タイマー 472 * 473 * 1秒周期で起動される。 491 474 */ 492 475 … … 510 493 511 494 /* 512 * in4_init -- IPv4 å 513 ±éæ©è½ãåæåããã 495 * in4_init -- IPv4 共通機能を初期化する。 514 496 */ 515 497
Note:
See TracChangeset
for help on using the changeset viewer.