VxWorks 5.5 で UDP マルチキャストを受信する方法
質問
VxWorks 5.5 で UDP マルチキャストを受信できません。マルチキャスト グループに参加しました。
setsockopt(soc, IPPROTO_IP, IP_ADD_MEMBERSHIP, (char *) &ipMreq, sizeof (ipMreq));
隣接する Windows マシン上の同様のコードはマルチキャストを受信します。VxWorks からマルチキャストを送信できます。ifShow() は、インターフェイスがマルチキャスト対応であることを示します。MCAST_ROUTING はカーネル設定で有効になっていますが、マルチキャストを受信できません。
編集:マルチキャストがアプリケーション層に渡されるようにするには、RealTek Ethernet ドライブ RX 構成レジスタにビットを設定する必要がありました。
#define RTL_RXCG_AM 0x04 /* Accept Multicast */
解決
Join setsockopt() 呼び出しの戻り値をチェックして、実際に成功したかどうかを確認していますか?以前、VxWorks 5.5 でマルチキャスト参加が失敗すべきときに失敗するという特定の問題がありました。この問題を解決するには、WindRiver から新しいライブラリを入手する必要があったと思います。
編集: マルチキャストを VxWorks で動作させるための特別なトリックは私が知っている限りではありません。標準の BSD ソケット操作を使用する必要があります。インターフェイスがユニキャスト トラフィックを適切に受信でき、ネットワーク アナライザー (Wireshark など) でマルチキャスト JOIN が送信され、受信マルチキャスト パケットが正しく形成されていることが示された場合は、ドライバーの問題が疑われるでしょう。WindRiver のサポートは、これまでこの種の問題に関して非常に役に立ちました。そのレベルのサポートを受けるためのサポート契約を結んでいるかどうかはわかりません。