WIFI Setting
file: packages/apps/Settings/src/com/android/settings/TetherSettings.java file: packages/apps/Settings/src/com/android/settings/wifi/WifiApEnabler.java
WIFI SDK
file:frameworks/base/core/java/android/net/ConnectivityManager.java file:frameworks/base/wifi/java/android/net/wifi/WifiManager.java file:frameworks/base/wifi/java/android/net/wifi/WifiConfiguration.java
WIFI Service
ㆍaddr: frameworks/base/services/java/com/android/server/ files-1: WifiService.java,ConnectivityService.java files-2: NetworkManagementService.java , NativeDaemonConnector.java
WIFI JNI
Linux 에서 사용하는 hostapd/ppp/iptable/dnsmasq 등 여러 bin 제어
ㆍaddr: system/netd/ files: CommandListener.cpp, // 아래 모든 것들을 제어 TetherController.cpp, // /system/bin/dnsmasq 설정 NatController.cpp, // iptable 로 NAT 설정 SoftapController.cpp // /system/hostapd ... // 이외 ppp 및 pan 등
WIFI HAL
file: hardware/libhardware_legacy/wifi/wifi.c (driver load & control)
Hostapd
HAL 연결되는 부분
ㆍaddr: external/wpa_supplicant_8/ - Network Driver control file: src/l2_packet/l2_packet_linux.c - Driver wrapper by using socket file: src/drivers/driver_nl80211.c file: src/drivers/driver_wext.c ......
2. WIFI AP Android의 전체구조도
그림출처
http://blog.chinaunix.net/uid-22415790-id-3651045.html
2.1 AP의 구조이해
상위그림의 좌측아래의 Flow 와 각 모듈의 설명있으므로, 이를 토대로 동작방식을 보자.
1. AP는 STA이가 접속할 경우 이를 응답하여 인증하는 접속을 허가한다.
2. STA가 접속했다면, AP는 DHCP Server(Dnsmasq)를 이용하여 IP를 할당해주고 STA와 통신을 한다.
Dnsmasq 와 DHCP 정보
https://en.wikipedia.org/wiki/Dnsmasq
https://en.wikipedia.org/wiki/Dynamic_Host_Configuration_Protocol
http://revolutionwifi.blogspot.com/2011/03/explaining-dhcp-server-1111.html
2.2 Hostapd의 동작
Hostapd는 AP에서 동작하는 SoftAP Application으로 Kernel Driver를 제어하고 인증을 하는 프로그램이며, wpa supplicant와 기능을 공유한다.
AP로 동작시에는 별도의 외부 Network통신과 통신해야하므로 이부분 역시 중요하다.
hostapd의 File 구성
https://w1.fi/wpa_supplicant/devel/files.html
- Netd
- Hostapd의 Network Layer 2 통신
- Ethertype: 0x888E EAP-over-LAN (EAPOL)
- Ethertype: 0x890D Fast Roaming Remote Request 802.11 management protocol
https://w1.fi/wpa_supplicant/devel/dir_d56d9878b2a017779a94089d67c752bb.html
https://w1.fi/wpa_supplicant/devel/index.html
https://w1.fi/wpa_supplicant/devel/driver__nl80211_8c.html
https://w1.fi/wpa_supplicant/devel/index.html
- Hostapd의 Kernel Driver 제어
https://w1.fi/wpa_supplicant/devel/driver__nl80211_8c.html
- Socket 설정 관련사항
2.3 Linux Kernel 관련사항
- nl80211/cfg80211 Driver
BCM4330 Network Driver과 cfg80211_ops를 이용하여 통신한다.
https://en.wikipedia.org/wiki/Netlink
- BCM4330 Network Driver
실제 Network Data 통신은 User에서 Socket(AF/PF_INET,AF/PF_INET6) IPv4, IPv6를 WLAN을 이용하여 제어된다.
- netif_rx
- netif_rx_ni (Network Interface RX Non Interrupt)
- net_device_ops ( Network Device TX 및 관리)
Kernel Network Driver 관련사항
https://lwn.net/Articles/30107/https://docs.oracle.com/cd/E37670_01/E52461/html/ch06s07.html
https://lwn.net/Kernel/LDD3/
- SDIO Interface
BCM4330 Full Mac 지원 및 관련사항
https://wireless.wiki.kernel.org/en/users/Drivers/brcm80211