Changeset 321 for EcnlProtoTool/trunk/asp3_dcre/tinet/netinet6/icmp6.c
- Timestamp:
- Aug 23, 2017, 9:27:43 AM (7 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
EcnlProtoTool/trunk/asp3_dcre/tinet/netinet6/icmp6.c
- Property svn:keywords deleted
-
Property svn:mime-type
changed from
text/x-csrc
totext/x-csrc;charset=UTF-8
r270 r321 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 責ãããã¨ï¼ 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プロジェクトを免責すること. 36 25 * 37 * æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è 38 ã 39 * ãã³TOPPERSããã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ãã®é©ç¨å¯è½æ§ã 40 * å«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´ 41 * æ¥çã¾ãã¯éæ¥çã«çãããããªãæ害ã«é¢ãã¦ãï¼ãã®è²¬ä»»ãè² ããªãï¼ 26 * 本ソフトウェアは,無保証で提供されているものである.上記著作権者お 27 * よびTOPPERSプロジェクトは,本ソフトウェアに関して,その適用可能性も 28 * 含めて,いかなる保証も行わない.また,本ソフトウェアの利用により直 29 * 接的または間接的に生じたいかなる損害に関しても,その責任を負わない. 42 30 * 43 31 * @(#) $Id$ … … 155 143 156 144 /* 157 * å¤æ°145 * 変数 158 146 */ 159 147 … … 161 149 162 150 /* 163 * SNMP 㮠管çæ 164 å ±ãã¼ã¹ (MIB) 151 * SNMP の 管理情報ベース (MIB) 165 152 */ 166 153 … … 170 157 171 158 /* 172 * icmp6_output -- ICMP6 ãã±ãããéä¿¡ããã159 * icmp6_output -- ICMP6 パケットを送信する。 173 160 */ 174 161 … … 182 169 183 170 /* 184 * å®å 185 ã¢ãã¬ã¹ã«ãµããããéä¿¡å 186 ã¢ãã¬ã¹ãã 187 * ãããã¯ã¼ã¯ã¤ã³ã¿ãã§ã¼ã¹ããæ¢ç´¢ãã¦å©ç¨ããã 171 * 宛先アドレスにふさわしい送信元アドレスを、 172 * ネットワークインタフェースから探索して利用する。 188 173 */ 189 174 ip6h = GET_IP6_HDR(output); … … 197 182 icmp6h = GET_ICMP6_HDR(output, off); 198 183 199 /* ãã§ãã¯ãµã ãè¨ç®ããã*/184 /* チェックサムを計算する。*/ 200 185 icmp6h->sum = 0; 201 186 icmp6h->sum = in6_cksum(output, IPPROTO_ICMPV6, (uint8_t*)icmp6h - output->buf, 202 187 ntohs(ip6h->plen) - (off - IF_IP6_HDR_SIZE)); 203 188 204 /* éä¿¡ããã*/189 /* 送信する。*/ 205 190 NET_COUNT_ICMP6(net_count_icmp6[NC_ICMP6_OUT_OCTETS], 206 191 output->len - GET_IF_IP6_HDR_SIZE(output)); … … 211 196 212 197 /* 213 * icmp6_echo_request -- ã¨ã³ã¼è¦æ±ãåä¿¡ããã¨ãã®å¦ç198 * icmp6_echo_request -- エコー要求を受信したときの処理 214 199 */ 215 200 … … 229 214 230 215 /* 231 * IPv6 ããã㨠ICMPv6 ãããéã®æ¡å¼µããããé¤å»ããã216 * IPv6 ヘッダと ICMPv6 ヘッダ間の拡張ヘッダを除去する。 232 217 */ 233 218 diff = off - IF_IP6_HDR_SIZE; 234 219 if (diff > 0) { 235 /* ICMPv6 ããããåã«è©°ããã*/220 /* ICMPv6 ヘッダを前に詰める。*/ 236 221 memmove(input->buf + IF_IP6_HDR_SIZE, input->buf + off, input->len - off); 237 222 off = IF_IP6_HDR_SIZE; 238 223 239 /* ãã¤ãã¼ãé·ã調æ´ããã*/224 /* ペイロード長を調整する。*/ 240 225 ip6h->plen = htons(ntohs(ip6h->plen) - diff); 241 226 input->len -= diff; … … 250 235 251 236 /* 252 * ã¡ãã»ã¼ã¸ã®åãã¨ã³ã¼è¦æ± (128) ãã253 * ã¨ã³ã¼å¿ç (129) ã«å¤æ´ãã¦éãè¿ãã237 * メッセージの型をエコー要求 (128) から 238 * エコー応答 (129) に変更して送り返す。 254 239 */ 255 240 icmp6h->type = ICMP6_ECHO_REPLY; 256 241 257 /* IPv6 ãããã®çºä¿¡å 258 ã¢ãã¬ã¹ã¨å®å 259 ã¢ãã¬ã¹ãå 260 ¥æ¿ããã*/ 242 /* IPv6 ヘッダの発信元アドレスと宛先アドレスを入替える。*/ 261 243 dst = ip6h->dst; 262 244 ip6h->dst = ip6h->src; … … 264 246 265 247 /* 266 * å 267 ã®å®å 268 ã¢ãã¬ã¹ããã«ããã£ã¹ãã®å ´åã¯ã 269 * å®å 270 ã¢ãã¬ã¹ã«ãµããããéä¿¡å 271 ã¢ãã¬ã¹ãã 272 * ãããã¯ã¼ã¯ã¤ã³ã¿ãã§ã¼ã¹ããæ¢ç´¢ãã¦å©ç¨ããã 248 * 元の宛先アドレスがマルチキャストの場合は、 249 * 宛先アドレスにふさわしい送信元アドレスを、 250 * ネットワークインタフェースから探索して利用する。 273 251 */ 274 252 if (IN6_IS_ADDR_MULTICAST(&dst)) { … … 281 259 } 282 260 283 /* 次ãããã¨ããããªããããè¨å®ããã*/261 /* 次ヘッダとホップリミットを設定する。*/ 284 262 ip6h->next = IPPROTO_ICMPV6; 285 263 ip6h->hlim = IP_DEFTTL; 286 264 287 /* ãã§ãã¯ãµã ãè¨ç®ããã*/265 /* チェックサムを計算する。*/ 288 266 icmp6h->sum = 0; 289 267 icmp6h->sum = in6_cksum(input, IPPROTO_ICMPV6, (uint8_t*)icmp6h - input->buf, 290 268 ntohs(ip6h->plen) - (off - IF_IP6_HDR_SIZE)); 291 269 292 /* éä¿¡ããã*/270 /* 送信する。*/ 293 271 NET_COUNT_ICMP6(net_count_icmp6[NC_ICMP6_OUT_OCTETS], 294 272 input->len - GET_IF_IP6_HDR_SIZE(input)); … … 300 278 301 279 /* 302 * icmp6_notify_error -- ã¨ã©ã¼ãéç¥ããã280 * icmp6_notify_error -- エラーを通知する。 303 281 */ 304 282 … … 312 290 len = input->len - poff; 313 291 314 /* ãã¼ã¿ã°ã©ã é·ã ICMP6 ãããé· + IP6 ãããé·ä»¥ä¸ãªãä½ãããªãã*/292 /* データグラム長が ICMP6 ヘッダ長 + IP6 ヘッダ長以下なら何もしない。*/ 315 293 if (len < ICMP6_HDR_SIZE + IP6_HDR_SIZE) 316 294 return; … … 318 296 icmp6h = GET_ICMP6_HDR(input, poff); 319 297 320 /* æçµããããæ¢ç´¢ããã*/298 /* 最終ヘッダを探索する。*/ 321 299 loff = ip6_lasthdr(input, poff + ICMP6_HDR_SIZE, IPPROTO_IPV6, &next); 322 300 323 /* æçµãããã TCP ã®ã¿å¯¾å¿ããã*/301 /* 最終ヘッダが TCP のみ対応する。*/ 324 302 if (loff >= 0 && next == IPPROTO_TCP) { 325 303 … … 341 319 342 320 /* 343 * icmp6_mtudisc_update -- Path MTU ãæ´æ°ããã321 * icmp6_mtudisc_update -- Path MTU を更新する。 344 322 */ 345 323 … … 365 343 366 344 /* 367 * icmp6_redirect_input -- åãç´ãã¡ãã»ã¼ã¸ã®å¦ç345 * icmp6_redirect_input -- 向け直しメッセージの処理 368 346 */ 369 347 … … 384 362 385 363 /* 386 * IP ãããã®ãã§ãã¯ã以ä¸ã®å ´åã¯ç ´æ£ããã387 * ã»ãªã³ã¯ãã¼ã«ã«ä»¥å¤ããéããã¦ããã¡ãã»ã¼ã¸388 * ã»ããããªãããã IPV6_MAXHLIM (255) 以å¤364 * IP ヘッダのチェック、以下の場合は破棄する。 365 * ・リンクローカル以外から送られてきたメッセージ 366 * ・ホップリミットが IPV6_MAXHLIM (255) 以外 389 367 */ 390 368 if (!IN6_IS_ADDR_LINKLOCAL(&ip6h->src) || ip6h->hlim != IPV6_MAXHLIM) … … 393 371 rdh = (T_ND_REDIRECT_HDR *)(input->buf + off); 394 372 395 /* åãç´ãã®çµç¹ã¢ãã¬ã¹ããã«ããã£ã¹ãã¢ãã¬ã¹ã®å ´åã¯ç ´æ£ããã*/373 /* 向け直しの終点アドレスがマルチキャストアドレスの場合は破棄する。*/ 396 374 if (IN6_IS_ADDR_MULTICAST(&rdh->dst)) 397 375 goto err_ret; 398 376 399 /* ã¿ã¼ã²ããã¢ãã¬ã¹ãçµè·¯è¡¨ã«ç»é²ããã¦ããããã§ãã¯ããã*/377 /* ターゲットアドレスが経路表に登録されているかチェックする。*/ 400 378 if ((gw = in6_rtalloc(ifp, &rdh->dst)) != NULL) { 401 /* GW ã¢ãã¬ã¹ã¨éä¿¡å 402 ã¢ãã¬ã¹ãç°ãªã£ã¦ããã°ç ´æ£ããã*/ 379 /* GW アドレスと送信元アドレスが異なっていれば破棄する。*/ 403 380 if (!IN6_ARE_ADDR_EQUAL(gw, &ip6h->src)) 404 381 goto err_ret; 405 382 } 406 else /* çµè·¯è¡¨ã«ãªããã°ç ´æ£ããã*/383 else /* 経路表になければ破棄する。*/ 407 384 goto err_ret; 408 385 … … 410 387 411 388 /* 412 * ã¿ã¼ã²ããã¢ãã¬ã¹ããªã³ã¯ãã¼ã«ã«ã¢ãã¬ã¹ã§ããã°ã413 * ã¿ã¼ã²ããã¯ã«ã¼ã¿389 * ターゲットアドレスがリンクローカルアドレスであれば、 390 * ターゲットはルータ 414 391 */ 415 392 if (IN6_IS_ADDR_LINKLOCAL(&rdh->target)) … … 417 394 418 395 /* 419 * ã¿ã¼ã²ããã¢ãã¬ã¹ã¨çµç¹ã¢ãã¬ã¹ãåä¸ã§ããã°ããªã³ãªã³ã¯396 * ターゲットアドレスと終点アドレスが同一であれば、オンリンク 420 397 */ 421 398 if (IN6_ARE_ADDR_EQUAL(&rdh->target, &rdh->dst)) … … 423 400 424 401 /* 425 * ã«ã¼ã¿ã§ãããªã³ãªã³ã¯ã§ããªããã°ã¨ã©ã¼402 * ルータでも、オンリンクでもなければエラー 426 403 */ 427 404 if (!router && !onlink) 428 405 goto err_ret; 429 406 430 /* è¿é£æ¢ç´¢ãªãã·ã§ã³ã®ãªãã»ãããè¨é²ããã*/407 /* 近隣探索オプションのオフセットを記録する。*/ 431 408 if (nd6_options(nd_opt_off, input->buf + off + ND_REDIRECT_HDR_SIZE, 432 409 input->len - (off + ND_REDIRECT_HDR_SIZE)) != E_OK) 433 410 goto err_ret; 434 411 435 /* è¿é£æ¢ç´¢ãªãã·ã§ã³ (åãç´ãã®ã«ã¼ã¿ã®ãªã³ã¯ã¢ãã¬ã¹) */412 /* 近隣探索オプション (向け直しのルータのリンクアドレス) */ 436 413 if (nd_opt_off[ND_OPT_OFF_ARRAY_IX(ND_OPT_TARGET_LINKADDR)]) { 437 414 opth = (T_ND_OPT_HDR *)((uint8_t *)(input->buf + off + ND_REDIRECT_HDR_SIZE) + 438 415 nd_opt_off[ND_OPT_OFF_ARRAY_IX(ND_OPT_TARGET_LINKADDR)] - 8); 439 /* 注æ: ãªãã·ã§ã³ãªãã»ããé 440 åã«ã¯ããªãã»ãã + 8 ãè¨å®ããã¦ããã*/ 416 /* 注意: オプションオフセット配列には、オフセット + 8 が設定されている。*/ 441 417 lladdr = (uint8_t *)(opth + 1); 442 418 lladdr_len = (opth->len << 3); … … 444 420 445 421 /* 446 * ãããã¯ã¼ã¯ã¤ã³ã¿ãã§ã¼ã¹ã®ã¢ãã¬ã¹é·ãä¸è´ããªããã°ã¨ã©ã¼422 * ネットワークインタフェースのアドレス長が一致しなければエラー 447 423 */ 448 424 if (lladdr && lladdr_len != ((sizeof(T_IF_ADDR) + sizeof(T_ND_OPT_HDR) + 7) & ~7)) 449 425 goto err_ret; 450 426 451 /* åãç´ãã®ã«ã¼ã¿ã®ãªã³ã¯ã¢ãã¬ã¹ãè¿é£ãã£ãã·ã¥ã«ç»é²ããã*/427 /* 向け直しのルータのリンクアドレスを近隣キャッシュに登録する。*/ 452 428 nd6_cache_lladdr(ifp, &rdh->target, (T_IF_ADDR *)lladdr, ND_REDIRECT, 453 429 onlink ? ND_REDIRECT_ONLINK : ND_REDIRECT_ROUTER); 454 430 455 /* ã«ã¼ãã£ã³ã°è¡¨ã«ç»é²ããã*/431 /* ルーティング表に登録する。*/ 456 432 in6_rtredirect(&rdh->target, &rdh->dst, 128, IN_RTF_REDIRECT, TMO_IN_REDIRECT); 457 433 … … 467 443 468 444 /* 469 * icmp6_input -- ICMP6 ã®å 470 ¥åé¢æ° 445 * icmp6_input -- ICMP6 の入力関数 471 446 */ 472 447 … … 485 460 NET_COUNT_MIB(icmp6_ifstat.ipv6IfIcmpInMsgs, 1); 486 461 487 /* ICMP6 ãããã®é·ãããã§ãã¯ããã*/462 /* ICMP6 ヘッダの長さをチェックする。*/ 488 463 len = input->len - off; 489 464 if (len < ICMP6_HDR_SIZE) { … … 496 471 icmp6h = GET_ICMP6_HDR(input, off); 497 472 498 /* ãã§ãã¯ãµã ãè¨ç®ããã*/473 /* チェックサムを計算する。*/ 499 474 if ((in6_cksum(input, IPPROTO_ICMPV6, off, ntohs(ip6h->plen) - (off - IF_IP_HDR_SIZE)) & 0xffff) != 0) { 500 475 NET_COUNT_ICMP6(net_count_icmp6[NC_ICMP6_IN_ERR_PACKETS], 1); … … 505 480 code = icmp6h->code; 506 481 507 /* ã¡ãã»ã¼ã¸ã®åã«ããåå²ããã*/482 /* メッセージの型により分岐する。*/ 508 483 switch (icmp6h->type) { 509 484 510 case ICMP6_DST_UNREACH: /* å®å 511 å°éä¸å¯è½ */ 485 case ICMP6_DST_UNREACH: /* 宛先到達不可能 */ 512 486 NET_COUNT_MIB(icmp6_ifstat.ipv6IfIcmpInDestUnreachs, 1); 513 487 icmp6_notify_error(input, off); 514 488 break; 515 489 516 case ICMP6_ECHO_REQUEST: /* ã¨ã³ã¼è¦æ±*/490 case ICMP6_ECHO_REQUEST: /* エコー要求 */ 517 491 icmp6_echo_request(input, off); 518 492 return IPPROTO_DONE; 519 493 break; 520 494 521 case ICMP6_ECHO_REPLY: /* ã¨ã³ã¼å¿ç*/495 case ICMP6_ECHO_REPLY: /* エコー応答 */ 522 496 523 497 #ifdef ICMP_CFG_CALLBACK_ECHO_REPLY … … 529 503 break; 530 504 531 case ND_ROUTER_ADVERT: /* ã«ã¼ã¿éç¥*/505 case ND_ROUTER_ADVERT: /* ルータ通知 */ 532 506 NET_COUNT_MIB(icmp6_ifstat.ipv6IfIcmpInRouterAdvertisements, 1); 533 507 if (code != 0 || len < ROUTER_ADVERT_HDR_SIZE) … … 537 511 break; 538 512 539 case ND_NEIGHBOR_SOLICIT: /* è¿é£è¦è«*/513 case ND_NEIGHBOR_SOLICIT: /* 近隣要請 */ 540 514 NET_COUNT_MIB(icmp6_ifstat.ipv6IfIcmpInNeighborSolicits, 1); 541 515 if (code != 0 || len < NEIGHBOR_SOLICIT_HDR_SIZE) … … 545 519 break; 546 520 547 case ND_NEIGHBOR_ADVERT: /* è¿é£éç¥*/521 case ND_NEIGHBOR_ADVERT: /* 近隣通知 */ 548 522 NET_COUNT_MIB(icmp6_ifstat.ipv6IfIcmpInNeighborAdvertisements, 1); 549 523 if (code != 0 || len < NEIGHBOR_ADVERT_HDR_SIZE) … … 553 527 break; 554 528 555 case ND_REDIRECT: /* åãç´ã*/529 case ND_REDIRECT: /* 向け直し */ 556 530 NET_COUNT_MIB(icmp6_ifstat.ipv6IfIcmpInRedirects, 1); 557 531 … … 571 545 break; 572 546 573 case ICMP6_PACKET_TOO_BIG: /* ãã±ããã大ããããã*/547 case ICMP6_PACKET_TOO_BIG: /* パケットが大きすぎる。 */ 574 548 575 549 #if NUM_IN6_HOSTCACHE_ENTRY > 0 … … 582 556 break; 583 557 584 case ICMP6_TIME_EXCEEDED: /* TTL ãè¶ 585 éããã */ 558 case ICMP6_TIME_EXCEEDED: /* TTL を超過した。 */ 586 559 NET_COUNT_MIB(icmp6_ifstat.ipv6IfIcmpInTimeExcds, 1); 587 560 break; 588 561 589 case ICMP6_PARAM_PROB: /* IPv6 ããããä¸æ£ã*/562 case ICMP6_PARAM_PROB: /* IPv6 ヘッダが不正。 */ 590 563 NET_COUNT_MIB(icmp6_ifstat.ipv6IfIcmpInParmProblems, 1); 591 564 break; 592 565 593 case MLD_LISTENER_QUERY: /* ãã«ããã£ã¹ãåä¿¡è 594 ç 595 §ä¼ */ 596 case MLD_LISTENER_REPORT: /* ãã«ããã£ã¹ãåä¿¡è 597 å ±å */ 598 case MLD_LISTENER_DONE: /* ãã«ããã£ã¹ãåä¿¡è 599 çµäº */ 600 case ND_ROUTER_SOLICIT: /* ã«ã¼ã¿è¦è« */ 601 case ICMP6_ROUTER_RENUMBERING: /* ã«ã¼ã¿çªå·åè¨å® */ 602 case ICMP6_FQDN_QUERY: /* FQDN ç 603 §ä¼ */ 604 case ICMP6_FQDN_REPLY: /* FQDN å¿ç */ 566 case MLD_LISTENER_QUERY: /* マルチキャスト受信者照会 */ 567 case MLD_LISTENER_REPORT: /* マルチキャスト受信者報告 */ 568 case MLD_LISTENER_DONE: /* マルチキャスト受信者終了 */ 569 case ND_ROUTER_SOLICIT: /* ルータ要請 */ 570 case ICMP6_ROUTER_RENUMBERING: /* ルータ番号再設定 */ 571 case ICMP6_FQDN_QUERY: /* FQDN 照会 */ 572 case ICMP6_FQDN_REPLY: /* FQDN 応答 */ 605 573 syslog(LOG_WARNING, "[ICMP6] unsupported type: %d.", icmp6h->type); 606 574 break; … … 619 587 620 588 /* 621 * icmp6_error -- ICMP6 ã¨ã©ã¼éä¿¡é¢æ°589 * icmp6_error -- ICMP6 エラー送信関数 622 590 */ 623 591 … … 634 602 635 603 /* 636 * å®å 637 ã¢ãã¬ã¹ãããã«ããã£ã¹ãã®å ´åã¯ã 638 * 以ä¸ã®æ¡ä»¶ä»¥å¤ã®ã¨ãã¯å¦çãè¡ããªãã 604 * 宛先アドレスが、マルチキャストの場合は、 605 * 以下の条件以外のときは処理を行わない。 639 606 * 640 * ã»ãã¼ã¿ã°ã©ã ã大ããããã641 * ã»IPv6 ãããã®ä¸æ£ã§ããªãã·ã§ã³ãèªèã§ããªãã607 * ・データグラムが大きすぎる。 608 * ・IPv6 ヘッダの不正で、オプションが認識できない。 642 609 */ 643 610 if (IN6_IS_ADDR_MULTICAST(&ip6h->dst) && … … 647 614 648 615 /* 649 * å§ç¹ã¢ãã¬ã¹ãã以ä¸ã®å ´åã¯å¦çãè¡ããªãã616 * 始点アドレスが、以下の場合は処理を行わない。 650 617 * 651 * ã»ç¡æå®652 * ã»ãã«ããã£ã¹ã618 * ・無指定 619 * ・マルチキャスト 653 620 */ 654 621 if (IN6_IS_ADDR_UNSPECIFIED(&ip6h->src) || … … 656 623 goto buf_rel; 657 624 658 /* æå¾ã®ããããæ¢ç´¢ããã*/625 /* 最後のヘッダを探索する。*/ 659 626 off = ip6_lasthdr(input, 0, IPPROTO_IPV6, &next); 660 627 661 628 /* 662 * ã¿ã¤ãããã¨ã©ã¼ãåãç´ãã® ICMP6 ãã±ããã®ã¨ã©ã¼ã«ã¯è¿çããªãã629 * タイプが、エラーか向け直しの ICMP6 パケットのエラーには返答しない。 663 630 */ 664 631 if (off >= 0 && next == IPPROTO_ICMPV6) { … … 674 641 } 675 642 676 /* DoS æ»æã«å¯¾ããé²å¾¡ã¯æªå®è£ 677 */ 678 679 /* 680 * éãè¿ãã¡ãã»ã¼ã¸é·ããICMPv6 ã®æ大ãã¤ãã¼ãé·ã«èª¿æ´ããã 643 /* DoS 攻撃に対する防御は未実装 */ 644 645 /* 646 * 送り返すメッセージ長を、ICMPv6 の最大ペイロード長に調整する。 681 647 * IPV6_MMTU - (IP6_HDR_SIZE + ICMP6_HDR_SIZE) 682 648 */ … … 686 652 len = input->len - IF_HDR_SIZE; 687 653 688 /* éä¿¡ç¨ã®ãããã¯ã¼ã¯ãããã¡ãç²å¾ããã*/654 /* 送信用のネットワークバッファを獲得する。*/ 689 655 if (in6_get_datagram(&output, len + ICMP6_HDR_SIZE, 0, 690 656 &ip6h->src, &in6_addr_unspecified, … … 693 659 goto buf_rel; 694 660 695 /* ICMP6 ããããè¨å®ããã*/661 /* ICMP6 ヘッダを設定する。*/ 696 662 icmp6h = GET_ICMP6_HDR(output, IF_IP6_ICMP6_HDR_OFFSET); 697 663 icmp6h->type = type; … … 699 665 icmp6h->icmp6_pptr = htonl(param); 700 666 701 /* ã¨ã©ã¼ãã¼ã¿ãè¨å®ããã*/667 /* エラーデータを設定する。*/ 702 668 memcpy(GET_ICMP6_SDU(output, IF_IP6_ICMP6_HDR_OFFSET), (uint8_t *)ip6h, len); 703 669 … … 720 686 #endif /* of #ifdef SUPPORT_MIB */ 721 687 722 /* éä¿¡ããã*/688 /* 送信する。*/ 723 689 icmp6_output(output, IF_IP6_HDR_SIZE); 724 690
Note:
See TracChangeset
for help on using the changeset viewer.