【Ethernet】車載ネットワーク その32【lwIP⑧】

車載ネットワーク

バックナンバーはこちら。
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な疑惑があるが、流儀としては呼び出しておくべき。

バックナンバーはこちら。

コメント

タイトルとURLをコピーしました