LoginSignup
5
5

More than 5 years have passed since last update.

lwIP デバイスドライバのインターフェイスを読む

Posted at

lwIPのTCP/IPとネットワークデバイス間インターフェイスについて、いくつかの実装を調査してみました 。

まとめ

  • lwip/src/netif/etherif.c を ネットワークデバイスに合わせて実装する。
  • デバイスドライバは4つの関数を実装する。
  • low_level_init()
    • ethernetif_init()から呼ばれる。
    • network deviceのmtu, flagsを設定する。
  • low_level_output() 送信用関数。  * TCP/IPプロトコルスタックから呼ばれる。  * TCP/IPプロトコルスタックから来たパケットをドライバに送信する。パケットはlinked listになっており、一度に複数のパケットをまとめて送信することができる。
  • ethernetif_recv() 受信用関数
    • 受信ポーリングのループorネットワークデバイスの受信割り込みから呼ばれる。
    • 受信したパケット用のpbufを確保して、コピーして、netif->input()でTCP/IPプロトコルスタックへ渡す。
  • ethernetif_init() 初期化
    • netif_add()から呼ばれる。
    • netif->outputとnetif->linkoutputを設定する。

githubあるソースコードから下記の実装を調査しました。

ESP8266 SDK based on FreeRTOS

  • third_party/lwip/netif/ethernetif.c
  • low_level_init()
  • low_level_output()
  • ethernetif_input()
  • ethernetif_init()

Realtek Ameba

  • component/common/network/lwip/lwip_v1.4.1/port/realtek/freertos/ethernetif.c
  • low_level_init()
  • low_level_output()
  • ethernetif_recv()
  • ethernetif_init()

Marvell wmsdk

  • src/platform/net/lwip/netif.c
  • low_level_init()
  • low_level_output()
  • netif_input()
  • netif_init()

Rockchip RKnanoD

inno

  • Web/Lwip/lwip-1.4.1/src/netif/ethernetif_inno.c
  • low_level_init()
  • low_level_output()
  • ethernetif_input()
  • ethernetif_init()

rk903

  • Web/Lwip/lwip-1.4.1/src/netif/ethernetif_rk903.c
  • low_level_init()
  • low_level_output()
  • ethernetif_input()
  • ethernetif_init()

Broadcom WICED

  • WICED/network/LwIP/WWD/wwd_network.c
  • low_level_init()
  • low_level_output()
  • host_network_process_ethernet_data()
  • ethernetif_init()

参考

5
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
5