バックナンバーはこちら。
https://www.simulationroom999.com/blog/In-vehicle-network-backnumber/
はじめに
lwIPのマルチキャストグループの参加について。
登場人物
博識フクロウのフクさん

イラストACにて公開の「kino_k」さんのイラストを使用しています。
https://www.ac-illust.com/main/profile.php?id=iKciwKA9&area=1
エンジニア歴8年の太郎くん

イラストACにて公開の「しのみ」さんのイラストを使用しています。
https://www.ac-illust.com/main/profile.php?id=uCKphAW2&area=1
マルチキャストグループの参加

今回はマルチキャストグループの参加をlwIPでやる場合の話だね。
- lwIP自身の初期化
- ネットワークインターフェースの追加
- マルチキャストグループの参加 ← これ
- ネットワークインターフェースの初期化
- リンクアップ
- UDP Socket生成
- IPアドレス、ポートへのBind
- UDP受信待ち
- EthnertFrameの疑似受信

さっそく使用するAPIを言うと、
igmp_joingroup_netif
という関数になる。

マルチキャストグループって、複数あることもあるの?

あり得るよ。

その場合は、このマルチキャストグループの数だけ呼び出すって感じになるのかな?

そのイメージであってる。
まぁ今回は一回呼ぶだけでOKなはずだよ。

うん。了解。
igmp_joingroup_netif関数

igmp_joingroup_netif関数は以下の引数を持ってる。
netif: グループに追加したいネットワークインターフェース
groupaddr: 参加するグループのIPアドレス

おー。
以外とシンプルだ。

参加するグループのIPアドレスってのは例のMACアドレスと紐づいたIPアドレスだよね?
MACアドレスが
01-00-5e-00-01-01
だったら、
IPアドレスは
236, 0, 1, 1
になるっていう。

そうそう。

たしかここで説明してたね。
igmp_joingroup_netif関数を読んだ際の挙動

あと、igmp_joingroup_netif関数を呼ぶと、
とあるパケットが送信されることになってる。

え?
そうなの?

関数名の一部にもなってるが、IGMPというプロトコルのパケットが送信される。
IGMPの説明はWikipediaから持ってきた。
Internet Group Management Protocol (IGMP) とは、IPネットワーク上でマルチキャスト(特定の一対多または多対多通信)を行うために、マルチキャストに参加するホストのグループを設定し、ネットワークに通知するための通信プロトコルである。マルチキャストは、動画や音楽のストリーミングなど、同時に多数のホストへ同一のデータを送信するときに通信を効率化する技術である。
Wikipedaより

ほー。
確かによくよく考えると、どういうグループがネットワーク上で形成されてるかネゴシエーションする必要はあるだろうから、
それが、IGMPで通知されるわけかー。

まぁ今回はIGMPを解析するわけじゃないんで、
予備知識として知っておいて。

おー。
まとめ

まとめだよ。
- lwIPのマルチキャストグループの参加について説明。
- igmp_joingroup_netif関数を使用。
- 上記関数を呼び出すとIGMPでグループ参加を通知するためのパケットが送信される。
バックナンバーはこちら。
コメント