すぐにどうのというつもりはないが、ちょっと調べてみた。
wpa_supplicantはWPAをサポートするためのコードで、WPAの接続処理とデータの送受信での暗号化の処理を行う。
ソースコードでOSやplatformに依存する部分のスケルトンはnoneというファイルで用意されている。
$ find src -name '*none.c'
src/crypto/crypto_none.c
src/crypto/tls_none.c
src/drivers/driver_none.c
src/l2_packet/l2_packet_none.c
src/utils/os_none.c
os,l2_packet,driverは下位レベルのコードと思われる。
cryptoとtldはsslライブラリのヘルパーでgnutls,openssl,wolfsslが用意されている。bearsslのものはまだない。mbedでWIFIサポートしているものがあるような気がするがmbed tlsのヘルパーも本家のツリーにはない。
これらを作り込めば組み込みでも使えると思われる。
EPS32はFreeRTOSを使ってlwipとwpa_supplicantを組み込んでいる。wifiに関係しそうなcomponentsはesp_wifi,wpa_supplicant,wifi_provisioningがある。またローレベルのnetwork関係はesp_netif,lwipがある。ESP32にはEthernet MACが入っていてPHY(LAN8720)をつなぐとEthernetが使えるようになるようだ。そのコードはesp_ethにある。wpa_supplicantはmbedtlsを使っているようだが、l2_packet,driverのディレクトリがなく、esp_supplicantというディレクトリがある。おそらくチップの機能を使いwpa_supplicantの機能の一部を使うような実装になっているのではないかと思われる。
Hardwareサポートなしに処理する場合はこのような流れになると思われる。
11bのWEPしかサポートしてないデバイスを利用する場合はこのような流れになるが、WPAをサポートしたデバイスでハードウエアサポートを利用すると初期の処理のみをwpa_supplicant経由にして、データの送受信はハードウエアから直接lwIPに渡す実装になるものと思われる。