LightWeightIP(LwIP)を紐解く(概要・構造)
仕事や勉強用でLightWeightIPを使うことが多くなってきたので、振る舞いについて記事にまとめていこうと思っています。
本記事はLightWeightIPの概要と構造にフォーカスして説明します。
LightWeightIPとは
LightWeightIPは、オープンソースのTCPIPのプロトコルスタックです。省メモリを特徴としており、組み込み開発でよく使用されます。
FreeRTOSにも対応しており、AWSとの連携に使用されることもあります。
LightWeightIPのGithubリポジトリはこちらです。
LightWeightIPの特徴
LightWeightIPは、下記の図のようにアプリケーションからAPIを呼び出すことで動作します。ここは他のライブラリと変わりはないと思います。
ただ、上記の図からもわかる通り、LightWeightIPにはEthernetやWLANのデバイスドライバは付属しておらず、自作するか、マイコンメーカが公開しているデバイスドライバを使用する必要があります。
LightWeightIPの構造
ここでLightWeightIPの構造を下記の図にに示します。
上記の通り、LightWeightIPにはアプリケーション層のAPI、つまりHTTPの通信やソケット通信を行うAPIが用意されています。上記の図で言うと「apps」と「api」がこれに当たります。
そして、「apps」と「api」はその下の「core」のモジュールを使ってTCP/IPの通信を行います。
「core」層は、「netif」層を介してデバイスドライバを使用し、Ethernet, WLANの通信を行います。「netif」層は、デバイスドライバをLightWeightIPにとって都合の良い形で呼び出すためのモジュールとなります。
LightWeightIPのフォルダ構成
LightWeightIPのGithubリポジトリのフォルダ構成からも見てもわかる通り、フォルダ構成は下記のようになっています。ここではソースコードが入っているフォルダ「src」以外の説明は割愛します。
上記のとおり、前章で記述した、モジュールがそのままフォルダでまとめられています。「apps」フォルダや「api」フォルダには、アプリケーション層の通信を行うためのAPIが定義されています。
「core」フォルダには、TCPIPの制御・通信用の関数が定義されています。
そして、「netif」フォルダには、デバイスドライバの制御を行うための関数が定義されています。
参考資料
-
Githubリポジトリ
https://github.com/lwip-tcpip/lwip -
LightWeightIP公式サイト
https://savannah.nongnu.org/projects/lwip/
Discussion