サンプルプログラムはμC3/Compact向けですが、マルチキャスト受信の手順はμC3/Standardでも
同じです。
■マルチキャスト受信のために必要な設定
μNet3でマルチキャストを受信するために必要な設定を説明します。
・イーサネットドライバの設定
・マルチキャストグループのIPアドレス登録
イーサネットドライバの設定
次の記事を参照してください。
マルチキャスト宛のパケットが受信できない
viewtopic.php?f=13&t=114
マルチキャストグループのIPアドレス登録
uNet3のAPI net_cfg( )を使用してマルチキャストグループのIPアドレスを登録します。
net_cfg( )の引数
第1引数 : 設定するデバイスのデバイス番号
第2引数 : NET_MCAST_JOIN
第3引数 : IPアドレス
例 224.0.0.252宛てのパケットを受信する場合
コード: 全て選択
void llmnr_tsk(VP_INT exinf)
{
UW mcast_ip = ip_aton("224.0.0.252");
/* マルチキャストグループのIPアドレスを登録 */
/* パラメータコード NET_MCAST_JOINでnet_cfg( )を実行 */
#if 1 /* ここのコードがないと、IPアドレス宛のマルチキャストが受信できません*/
ercd = net_cfg(
ID_NETIF_DEV1, /* デバイス番号 */
NET_MCAST_JOIN, /* パラメータコード */
(VP)mcast_ip /* IPアドレス */
);
if (ercd != E_OK) {
return;
}
#endif
↓のファイルをダウンロードしてください。 LLMNR(Link-Local Multicast Name Resolution)のResponderとして動作します。
サンプルプログラムはマルチキャストパケットの受信を説明するためのものなので、LLMNRのResponderの機能は簡易的です。
■サンプルプログラム概要
LLMNRはサブネット内の名前解決のためのプロトコルで、Sender(今回の場合は通信相手)がホスト名からIPアドレスを取得します。
Sender(通信相手)からResponder(ターゲット)へ送信されるパケットは224.0.0.252:5355宛てのマルチキャストパケットです。
主にWindowsで使用されています。LLMNRのパケットの形式はDNSとほぼ同じです。
■サンプルプログラムのビルド
(1) サンプルプログラムのファイルをビルド対象としてください。
(2) コンフィグレータで、次の設定を追加してください。
EthernetのFilter設定をMulticastに設定して、イーサネットドライバがマルチキャストを受信できるようにしてください。
タスクを一つ追加してください。
インタフェースをID_NETIF_DEV1に変更してください。
(または、ソースコードのID_NETIF_DEV1の記述をご利用のインタフェースのIDへ書き換えてください。)
ソケットを追加してください。
(3) コンフィグレータからソースコードを生成してください。
(4) net_setup()実行後に、LLMNRのタスクを起動するコードを追加してください。
コード: 全て選択
net_setup();
sta_tsk(ID_LLMNR_TSK, 0);
■サンプルプログラムの動作確認
Windows PC(通信相手として使用)を用意してください。
Windows PCとターゲットが同じネットワークとなるように設定してください。
ネットワーク構成例 :
Windows PC
IPアドレス 192.168.10.100
サブネットマスク 255.255.255.0
ターゲット
IPアドレス 192.168.10.104
サブネットマスク 255.255.255.0
(1)「サンプルプログラムのビルド」で生成したオブジェクトをターゲットへロードして実行してください。
(ご利用の開発環境、ハードウェアにより異なります)
(2) Windows PCのコマンドプロンプトを起動して、ターゲットのホスト名(TEST_LLMNR)へpingを実行してください。
pingの応答があれば、正常に動作しています。
Wiresharkでパケットをキャプチャすると、次のようになります。