yuuki-takeguchi
2020年3月6日 15時40分
お世話になっております。竹口と申します。
Armadillo-640にて別PCからのMulticast通信パケットを受信応答するためのアプリケーションを作成しております。
テスト動作時、既にマルチキャストグループへ参加している別PCからArmadillo宛のMulticast通信を行ったものの
armadillo側が受信できてない現象が発生しましたので投稿させていただきます。
wiresharkにて確認したところ、アプリケーション実行時にマルチキャストグループへarmadillo側がjoinするパケット自体が確認できませんでした。
該当の実装箇所は以下のとおりです。C言語で実装しております。
//ソケットの生成とバインドの実施
memset(&addr_from, 0, sizeof(addr_from));
addr_from.sin_family = AF_INET;
addr_from.sin_port = htons(1234); ※実際は別の番号を設定しておりますが便宜上ポート番号を変えております
addr_from.sin_addr.s_addr = INADDR_ANY;
sock = socket(AF_INET, SOCK_DGRAM, 0);
bind(sock, (struct sockaddr *)&addr_from, sizeof(addr_from))
//マルチキャストグループ参加
struct ip_mreq mreq;
int ttl=3;
memset(&mreq, 0, sizeof(mreq));
mreq.imr_interface.s_addr= INADDR_ANY;
mreq.imr_multiaddr.s_addr=inet_addr("224.0.0.0");
setsockopt(sock, IPPROTO_IP, IP_ADD_MEMBERSHIP, (char *)&mreq, sizeof(mreq))
setsockopt(sock, IPPROTO_IP, IP_MULTICAST_IF, (char *)&mreq.imr_interface.s_addr, sizeof(mreq.imr_interface.s_addr))
setsockopt(sock, IPPROTO_IP, IP_MULTICAST_TTL, (char *)&ttl, sizeof(ttl))
引数に代入している値についてはソケットの指定、ポート等の整合も確認しており、
各処理とも戻り値エラーなく実行できていますが上記記載の問題が発生しております。
こちらが確認できた情報としてdebianのバージョンは9.8、カーネルのバージョンは4.14-at11となっております。
カーネルコンフィグレーションに関してはNETWORKのIGMPに関連するとみられる箇所を確認しましたが初期設定のままで、
確認した限りでは問題はなさそうでした。
以下のURLにて話題に出ておりましたルーティング情報も設定するなど試行しておりましたがうまくいっていない状況です。
https://armadillo.atmark-techno.com/faq/multicast-doesnt-work
実装の抜けや必要なパッケージ、確認すべき箇所などございましたらご教授頂けないでしょうか?
通信の知識が浅いため、フォーラムで質問する以前の基本的な事柄が抜けているかもしれませんが何卒よろしくお願いします。
コメント
yuuki-takeguchi
> 佐藤です。
>
> > カーネルコンフィグレーションに関してはNETWORKのIGMPに関連するとみられる箇所を確認しましたが初期設定のままで、
> > 確認した限りでは問題はなさそうでした。
> 以下の設定は有効になっていますでしょうか。
>
> Networking support > -> Networking options > -> [*] TCP/IP networking > -> [*] IP: multicasting >
竹口です。
早速のご回答いただきありがとうございます。
ご指摘の通り該当箇所の設定を有効にしカーネルを更新したところ、
IGMPのプロトコルが確認できマルチキャストが受信できる状態になりました。
大変ありがとうございました。
at_makoto.sato
2020年3月6日 18時04分
佐藤です。
> カーネルコンフィグレーションに関してはNETWORKのIGMPに関連するとみられる箇所を確認しましたが初期設定のままで、
> 確認した限りでは問題はなさそうでした。
以下の設定は有効になっていますでしょうか。