(toppers-users 3992) Re: TINETのマルチキャスト送受信について教えてください。

阿部 司 abe @ jo.tomakomai-ct.ac.jp
2012年 7月 5日 (木) 13:10:44 JST


アライブビジョンソフトウエア 高橋様

苫小牧高専の阿部です。

> 阿部先生、皆様 
> お世話になっています。 アライブビジョンソフトウエアの高橋です。

今後ともよろしくお願いします。

> TINETのマルチキャスト送受信について教えてください。
>
> 参考サイト
> http://www.geekpage.jp/programming/winsock/multicast.php
> のように、マルチキャストの送信や受信を行う場合には
>
> socketオプションでIP_MULTICAST_IFやIP_ADD_MEMBERSHIPを設定したり
> (IPv6ではIPV6_JOIN_GROUP)さらにbind()したりします。
>
> Tinetでは、どのようにすればいいでしょうか? 特に受信についてです。
>
> ソースを見て、
> if6_ether.c(111)で送信はやってくれているようなので、受信はどうするのか
> 御教授ください。
>
> さらにソースをざっと見て、
> IF_ED_CFG_ACCEPT_ALLなどいくつかの定義を有効にすれば受信可能になる
> のでしょうか? その場合はすべてのマルチキャストパケットが受信される
> という動作になるのでしょうか?
>
> 一部のプロレタリアなネットワークスタックでは、受信したいマルチキャストアドレス
> をネットワークスタックのソースに修正が必要だったものがあったので
> そのような対応の必要性についても御教授いただければ幸いです。
>
>

確認ですが、この部面ですとネットワーク層は IPv6 でしょうか?
そうであれば、IPv6 ではマルチキャスト自体は必須なので、TINET でも
サポートしています。
ただし、NDP でのみの使用を前提としており、
残念ながら、応用層までのサポートは考慮していません
(私も、マルチキャストのプログラムは未経験です)。
あと、MLD の実装も必要だと思いますが、TINET では未実装です。

以下のファイルと関数が、マルチキャストに関係しています。

ファイル tinet/netinet/udp_input.c、関数 udp_input()、関数
udp_dstaddr_accept()、
ファイル tinet/netinet6/ip6_input.c、関数 ip6_input()、
ファイル tinet/netinet6/in6_subr.c、関数 in6_lookup_mulit()、
ファイル tinet/net/if.c、関数 if_addmulti()

他にもありますが、この辺から解析をお願いします。

よろしくお願いします。

-- 
.\" 苫小牧工業高等専門学校 情報工学科 教授 阿部 司
.\" 〒059-1275 北海道苫小牧市字錦岡443番地
.\" E-mail: abe @ jo.tomakomai-ct.ac.jp  TEL/FAX: 0144-67-8937