(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