次のページ 前のページ 目次へ

6. IPv6のアプリケーションの情報

6.1 どのようにしてIPv6のコードを書いたり移植したりするか

IPv4/IPv6 用ソフトウェア

Matt Aarnio の質問:

もしも可能なら、混在した環境ではソフトをどのようにすればいいのか
おしえてください。
これはすなわち、IPv4 だけのシステムでも、新しいファンシーなウィジェット
ルーチンをすべて備えたIPv6のシステムでもコンパイルできるソフトウェアです。
少なくとも現在においては、ほとんどすべてのアプリケーションがこの分野に
入るものと、私は確信しています。
(それらのシステムにはNRLのライブラリはいれていません)

Philip Blundell の答え:

2つの問題があります。ひとつは、どうやってIPv6のつかえる新しい環境と
古いIPv4だけのシステムの両方でコンパイルできるソフトウェアを作るか。
次に一度あなたがコンパイルしたコードが、IPv6、IPv4、あるいは混在に
かかわらずおなじコードが動作させることによって問題が生じることです。

2つ目を先にいきましょう。
一番よいのはgetaddrinfo() を名前探索に使うことです。
これはアドレスファミリーとアドレス構造をかえします。すると、あなたは
ソケットのソートを作るのにアドレスファミリを socket()に入れることが
できます。もしAAAAレコードを聞いたら、あなたは AF_INET6 と 
struct sockaddr_in6 を得ます。(AレコードのAF_INETと struct sockaddrの
かわりに)。getaddrinfo() は getnameinfo() のかわりになるもので、
glibc 2.1にあります。

これらの関数によって、アドレスファミリをつかうことを気にせず、
sockaddr_inやsockaddr_in6を無視できます。
これであなたのコードはIPv6でも、IPv4でも、混在環境でもうれしいでしょう。
たとえばinet6-appsのソースがそうですから、見てください。

ひとつ目の問題はやっかいです。古いバージョンのCは getaddrinfo() が
ありません。そして libinet6で提供されています。
あなたはおそらくコンパイル時に #ifdef などをつかった多くのオプションを
用意して、getaddrinfo()と、以前の名前探索関数をわけねばなりません。

getaddrinfo()はNRLに特化しているというより、POSIXの関数ですので
移植可能なコードとしても問題ないでしょう。

6.2 IPv6 のアプリケーション

IPv6に移植する人のためのメーリングリストはありますか?

あります。bound@zk3.dec.com から、回答をいただきました。参加するには ipv6imp-request@munnari.oz.au まで。


次のページ 前のページ 目次へ