(toppers-users 4113) Re: ICMP エラーメッセージの宛先 IP アドレスのバイトオーダーについて
阿部 司
abe @ jo.tomakomai-ct.ac.jp
2013年 7月 2日 (火) 15:26:58 JST
木村様
苫小牧高専の阿部です。
情報ありがとうございます。
> ASP用 TINET 1.5.2 (2011-05-11) を、Renesas の RX62N (Little
> Endian, IPV4, ethernet) に移植しています。
>
> 現在のところ、DHCP、DNS、HTTP の各クライアントと、FTP の
> サーバが動作しています。
>
> 最近気付いたのですが、Destination Port Unreachable
> (ICMP4_UNREACH_PORT) の ICMP エラーメッセージを送信する際、
> IP ヘッダ内の宛先 IP アドレスが、ホストバイトオーダーで出力さ
> れているようです。
>
> 私なりに原因を探ったところ、netinet/ip_icmp.c 内の関数
> icmp_error () 内の処理にて、関数 in4_get_datagram () を呼び
> 出す際の引数 T_IN4_ADDR *dstaddr に対応するものとして、受信
> した IPv4 データグラム内の送信元アドレス &ip4h->src をそのま
> ま、即ち、ネットワークバイトオーダーで渡しているのが理由では
> ないかと推測しています。
>
> ip4h->src をコピーして、ntohl() したアドレスを、上述の関数
> in4_get_datagram () に渡すように変更してみたところ、ICMP エ
> ラーメッセージの IP ヘッダ内宛先 IP アドレスが、期待の値にな
> ることを確認しました。この変更部分コードは、おおよそ下記のよ
> うな感じです。
>
> T_IN4_ADDR addr;
>
> addr = ntohl(ip4h->src);
> in4_get_datagram(..., &addr, ...);
>
> 但し、icmp_error () が呼び出される全ての状況を考慮したもの
> ではないため、自信がありません。
>
> アドバイスを頂ければ幸いです。
>
>
確認しました。
修正内容は、御指摘の通りです。
修正版の配布は、他の件もありますので、時間を頂けると幸いです。
今後とも、よろしくお願いいたします。
--
.\" 苫小牧工業高等専門学校 情報工学科 教授 阿部 司
.\" 〒059-1275 北海道苫小牧市字錦岡443番地
.\" E-mail: abe @ jo.tomakomai-ct.ac.jp TEL/FAX: 0144-67-8937