バックナンバーはこちら。
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は何になるの?
netif_set_upってAPIになるねー。
netif_set_up関数
netif_set_up関数の引数は一個だけ。
netif:初期化済みnetif構造体
今回は異様にシンプルだねー。
まぁネットワークインターフェースをUPにするだけだからねー。
UP?
うん。
有効のことをUP、無効のことをDOWN
って表現したりするんだよ。
特に物理層に対しての表現だねー。
ほー。
そんな用語があるんだ。
netif_set_up関数の中身
netif_set_up関数の内部コードも貼っておこう。
/**
* @ingroup netif
* Bring an interface up, available for processing
* traffic.
*/
void
netif_set_up(struct netif *netif)
{
LWIP_ASSERT_CORE_LOCKED();
LWIP_ERROR("netif_set_up: invalid netif", netif != NULL, return);
if (!(netif->flags & NETIF_FLAG_UP)) {
netif_set_flags(netif, NETIF_FLAG_UP);
MIB2_COPY_SYSUPTIME_TO(&netif->ts);
NETIF_STATUS_CALLBACK(netif);
#if LWIP_NETIF_EXT_STATUS_CALLBACK
{
netif_ext_callback_args_t args;
args.status_changed.state = 1;
netif_invoke_ext_callback(netif, LWIP_NSC_STATUS_CHANGED, &args);
}
#endif
netif_issue_reports(netif, NETIF_REPORT_TYPE_IPV4 | NETIF_REPORT_TYPE_IPV6);
}
}
んー?
なにやってるかはちょっとわからないな。
重要なのはnetif_set_flagsって関数かな。
指定したnetifの内部フラグをUP状態に切り替えるってことをしている。
重要な処理ってことだねー。
んー、でもこの関数って実は呼ばなくても影響ないかもしれないんだよねー。
え?そうなの?
うん。
ちょっと追ってみたんだけど、NETIF_FLAG_UPってフラグが立ってるかどうかで挙動が変わるところが無いんだよねー。
じゃー、不要ってこと?
まぁ今後どうなるかわからないし、
流儀としては呼び出すべきだろうねー。
(いわゆるおまじない的なヤツか・・・。)
まとめ
まとめだよ。
- lwIPのネットワークインターフェースの初期化について説明。
- netif_set_up関数を使用する。
- ネットワークインターフェースをUP状態にするもの。
- 実は呼ばなくてもOKな疑惑があるが、流儀としては呼び出しておくべき。
- netif_set_up関数を使用する。
バックナンバーはこちら。
コメント