uNet3 マルチキャスト受信サンプル

返信する
アバター
eForce技術担当
記事: 178
登録日時: 2014年4月24日(木) 14:18

uNet3 マルチキャスト受信サンプル

投稿記事 by eForce技術担当 » 2017年10月09日(月) 11:35

サンプルプログラムを元に、uNet3でマルチキャストパケットを受信に必要な設定を説明します。
サンプルプログラムはμ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
■サンプルプログラム

↓のファイルをダウンロードしてください。
sample_llmnr.zip
(3.35 KiB) ダウンロード数: 220 回
LLMNR(Link-Local Multicast Name Resolution)のResponderとして動作します。
サンプルプログラムはマルチキャストパケットの受信を説明するためのものなので、LLMNRのResponderの機能は簡易的です。

■サンプルプログラム概要
LLMNRはサブネット内の名前解決のためのプロトコルで、Sender(今回の場合は通信相手)がホスト名からIPアドレスを取得します。
Sender(通信相手)からResponder(ターゲット)へ送信されるパケットは224.0.0.252:5355宛てのマルチキャストパケットです。
主にWindowsで使用されています。LLMNRのパケットの形式はDNSとほぼ同じです。
LLMNR説明.JPG

■サンプルプログラムのビルド

(1) サンプルプログラムのファイルをビルド対象としてください。
(2) コンフィグレータで、次の設定を追加してください。

EthernetのFilter設定をMulticastに設定して、イーサネットドライバがマルチキャストを受信できるようにしてください。
コンフィグレータ_Ethernet_Filter.jpg
タスクを一つ追加してください。
コンフィグレータ_タスク.jpg
インタフェースをID_NETIF_DEV1に変更してください。
(または、ソースコードのID_NETIF_DEV1の記述をご利用のインタフェースのIDへ書き換えてください。)
コンフィグレータ_インタフェースのID.jpg
ソケットを追加してください。
コンフィグレータ_ソケット.jpg

(3) コンフィグレータからソースコードを生成してください。
(4) net_setup()実行後に、LLMNRのタスクを起動するコードを追加してください。

コード: 全て選択

net_setup();
sta_tsk(ID_LLMNR_TSK, 0);
(5) ご利用の開発環境でビルドしてください。

■サンプルプログラムの動作確認
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コマンド.jpg
pingの応答があれば、正常に動作しています。
Wiresharkでパケットをキャプチャすると、次のようになります。
LLMNR_packet.jpg

返信する