バックナンバーはこちら。
https://www.simulationroom999.com/blog/In-vehicle-network-backnumber/
はじめに
IPフラグメント対応目的とした場合の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
システム構成
とりあえず、システム構成を描いてみた。
EthernetInput
BLFからの入力するEthernetInputって関数は何?
lwIPのEthernetFrame受信時に呼ぶ関数だね。
例えば、受信割込みの時とか。
あ!なるほど。
lwIPからすると、受信割込みが来たって体でEthernetFrameを渡すのか。
そうそう。
UDP Socket
ただ、単にEthernetInputにEthernetFrameを入れても、
受信データとしては取り出せない。
え?
じゃーどうするの?
事前にUDP Socketを生成しておく。
Socket?
あ、そういえな、APIはバークレーSocketって言ってたっけ?
今回のフレームのポート番号は・・・。
2425ポートだから、
そのポートで受信できるようにUDP Socketを事前に生成すればよいのか。
Yes。
2425ポート云々の話はここで出てきたよ。
マルチキャストグループの参加
実は、もう一個やることがあるんだけど。
なに?
今回のフレームはマルチキャストなんで、
マルチキャストグループに参加している体にしておく必要がある。
そうなの?
UDPのポート空けとけばいいよな気がしてたけど。
マルチキャスト場合、IPアドレスがMACアドレスのグループに紐づいたものになってる。
つなり、送信先IPアドレスがマルチキャストグループ用のIPアドレスになってるんで、
lwIPに該当グループに参加済みであることを教えてあげる必要があるんだよ。
あー。
確かにマルチキャストの時にそんな話あったねー。
マルチキャストグループの参加
で、マルチキャストグループの参加って具体的にはどうするの?
lwIPにそれようのAPIが用意されているんで、
それを忘れずに呼び出せばOKだな。
なんだー。
もっとややこしい話かと思ったー。
まぁ知らずにやると、lwIPのコードをガッチリ潜ることになるんでー。
それは嫌だ。
次回は、実際の環境整備だね。
まとめ
まとめだよ。
- lwIPにBLFのEthernetFrameを入れるシムテム構成を描いた。
- EthernetInputが受信割り込み時に呼び出す関数。
- 事前にUDP Socketを生成する必要がある。
- 事前にマルチキャストグループに参加する必要がある。
バックナンバーはこちら。
コメント