1. Android Wifi 기본 모드설명
• Station mode (STA) infrastructure mode
어느 wireless driver로 이 모드로 동작가능하며, 이모드 default 모드이며, 2개의 STA가 서로 직접 연결이 될 수는 없고,
반드시 AP를 통해 접속을 해야합니다. 그리고, 다양한 인증을 제공하고 있습니다.
이 모드를 WEXT tools (iwconfig) 안에서는 Managed Mode라고도 부릅니다.
• Access Point (AP) infrastructure mode
managed 된 network에서 AP로 Master Mode로 동작하며,이는 network를 관리하고 유지를 해줍니다.
주목적은 STA를 관리 및 제어 등 여러가지 설정을 하게 됩니다.
Linux에서 이를 사용하기 위해서, hostapd가 사용되어집니다..
• Ad-hoc (IBSS) Mode
Ad-hoc모드는 IBBS(Independent Basic Service Set) 모드로 알려져있으며, Peer to Peer mode,
IBBS에 있는 각 장비가 각각 조절을 자신스스로 조절을 하며, 일 대 일 혹 그 이상이 AP의 도움 없이 통신이 가능하도록 되어있습니다.
장점은 일 대 일 , 그 이상이 되고, 인증을 거치지 않고
AP 없이 직접 통신하고 전송속도 및 전송범위 또한 개선됩니다.
이 밖에, 아래의 모드가 더 존재 합니다.
- Wireless Distribution System (WDS) mode
- Monitor (MON) mode
- Mesh
Ref. http://wireless.kernel.org/en/users/Documentation/modes
http://www.haifux.org/lectures/206/wirelessLec.pdf
2. STA infrastructure mode 구조. (Android 4.2)
2.1 User space source
- WIFI Setting
- WIFI SDK
SupplicantState.java , WifiManager.java ,WpsInfo.java
* files-2: WifiStateMachine.java , WifiMonitor.java , WifiNative.java
* addr: frameworks/base/wifi/java/android/net/wifi/
* link: http://developer.android.com/reference/android/net/wifi/package-summary.html- WIFI Service
* file: frameworks/base/services/java/com/android/server/wifi/WifiService.java
or
* file: frameworks/base/services/java/com/android/server/WifiService.java
or
* file: frameworks/base/services/java/com/android/server/WifiService.java
- WIFI JNI
or
* file: frameworks/base/core/jni/android_net_wifi_WifiNative.cpp
- WIFI HAL
(driver load & control)
- WPA_Supplicant Controller
- WPA_Supplicant (wpa_supplicant)
Socket control (wlan0)
* file: wpa_supplicant/ctrl_iface_unix.c
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
......
* addr: external/wpa_supplicant_8/
2.2 HAL (wifi.c) 와 wpa_supplicant
HAL은 Porting의 주요소스로, 주된 일은, driver load 부터 supplicant control , 각종 상태 설정. FW관리
HAL에서 wpa_supplicant를 control 하기위해서, wpa_ctrl를 함수를 이용된다.
아래와 같이 직접 실행시 ctrl_interface socket 설정은 wpa_ctrl socket이다.
wpa_supplicant가 실행이 제대로 된다면, /data/misc/wifi/sockets 안에 wlan0 socket 생성
(board마다 설정 및 실행은 다를수 있다, board: odroidx2)
on Serial or Adb shell # su # cd /data/misc/wifi/sockets # ls wlan0 // socket made by wpa_supplicant wpa_ctrl_1777-1 //sockets made by Android wifi layer wpa_ctrl_1777-2 // sockets made by Android wifi layer # wpa_supplicant -Dwext -iwlan0 -c /etc/wpa_supplicant/wpa_supplicant.conf
# vi /data/misc/wifi/wpa_supplicant.conf
ctrl_interface=/data/misc/wifi/sockets update_config=1 device_name=odroidx2 manufacturer=HARDKERNEL Co., Ltd. model_name=ODROID-X2 model_number=ODROID-X2 serial_number= device_type=10-0050F204-5 config_methods=physical_display virtual_push_button
2.3 WPA Supplicant 와 WLAN Driver 관계 및 TEST
둘 사이의 interface는 socket 과 driver 제어 이다,
1. Socket interface (l2_packet_linux.c)
network driver가 안정되어 있다면, 크게 신경을 안쓰고 tool을 이용하여 TEST하면된다.
Ethernet type 0x888E : EAP over LAN (IEEE 802.1X), IEEE Std 802.1X - Port-based network access control
Ethernet type 0x88C7 : Pre-Authentication
http://standards.ieee.org/develop/regauth/ethertype/eth.txt
http://en.wikipedia.org/wiki/EtherType
http://nmap.org/book/nping-man-ethernet-options.html
SIOCGIFHWADDR : MAC Address 얻기
SIOCGIFINDEX : Interface index 얻기
SIOCGIFADDR : IP Addr 얻기
ifconfig 로 test 가능
( 만약 에러 발생시, ifconfig wlan0 up 문제 or network driver 문제이므로 tool로 test.)
2. Driver APIs
WPA Supplicant 와 Device driver 사이의 interfafce 및 device driver 구조를 말하며, 최신 interface는 nl80211/cfg80211과
ext를 지원하지만 이전 것은 ext를 지원 한다.
A. Driver-Wrapper (WPA Supplicant 와 Driver Interface)
• WE/WEXT: 오래된 driver framework이며,보편적으로 많이 사용되었다.이 것을 버리는 이유는,
WE는 ioctl 기반으로 user와 kernel사이를 통신 하지만 몇가지 이유로, 앞으로 cfg80211/nl80211가
이를 대체가 될 것이다.
http://w1.fi/wpa_supplicant//devel/driver__wext_8c.html
• nl80211: nl80211는 새로운 netlink interface이며, cfg80211함께 WE를 대체한다.
nl80211이 사용되어지는 곳은 iw( iwconfig ) ,crda , hostapd,wpa_supplicant
https://www.kernel.org/doc/htmldocs/80211/index.html
• 이외 ndiswrapper (window driver), madwifi (atheros)
http://en.wikipedia.org/wiki/NDISwrapper
http://wireless.kernel.org/en/users/Drivers/madwifi
ref. (driver-wrapper)
http://w1.fi/wpa_supplicant/devel/driver_wrapper.html
B. Driver (Kernel Driver )
• mac80211 : SoftMAC을 위한 wireless driver API로 mac80211는 cfg80211에 의존적으로 설정 및 등록이 됩니다.
설정은 nl80211 혹은 we에 를 통해서 cfg80211으로 설정이 가능합니다.
STA는 Kernel안 에 MLME과 함게 구현이 되어있으며,AP는 Userspace에서 구현됨.
* FullMac device은 이를 사용하지 않습니다.
auth/assoc/deauth diagram
http://wireless.kernel.org/en/developers/Documentation/mac80211/auth-assoc-deauth
HW scan diagram
http://wireless.kernel.org/en/developers/Documentation/mac80211/hw-scan
• cfg80211: cfg80211은 WE를 대체하는 configuration API로 , 구조는 nl80211가 kernel 제어를 하기위해서
cfg80211를 통해 제어한다. WE는 현재 유지를 하고,기능추가를 하지 않을 것이며, 나중에는 cfg80211를 거쳐서
설정하게 될 것이다 (하위 호완성, CONFIG_CFG80211_WEXT),앞으로 WE의 필요가 없다면, 가능하다면
제거 할것이며, cfg80211는 wireless-regdb를 통한 full regulatory 과 CRDA의 사용을 제공 할 것이다.
앞으로 새로운 모든 driver는 FullMac은 cfg80211의해 제어되고, SoftMac은 mac80211를 걸쳐와야 한다.
Ref.
http://wireless.kernel.org/en/developers/Documentation
http://loveyuna.egloos.com/2412200 (개념정리가 잘되어있다)
C. Driver API 구조도
(앞으로 Driver, 하위호환성 )
Driver APIs 구조도
http://wireless.kernel.org/en/developers/Documentation?action=AttachFile&do=get&target=overview.pdf
Broadcom chip 설명
http://wireless.kernel.org/en/users/Drivers/brcm80211#softmac_driver_specifics
3. WIFI Porting GUIDE
ref.
http://blog.linuxconsulting.ro/2010/04/porting-wifi-drivers-to-android.html (기본 Porting Guide)
http://w1.fi/wpa_supplicant//devel/porting.html
http://sixthman23.tistory.com/entry/wireless-lan-%ED%8F%AC%ED%8C%85%ED%95%98%EA%B8%B0
4. 숙지용어
STA: Station의 약자.
WNIC : Wiress Network Interface Controller
SoftMAC: MLME 스택이 소프트웨어로 관리되는 WNIC의 한 종류
MLME: (MAC) Sublayer Managemt Entity 의 약자로, PHY MAC의 존재를 알려주고,MAC의 기본기능을 수행한다.
FullMAC: MLME 스택이 hardware로 관리되며 mac80211의 관리가 필요없다.
Ref.
http://wireless.kernel.org/en/developers/Documentation/Glossary
3. Hotspot mode (Access Point) 구조 (Android 4.2)
3.1 User space source
- WIFI Setting
* file: packages/apps/Settings/src/com/android/settings/wifi/WifiApEnabler.java
- WIFI SDK
* file:frameworks/base/wifi/java/android/net/wifi/WifiManager.java
* file:frameworks/base/wifi/java/android/net/wifi/WifiConfiguration.java
- WIFI Service
* files-2: NetworkManagementService.java , NativeDaemonConnector.java
* addr: frameworks/base/services/java/com/android/server/
- WIFI JNI
* addr: system/netd/
- WIFI HAL
(driver load & control)
- WPA_Supplicant (hostapd)
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
......
* addr: external/wpa_supplicant_8/
출처 : http://blog.chinaunix.net/uid-22415790-id-3651045.html |
4. WIFI Direct (infrastructure mode) 기본구조.
4.1 User space source
GO : Group Owner
GC : Group Client
WifiP2pGroup.java , WifiP2pInfo.java ,WifiP2pManager.java,
WifiP2pServiceInfo.java, WifiP2pServiceRequest.java
- link: http://developer.android.com/reference/android/net/wifi/p2p/nsd/package-summary.html
or
* file: frameworks/base/core/jni/android_net_wifi_WifiNative.cpp
(driver load & control)
Socket control (wlan0)
* file: wpa_supplicant/ctrl_iface_unix.c
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
......
* addr: external/wpa_supplicant_8/
GO : Group Owner
GC : Group Client
- WIFI Direct API Guide
- WIFI SDK
WifiP2pGroup.java , WifiP2pInfo.java ,WifiP2pManager.java,
WifiP2pServiceInfo.java, WifiP2pServiceRequest.java
* addr: frameworks/base/wifi/java/android/net/wifi/p2p/
* files: WifiP2pDnsSdServiceInfo.java , WifiP2pDnsSdServiceRequest.java
WifiP2pUpnpServiceInfo.java,WifiP2pUpnpServiceRequest.java
* addr: frameworks/base/wifi/java/android/net/wifi/p2p/nsd/
- link: http://developer.android.com/reference/android/net/wifi/p2p/package-summary.html* files: WifiP2pDnsSdServiceInfo.java , WifiP2pDnsSdServiceRequest.java
WifiP2pUpnpServiceInfo.java,WifiP2pUpnpServiceRequest.java
* addr: frameworks/base/wifi/java/android/net/wifi/p2p/nsd/
- link: http://developer.android.com/reference/android/net/wifi/p2p/nsd/package-summary.html
- WIFI Service
* file: frameworks/base/wifi/java/android/net/wifi/p2p/WifiP2pService.java
- WIFI JNI
or
* file: frameworks/base/core/jni/android_net_wifi_WifiNative.cpp
- WIFI HAL
(driver load & control)
- WPA_Supplicant Controller
- WPA_Supplicant (wpa_supplicant)
Socket control (wlan0)
* file: wpa_supplicant/ctrl_iface_unix.c
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
......
* addr: external/wpa_supplicant_8/
4.2 Wifi Direct vs Ad-hoc 차이
Wifi는 기본적으로 infra mode에서 동작하며 각 AP 접속 하에 다른 Device들과 통신을 할수 가 있습니다.
하지만 infra mode에서 AP의 간섭없이, 개인들과 서로 통신을 하기위해서 Wifi Direct와 같은 새로운 기술이 나오게 되었습니다.
Ad-hoc mode 기본 통신은 전형적인 Wifi speed 와 range로 WPA2에 의해 제한이 되지만,
Wifi Driect는 WPA2 제한이 없기에 Speed 와 Range가 향상이 되어 사용할 수가 있습니다.
* Wifi Direct : up to Speed: 250 Mbps , up to Range: 200 meter
또한 Ad-hoc mode 1:1 통신이지만, Wifi Direct는 1:1 과 그룹간의 통신도 가능 합니다.
Ref.
http://www.edaboard.com/thread260400.html
http://wifi-direct.blogspot.in/
4.3 기본설명
Wifi Direct , 초기에는 WI-FI P2P라고 불리었으며, 현재 개인들 뿐만 아니라 여러장비들과 서로 통신을 제공을 하고 있습니다
그리고, 여기에 확장 기능들이 들어가고 있습니다.
Automated setup
http://www.wi-fi.org/news-events/newsroom/wi-fi-certified-wi-fi-direct-now-included-in-dlna-interoperability-guidelines
New uses
위에서 설명했듯이, 개인들과 통신 뿐만아니라 여러장비를 제공을 위해서 새로운 App을 지속적으로 개발 중입니다.
Ref
http://en.wikipedia.org/wiki/Wi-Fi_Direct
http://wireless.kernel.org/en/developers/p2p
http://hackerj.tistory.com/33
Other Ref. (Spec)
http://www.wi-fi.org/discover-wi-fi/wi-fi-direct
Wifi는 기본적으로 infra mode에서 동작하며 각 AP 접속 하에 다른 Device들과 통신을 할수 가 있습니다.
하지만 infra mode에서 AP의 간섭없이, 개인들과 서로 통신을 하기위해서 Wifi Direct와 같은 새로운 기술이 나오게 되었습니다.
Ad-hoc mode 기본 통신은 전형적인 Wifi speed 와 range로 WPA2에 의해 제한이 되지만,
Wifi Driect는 WPA2 제한이 없기에 Speed 와 Range가 향상이 되어 사용할 수가 있습니다.
* Wifi Direct : up to Speed: 250 Mbps , up to Range: 200 meter
또한 Ad-hoc mode 1:1 통신이지만, Wifi Direct는 1:1 과 그룹간의 통신도 가능 합니다.
Ref.
http://www.edaboard.com/thread260400.html
http://wifi-direct.blogspot.in/
4.3 기본설명
Wifi Direct , 초기에는 WI-FI P2P라고 불리었으며, 현재 개인들 뿐만 아니라 여러장비들과 서로 통신을 제공을 하고 있습니다
그리고, 여기에 확장 기능들이 들어가고 있습니다.
Automated setup
- Universal Plug and Play (UPnP),
- Devices Profile for Web Services (DPWS),
- Zero Configuration Networking (ZeroConf)
http://www.wi-fi.org/news-events/newsroom/wi-fi-certified-wi-fi-direct-now-included-in-dlna-interoperability-guidelines
New uses
위에서 설명했듯이, 개인들과 통신 뿐만아니라 여러장비를 제공을 위해서 새로운 App을 지속적으로 개발 중입니다.
Ref
http://en.wikipedia.org/wiki/Wi-Fi_Direct
http://wireless.kernel.org/en/developers/p2p
http://hackerj.tistory.com/33
Other Ref. (Spec)
http://www.wi-fi.org/discover-wi-fi/wi-fi-direct
4.4 RealTek WIFI Direct
출처:http://dishingtech.blogspot.kr/2012/01/realtek-wi-fi-direct-programming-guide.html |
출처:http://dishingtech.blogspot.kr/2012/01/realtek-wi-fi-direct-programming-guide.html |
https://5ebe640fc109686c84adf909d706d596a18b3ce0.googledrive.com/host/0B6hvW6XtZ2CdZFlLcjZObjl2YXM/linux/document/RTK_P2P_WFD_Programming_guide.pdf
아래와 같이 one to one or one to multiple 도 가능하다.
출처: http://www.digikey.com/US/EN/techzone/wireless/resources/articles/Wi-Fi-Direct-adds-Peer-to-Peer-Capabilities.html |