(toppers-users 4001) Re: TINETのマルチキャスト送受信について教えてください。
高橋和浩@nifty
takahashi_kazuhiro @ nifty.com
2012年 7月 18日 (水) 13:23:49 JST
阿部先生、MLの皆様
お世話になっております。アライブビジョンソフトウエアの高橋です。
tinetのマルチキャスト受信のほうですが、少し時間がかかっていましたが、
なんとかできるようになりました。
tinetのソースを「変更部分」のように変更すれば受信可能になりました。
あまり、役に立つ情報でもないかもしれませんが、一応情報としてあげておきます。
試験環境
相手 linux fedora core5 udpIPV6マルチキャスト送信プログラム(自作)
ターゲット akih8_3069f_lan usrv6 にポート番号のみ変更(実験に特に変更は必要ないです)
変更部分---------------------------------------------------------------------------
tinet\net\ethernet.h
#define MAX_IF_MADDR_CNT 3 /* 2-->3 インタフェースのマルチキャストアドレス配列の最大サイズ */
#define IF_MADDR_INIT { { { 0, 0, 0, 0, 0, 0 } }, { { 0, 0, 0, 0, 0, 0 } }, { { 0, 0, 0, 0, 0, 0 } } } //2-->3組
tinet\netinet6\in6.h
#define IPV6_ADDR_INT32_MDNS ULONG_C(0x000000FB) //Big
#define IPV6_ADDR_INT32_MDNS ULONG_C(0xFB000000) //Little
tinet\netinet6\in6_var.h
#define IPV6_MADDR_IX_MDNS 2 //追加
#define IPV6_MADDR_IX_EXTRA 3 //2-->3
tinet\netinet6\in6.c in6_addr2maix () 以下のように修正
if (addr->s6_addr8[11] == 0x01 && addr->s6_addr8[12] == 0xff)
return IPV6_MADDR_IX_SOL_NODE;
else {
if (addr->s6_addr8[15] == 0xfb)
return(IPV6_MADDR_IX_MDNS);
else
return IPV6_MADDR_IX_LL_ALL_NODE;
}
}
tinet\netinet6\in6.c in6_update_ifa ()
/* 全ノード・リンクローカル・マルチキャストアドレスを登録する。*/
llsol.s6_addr32[2] = 0x00000000;
// llsol.s6_addr32[3] = IPV6_ADDR_INT32_ONE; //削除
llsol.s6_addr32[3] = IPV6_ADDR_INT32_MDNS; //追加
if ((error = in6_addmulti(ifp, &llsol)) != E_OK)
return error;
llsol.s6_addr32[3] = IPV6_ADDR_INT32_ONE; //追加
if ((error = in6_addmulti(ifp, &llsol)) != E_OK) //追加
return error; //追加
--------------------------------------------------------------------------------------------
コメント等ありがとうございました。
また、お聞きしたいことがでてくると思いますので、これからもよろしく
お願いします。
---
アライブビジョンソフトウエア株式会社
高橋和浩
673-0005兵庫県明石市小久保2-2-7幹線ビル4F
Email:takahashi_kazuhiro @ nifty.com
http://homepage3.nifty.com/ALVS/