Changeset 389 for azure_iot_hub/trunk/asp3_dcre/tinet/netinet6/icmp6.c
- Timestamp:
- May 22, 2019, 10:03:37 PM (5 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
azure_iot_hub/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
r388 r389 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$ … … 157 145 158 146 /* 159 * å¤æ°147 * 変数 160 148 */ 161 149 … … 163 151 164 152 /* 165 * SNMP 㮠管çæ 166 å ±ãã¼ã¹ (MIB) 153 * SNMP の 管理情報ベース (MIB) 167 154 */ 168 155 … … 172 159 173 160 /* 174 * icmp6_output -- ICMP6 ãã±ãããéä¿¡ããã161 * icmp6_output -- ICMP6 パケットを送信する。 175 162 */ 176 163 … … 184 171 185 172 /* 186 * å®å 187 ã¢ãã¬ã¹ã«ãµããããéä¿¡å 188 ã¢ãã¬ã¹ãã 189 * ãããã¯ã¼ã¯ã¤ã³ã¿ãã§ã¼ã¹ããæ¢ç´¢ãã¦å©ç¨ããã 173 * 宛先アドレスにふさわしい送信元アドレスを、 174 * ネットワークインタフェースから探索して利用する。 190 175 */ 191 176 ip6h = GET_IP6_HDR(output); … … 199 184 icmp6h = GET_ICMP6_HDR(output, off); 200 185 201 /* ãã§ãã¯ãµã ãè¨ç®ããã*/186 /* チェックサムを計算する。*/ 202 187 icmp6h->sum = 0; 203 188 icmp6h->sum = in6_cksum(output, IPPROTO_ICMPV6, (uint8_t*)icmp6h - output->buf, 204 189 ntohs(ip6h->plen) - (off - IF_IP6_HDR_SIZE)); 205 190 206 /* éä¿¡ããã*/191 /* 送信する。*/ 207 192 NET_COUNT_ICMP6(net_count_icmp6[NC_ICMP6_OUT_OCTETS], 208 193 output->len - GET_IF_IP6_HDR_SIZE(output)); … … 213 198 214 199 /* 215 * icmp6_echo_request -- ã¨ã³ã¼è¦æ±ãåä¿¡ããã¨ãã®å¦ç200 * icmp6_echo_request -- エコー要求を受信したときの処理 216 201 */ 217 202 … … 231 216 232 217 /* 233 * IPv6 ããã㨠ICMPv6 ãããéã®æ¡å¼µããããé¤å»ããã218 * IPv6 ヘッダと ICMPv6 ヘッダ間の拡張ヘッダを除去する。 234 219 */ 235 220 diff = off - IF_IP6_HDR_SIZE; 236 221 if (diff > 0) { 237 /* ICMPv6 ããããåã«è©°ããã*/222 /* ICMPv6 ヘッダを前に詰める。*/ 238 223 memmove(input->buf + IF_IP6_HDR_SIZE, input->buf + off, input->len - off); 239 224 off = IF_IP6_HDR_SIZE; 240 225 241 /* ãã¤ãã¼ãé·ã調æ´ããã*/226 /* ペイロード長を調整する。*/ 242 227 ip6h->plen = htons(ntohs(ip6h->plen) - diff); 243 228 input->len -= diff; … … 252 237 253 238 /* 254 * ã¡ãã»ã¼ã¸ã®åãã¨ã³ã¼è¦æ± (128) ãã255 * ã¨ã³ã¼å¿ç (129) ã«å¤æ´ãã¦éãè¿ãã239 * メッセージの型をエコー要求 (128) から 240 * エコー応答 (129) に変更して送り返す。 256 241 */ 257 242 icmp6h->type = ICMP6_ECHO_REPLY; 258 243 259 /* IPv6 ãããã®çºä¿¡å 260 ã¢ãã¬ã¹ã¨å®å 261 ã¢ãã¬ã¹ãå 262 ¥æ¿ããã*/ 244 /* IPv6 ヘッダの発信元アドレスと宛先アドレスを入替える。*/ 263 245 memcpy(&dst, &ip6h->dst, sizeof(T_IN6_ADDR)); 264 246 memcpy(&ip6h->dst, &ip6h->src, sizeof(T_IN6_ADDR)); … … 266 248 267 249 /* 268 * å 269 ã®å®å 270 ã¢ãã¬ã¹ããã«ããã£ã¹ãã®å ´åã¯ã 271 * å®å 272 ã¢ãã¬ã¹ã«ãµããããéä¿¡å 273 ã¢ãã¬ã¹ãã 274 * ãããã¯ã¼ã¯ã¤ã³ã¿ãã§ã¼ã¹ããæ¢ç´¢ãã¦å©ç¨ããã 250 * 元の宛先アドレスがマルチキャストの場合は、 251 * 宛先アドレスにふさわしい送信元アドレスを、 252 * ネットワークインタフェースから探索して利用する。 275 253 */ 276 254 if (IN6_IS_ADDR_MULTICAST(&dst)) { … … 283 261 } 284 262 285 /* 次ãããã¨ããããªããããè¨å®ããã*/263 /* 次ヘッダとホップリミットを設定する。*/ 286 264 ip6h->next = IPPROTO_ICMPV6; 287 265 ip6h->hlim = IP6_DEFTTL; 288 266 289 /* ãã§ãã¯ãµã ãè¨ç®ããã*/267 /* チェックサムを計算する。*/ 290 268 icmp6h->sum = 0; 291 269 icmp6h->sum = in6_cksum(input, IPPROTO_ICMPV6, (uint8_t*)icmp6h - input->buf, 292 270 ntohs(ip6h->plen) - (off - IF_IP6_HDR_SIZE)); 293 271 294 /* éä¿¡ããã*/272 /* 送信する。*/ 295 273 NET_COUNT_ICMP6(net_count_icmp6[NC_ICMP6_OUT_OCTETS], 296 274 input->len - GET_IF_IP6_HDR_SIZE(input)); … … 302 280 303 281 /* 304 * icmp6_notify_error -- ã¨ã©ã¼ãéç¥ããã282 * icmp6_notify_error -- エラーを通知する。 305 283 */ 306 284 … … 314 292 len = input->len - poff; 315 293 316 /* ãã¼ã¿ã°ã©ã é·ã ICMP6 ãããé· + IP6 ãããé·ä»¥ä¸ãªãä½ãããªãã*/294 /* データグラム長が ICMP6 ヘッダ長 + IP6 ヘッダ長以下なら何もしない。*/ 317 295 if (len < ICMP6_HDR_SIZE + IP6_HDR_SIZE) 318 296 return; … … 320 298 icmp6h = GET_ICMP6_HDR(input, poff); 321 299 322 /* æçµããããæ¢ç´¢ããã*/300 /* 最終ヘッダを探索する。*/ 323 301 loff = ip6_lasthdr(input, poff + ICMP6_HDR_SIZE, IPPROTO_IPV6, &next); 324 302 325 /* æçµãããã TCP/UDP ã®ã¿å¯¾å¿ããã*/303 /* 最終ヘッダが TCP/UDP のみ対応する。*/ 326 304 if (loff >= 0 && (next == IPPROTO_TCP || next == IPPROTO_UDP)) { 327 305 … … 354 332 355 333 /* 356 * icmp6_mtudisc_update -- Path MTU ãæ´æ°ããã334 * icmp6_mtudisc_update -- Path MTU を更新する。 357 335 */ 358 336 … … 379 357 380 358 /* 381 * icmp6_redirect_input -- åãç´ãã¡ãã»ã¼ã¸ã®å¦ç359 * icmp6_redirect_input -- 向け直しメッセージの処理 382 360 */ 383 361 … … 398 376 399 377 /* 400 * IP ãããã®ãã§ãã¯ã以ä¸ã®å ´åã¯ç ´æ£ããã401 * ã»ãªã³ã¯ãã¼ã«ã«ä»¥å¤ããéããã¦ããã¡ãã»ã¼ã¸402 * ã»ããããªãããã IPV6_MAXHLIM (255) 以å¤378 * IP ヘッダのチェック、以下の場合は破棄する。 379 * ・リンクローカル以外から送られてきたメッセージ 380 * ・ホップリミットが IPV6_MAXHLIM (255) 以外 403 381 */ 404 382 if (!IN6_IS_ADDR_LINKLOCAL(&ip6h->src) || ip6h->hlim != IPV6_MAXHLIM) … … 407 385 rdh = (T_ND_REDIRECT_HDR *)(input->buf + off); 408 386 409 /* åãç´ãã®çµç¹ã¢ãã¬ã¹ããã«ããã£ã¹ãã¢ãã¬ã¹ã®å ´åã¯ç ´æ£ããã*/387 /* 向け直しの終点アドレスがマルチキャストアドレスの場合は破棄する。*/ 410 388 if (IN6_IS_ADDR_MULTICAST(&rdh->dst)) 411 389 goto err_ret; 412 390 413 /* ã¿ã¼ã²ããã¢ãã¬ã¹ãçµè·¯è¡¨ã«ç»é²ããã¦ããããã§ãã¯ããã*/391 /* ターゲットアドレスが経路表に登録されているかチェックする。*/ 414 392 if ((gw = in6_rtalloc(ifp, &rdh->dst)) != NULL) { 415 /* GW ã¢ãã¬ã¹ã¨éä¿¡å 416 ã¢ãã¬ã¹ãç°ãªã£ã¦ããã°ç ´æ£ããã*/ 393 /* GW アドレスと送信元アドレスが異なっていれば破棄する。*/ 417 394 if (!IN6_ARE_ADDR_EQUAL(gw, &ip6h->src)) 418 395 goto err_ret; 419 396 } 420 else /* çµè·¯è¡¨ã«ãªããã°ç ´æ£ããã*/397 else /* 経路表になければ破棄する。*/ 421 398 goto err_ret; 422 399 … … 424 401 425 402 /* 426 * ã¿ã¼ã²ããã¢ãã¬ã¹ããªã³ã¯ãã¼ã«ã«ã¢ãã¬ã¹ã§ããã°ã427 * ã¿ã¼ã²ããã¯ã«ã¼ã¿403 * ターゲットアドレスがリンクローカルアドレスであれば、 404 * ターゲットはルータ 428 405 */ 429 406 if (IN6_IS_ADDR_LINKLOCAL(&rdh->target)) … … 431 408 432 409 /* 433 * ã¿ã¼ã²ããã¢ãã¬ã¹ã¨çµç¹ã¢ãã¬ã¹ãåä¸ã§ããã°ããªã³ãªã³ã¯410 * ターゲットアドレスと終点アドレスが同一であれば、オンリンク 434 411 */ 435 412 if (IN6_ARE_ADDR_EQUAL(&rdh->target, &rdh->dst)) … … 437 414 438 415 /* 439 * ã«ã¼ã¿ã§ãããªã³ãªã³ã¯ã§ããªããã°ã¨ã©ã¼416 * ルータでも、オンリンクでもなければエラー 440 417 */ 441 418 if (!router && !onlink) 442 419 goto err_ret; 443 420 444 /* è¿é£æ¢ç´¢ãªãã·ã§ã³ã®ãªãã»ãããè¨é²ããã*/421 /* 近隣探索オプションのオフセットを記録する。*/ 445 422 if (nd6_options(nd_opt_off, input->buf + off + ND_REDIRECT_HDR_SIZE, 446 423 input->len - (off + ND_REDIRECT_HDR_SIZE)) != E_OK) 447 424 goto err_ret; 448 425 449 /* è¿é£æ¢ç´¢ãªãã·ã§ã³ (åãç´ãã®ã«ã¼ã¿ã®ãªã³ã¯ã¢ãã¬ã¹) */426 /* 近隣探索オプション (向け直しのルータのリンクアドレス) */ 450 427 if (nd_opt_off[ND_OPT_OFF_ARRAY_IX(ND_OPT_TARGET_LINKADDR)]) { 451 428 opth = (T_ND_OPT_HDR *)((uint8_t *)(input->buf + off + ND_REDIRECT_HDR_SIZE) + 452 429 nd_opt_off[ND_OPT_OFF_ARRAY_IX(ND_OPT_TARGET_LINKADDR)] - 8); 453 /* 注æ: ãªãã·ã§ã³ãªãã»ããé 454 åã«ã¯ããªãã»ãã + 8 ãè¨å®ããã¦ããã*/ 430 /* 注意: オプションオフセット配列には、オフセット + 8 が設定されている。*/ 455 431 lladdr = (uint8_t *)(opth + 1); 456 432 lladdr_len = (opth->len << 3); … … 458 434 459 435 /* 460 * ãããã¯ã¼ã¯ã¤ã³ã¿ãã§ã¼ã¹ã®ã¢ãã¬ã¹é·ãä¸è´ããªããã°ã¨ã©ã¼436 * ネットワークインタフェースのアドレス長が一致しなければエラー 461 437 */ 462 438 if (lladdr && lladdr_len != ((sizeof(T_IF_ADDR) + sizeof(T_ND_OPT_HDR) + 7) & ~7)) 463 439 goto err_ret; 464 440 465 /* åãç´ãã®ã«ã¼ã¿ã®ãªã³ã¯ã¢ãã¬ã¹ãè¿é£ãã£ãã·ã¥ã«ç»é²ããã*/441 /* 向け直しのルータのリンクアドレスを近隣キャッシュに登録する。*/ 466 442 nd6_cache_lladdr(ifp, &rdh->target, (T_IF_ADDR *)lladdr, ND_REDIRECT, 467 443 onlink ? ND_REDIRECT_ONLINK : ND_REDIRECT_ROUTER); 468 444 469 /* ã«ã¼ãã£ã³ã°è¡¨ã«ç»é²ããã*/445 /* ルーティング表に登録する。*/ 470 446 in6_rtredirect(&rdh->target, &rdh->dst, 128, IN_RTF_REDIRECT, TMO_IN_REDIRECT); 471 447 … … 482 458 483 459 /* 484 * icmp6_input -- ICMP6 ã®å 485 ¥åé¢æ° 460 * icmp6_input -- ICMP6 の入力関数 486 461 */ 487 462 … … 500 475 NET_COUNT_MIB(icmp6_ifstat.ipv6IfIcmpInMsgs, 1); 501 476 502 /* ICMP6 ãããã®é·ãããã§ãã¯ããã*/477 /* ICMP6 ヘッダの長さをチェックする。*/ 503 478 len = input->len - off; 504 479 if (len < ICMP6_HDR_SIZE) { … … 511 486 icmp6h = GET_ICMP6_HDR(input, off); 512 487 513 /* ãã§ãã¯ãµã ãè¨ç®ããã*/488 /* チェックサムを計算する。*/ 514 489 if ((in6_cksum(input, IPPROTO_ICMPV6, off, ntohs(ip6h->plen) - (off - IF_IP6_HDR_SIZE)) & 0xffff) != 0) { 515 490 NET_COUNT_ICMP6(net_count_icmp6[NC_ICMP6_IN_ERR_PACKETS], 1); … … 520 495 code = icmp6h->code; 521 496 522 /* ã¡ãã»ã¼ã¸ã®åã«ããåå²ããã*/497 /* メッセージの型により分岐する。*/ 523 498 switch (icmp6h->type) { 524 499 525 case ICMP6_DST_UNREACH: /* å®å 526 å°éä¸å¯è½ */ 500 case ICMP6_DST_UNREACH: /* 宛先到達不可能 */ 527 501 NET_COUNT_MIB(icmp6_ifstat.ipv6IfIcmpInDestUnreachs, 1); 528 502 icmp6_notify_error(input, off); 529 503 break; 530 504 531 case ICMP6_ECHO_REQUEST: /* ã¨ã³ã¼è¦æ±*/505 case ICMP6_ECHO_REQUEST: /* エコー要求 */ 532 506 icmp6_echo_request(input, off); 533 507 return IPPROTO_DONE; 534 508 break; 535 509 536 case ICMP6_ECHO_REPLY: /* ã¨ã³ã¼å¿ç*/510 case ICMP6_ECHO_REPLY: /* エコー応答 */ 537 511 538 512 #ifdef ICMP_CFG_CALLBACK_ECHO_REPLY … … 544 518 break; 545 519 546 case ND_ROUTER_ADVERT: /* ã«ã¼ã¿éç¥*/520 case ND_ROUTER_ADVERT: /* ルータ通知 */ 547 521 NET_COUNT_MIB(icmp6_ifstat.ipv6IfIcmpInRouterAdvertisements, 1); 548 522 if (code != 0 || len < ROUTER_ADVERT_HDR_SIZE) … … 552 526 break; 553 527 554 case ND_NEIGHBOR_SOLICIT: /* è¿é£è¦è«*/528 case ND_NEIGHBOR_SOLICIT: /* 近隣要請 */ 555 529 NET_COUNT_MIB(icmp6_ifstat.ipv6IfIcmpInNeighborSolicits, 1); 556 530 if (code != 0 || len < NEIGHBOR_SOLICIT_HDR_SIZE) … … 560 534 break; 561 535 562 case ND_NEIGHBOR_ADVERT: /* è¿é£éç¥*/536 case ND_NEIGHBOR_ADVERT: /* 近隣通知 */ 563 537 NET_COUNT_MIB(icmp6_ifstat.ipv6IfIcmpInNeighborAdvertisements, 1); 564 538 if (code != 0 || len < NEIGHBOR_ADVERT_HDR_SIZE) … … 568 542 break; 569 543 570 case ND_REDIRECT: /* åãç´ã*/544 case ND_REDIRECT: /* 向け直し */ 571 545 NET_COUNT_MIB(icmp6_ifstat.ipv6IfIcmpInRedirects, 1); 572 546 … … 592 566 break; 593 567 594 case ICMP6_PACKET_TOO_BIG: /* ãã±ããã大ããããã*/568 case ICMP6_PACKET_TOO_BIG: /* パケットが大きすぎる。 */ 595 569 596 570 #if NUM_IN6_HOSTCACHE_ENTRY > 0 … … 603 577 break; 604 578 605 case ICMP6_TIME_EXCEEDED: /* TTL ãè¶ 606 éããã */ 579 case ICMP6_TIME_EXCEEDED: /* TTL を超過した。 */ 607 580 NET_COUNT_MIB(icmp6_ifstat.ipv6IfIcmpInTimeExcds, 1); 608 581 break; 609 582 610 case ICMP6_PARAM_PROB: /* IPv6 ããããä¸æ£ã*/583 case ICMP6_PARAM_PROB: /* IPv6 ヘッダが不正。 */ 611 584 NET_COUNT_MIB(icmp6_ifstat.ipv6IfIcmpInParmProblems, 1); 612 585 break; 613 586 614 case MLD_LISTENER_QUERY: /* ãã«ããã£ã¹ãåä¿¡è 615 ç 616 §ä¼ */ 617 case MLD_LISTENER_REPORT: /* ãã«ããã£ã¹ãåä¿¡è 618 å ±å */ 619 case MLD_LISTENER_DONE: /* ãã«ããã£ã¹ãåä¿¡è 620 çµäº */ 621 case ND_ROUTER_SOLICIT: /* ã«ã¼ã¿è¦è« */ 622 case ICMP6_ROUTER_RENUMBERING: /* ã«ã¼ã¿çªå·åè¨å® */ 623 case ICMP6_FQDN_QUERY: /* FQDN ç 624 §ä¼ */ 625 case ICMP6_FQDN_REPLY: /* FQDN å¿ç */ 587 case MLD_LISTENER_QUERY: /* マルチキャスト受信者照会 */ 588 case MLD_LISTENER_REPORT: /* マルチキャスト受信者報告 */ 589 case MLD_LISTENER_DONE: /* マルチキャスト受信者終了 */ 590 case ND_ROUTER_SOLICIT: /* ルータ要請 */ 591 case ICMP6_ROUTER_RENUMBERING: /* ルータ番号再設定 */ 592 case ICMP6_FQDN_QUERY: /* FQDN 照会 */ 593 case ICMP6_FQDN_REPLY: /* FQDN 応答 */ 626 594 syslog(LOG_INFO, "[ICMP6] unsupported type: %d.", icmp6h->type); 627 595 break; … … 640 608 641 609 /* 642 * icmp6_error -- ICMP6 ã¨ã©ã¼éä¿¡é¢æ°610 * icmp6_error -- ICMP6 エラー送信関数 643 611 */ 644 612 … … 655 623 656 624 /* 657 * å®å 658 ã¢ãã¬ã¹ãããã«ããã£ã¹ãã®å ´åã¯ã 659 * 以ä¸ã®æ¡ä»¶ä»¥å¤ã®ã¨ãã¯å¦çãè¡ããªãã 625 * 宛先アドレスが、マルチキャストの場合は、 626 * 以下の条件以外のときは処理を行わない。 660 627 * 661 * ã»ãã¼ã¿ã°ã©ã ã大ããããã662 * ã»IPv6 ãããã®ä¸æ£ã§ããªãã·ã§ã³ãèªèã§ããªãã628 * ・データグラムが大きすぎる。 629 * ・IPv6 ヘッダの不正で、オプションが認識できない。 663 630 */ 664 631 if (IN6_IS_ADDR_MULTICAST(&ip6h->dst) && … … 668 635 669 636 /* 670 * å§ç¹ã¢ãã¬ã¹ãã以ä¸ã®å ´åã¯å¦çãè¡ããªãã637 * 始点アドレスが、以下の場合は処理を行わない。 671 638 * 672 * ã»ç¡æå®673 * ã»ãã«ããã£ã¹ã639 * ・無指定 640 * ・マルチキャスト 674 641 */ 675 642 if (IN6_IS_ADDR_UNSPECIFIED(&ip6h->src) || … … 677 644 goto buf_rel; 678 645 679 /* æå¾ã®ããããæ¢ç´¢ããã*/646 /* 最後のヘッダを探索する。*/ 680 647 off = ip6_lasthdr(input, 0, IPPROTO_IPV6, &next); 681 648 682 649 /* 683 * ã¿ã¤ãããã¨ã©ã¼ãåãç´ãã® ICMP6 ãã±ããã®ã¨ã©ã¼ã«ã¯è¿çããªãã650 * タイプが、エラーか向け直しの ICMP6 パケットのエラーには返答しない。 684 651 */ 685 652 if (off >= 0 && next == IPPROTO_ICMPV6) { … … 695 662 } 696 663 697 /* DoS æ»æã«å¯¾ããé²å¾¡ã¯æªå®è£ 698 */ 699 700 /* 701 * éãè¿ãã¡ãã»ã¼ã¸é·ããICMPv6 ã®æ大ãã¤ãã¼ãé·ã«èª¿æ´ããã 664 /* DoS 攻撃に対する防御は未実装 */ 665 666 /* 667 * 送り返すメッセージ長を、ICMPv6 の最大ペイロード長に調整する。 702 668 * IPV6_MMTU - (IP6_HDR_SIZE + ICMP6_HDR_SIZE) 703 669 */ … … 707 673 len = input->len - IF_HDR_SIZE; 708 674 709 /* éä¿¡ç¨ã®ãããã¯ã¼ã¯ãããã¡ãç²å¾ããã*/675 /* 送信用のネットワークバッファを獲得する。*/ 710 676 if (in6_get_datagram(&output, len + ICMP6_HDR_SIZE, 0, 711 677 &ip6h->src, &in6_addr_unspecified, … … 714 680 goto buf_rel; 715 681 716 /* ICMP6 ããããè¨å®ããã*/682 /* ICMP6 ヘッダを設定する。*/ 717 683 icmp6h = GET_ICMP6_HDR(output, IF_IP6_ICMP6_HDR_OFFSET); 718 684 icmp6h->type = type; … … 720 686 icmp6h->icmp6_pptr = htonl(param); 721 687 722 /* ã¨ã©ã¼ãã¼ã¿ãè¨å®ããã*/688 /* エラーデータを設定する。*/ 723 689 memcpy(GET_ICMP6_SDU(output, IF_IP6_ICMP6_HDR_OFFSET), (uint8_t *)ip6h, len); 724 690 … … 741 707 #endif /* of #ifdef SUPPORT_MIB */ 742 708 743 /* éä¿¡ããã*/709 /* 送信する。*/ 744 710 icmp6_output(output, IF_IP6_HDR_SIZE); 745 711
Note:
See TracChangeset
for help on using the changeset viewer.