2/23/2014

WLAN 의 WIFI 기본 개념 설명

1. WLAN(Wireless Local Area Network) 기본설명 

일단 WLAN(Wireless Local Area Network)는 WI-FI 라는 브랜드명 아래 IEEE 802.11 기술기준으로 무선랜(WLAN)을 이용하여 통신하는 장치를 말한다.
그리고 IEEE802.11의 기술은 현재 지속적으로 버전업이 되므로, 이에 관련된 부분은 이 관련문서를 참고하는 것이 좋을 것 같다.

  https://en.wikipedia.org/wiki/Wi-Fi
  https://en.wikipedia.org/wiki/List_of_WLAN_channels

1.1 IEEE 802.11의 기본정보 

IEEE 802.11x의 변화된 세부내용을 보고 싶다면 아래사이트를 참고하자.

  • IEEE 802.11x 표준의 변화 및 역사 세부사항 
  http://en.wikipedia.org/wiki/IEEE_802.11 
  http://ko.wikipedia.org/wiki/IEEE_802.11 
  http://doc.opensuse.org/products/draft/SLES/SLES-admin_sd_draft/cha.wireless.wlan.html


  • WIFI Spec 관련자료 얻기 (IEEE 802.11)
참고해서 봐야할 문서가 아래의 문서인데, 무료가 아니라고 해서 지인을 통해서 얻었지만, 내용이 방대하다. 

  Part 11: Wireless LAN Medium Access Control (MAC) and Physical Layer (PHY) 
  http://standards.ieee.org/about/get/802/802.11.html

  • The Wi-Fi CERTIFIED™ Product Finder (Wifi Alliance)
  관련회사들을 한번 보자.
  http://www.wi-fi.org/certified-products-results?capabilities%5B50%5D=50

  • WPA_SUPPLICANT 개발자료 
  http://w1.fi/wpa_supplicant/wpa_supplicant-devel.pdf



1.2 WLAN에서 사용되는 용어 및 관련자료


  • STA(Station)
무선통신을 하는 최종 단말기라고 생각하면되겠다.

  • AP(Access Point) or Router 
무선통신을 하는 단말기가 아니, 허브의 역할로 AP를 통하여 인증하고, 다른 STA들과 통신하도록 한다.

  • BSS(basic service set)
모든 STA들이 PHY layer에서 통신할 경우 가지고 있어야 정보라고 생각하면 되겠다.
BSS는 ID를 가지고 있는데, 이를 BSSID라고 하며 이 BSSID는 AP와 접속할 경우 MAC Address로 사용되어진다.

그리고, BSS의 경우 두 가지 종류의 BSS가 존재하는데, IBSS(Infrastructure BSS)와 IBSS(Independent BSS)로 나누어진다고 한다.

  • IBSS(Independent BSS)
ad hoc (peer-to-peer) mode에서 설정이 되는 STA의 정보

  • ESS(Extended Service Set)
연결된 BSS들의 한 종류이며,  ESS안에 AP는 DS(distribution system)로 연결된다.
그리고, 각 ESS는 ID를 가지고 있는데, 이를 SSID라고 하며, 최대 32byte의 문자로 Network의 이름을 나타낸다.

  • DS(distribution system)
distribution system은 ESS 안에 AP와 연결이 되며, 이 DS 개념은 Network의 영역을 넓히는 것으로 볼수 있다.

  • SSID 와 BSSID
AP에서 SSID는 네트워크의 이름을 설명하며, BSSID는 MAC 주소라고 보면될 것 같다.
상위에도 간단히 설명했지만,
전부 Service Set이기 때문에 내부에 다양한 기능이 제공할거라고 생각이 든다.
만약 이외 좀 더 알아야 한다면 추후 수정하겠다.

  • WNIC(Wireless Network Interface Controller)
WIFI에서 OSI 2 계층에 해당하는 부분을 말함 

  • MLME(MAC Sublayer Management Entity)
MLME의 경우 NIC의 hardware or firmware 구현되거나 host-base software로 구현되어진다.

  • FullMAC/HardMAC WNIC
WNIC는 MLME(MAC Sublayer Management Entity) Function들로 구현하는데, hardware or Firmware로 구현되어지면, 이를 FullMAC이라고 한다.
주로 모바일 Device에서 많이 사용되어진다. 

  • SoftMAC WNIC
WNIC이 host software에서 구현되어지면, 이를 SoftMAC이라고 한다. 
Linux Kernel의 mac80211 framework에 SoftMAC 지원하며, mesh network 등 다양하게 지원

  • BSS/ESS 관련자료 
  https://en.wikipedia.org/wiki/Service_set_%28802.11_network%29

  • WLAN 관련자료 
  https://en.wikipedia.org/wiki/Wireless_network
  https://en.wikipedia.org/wiki/Wireless_LAN


  • IEEE 802.11 전반적인 자료 
  https://en.wikipedia.org/wiki/IEEE_802.11


  • IEEE 802.11 Layer 2 구조 
  https://en.wikipedia.org/wiki/IEEE_802.11#Layer_2_.E2.80.93_Datagrams


2. WLAN의 인증(Authentication)

STA이 AP에접속을 한다고 하면 가장 먼저 접하는 것이 인증일 것이며, 그에 관련된 자료를 인증자료를 간단하게 정리해본다.
관련세부사항은 아래의 사이트를 보고 알아가보자.

  • WEP(Wired Equivalent Privacy)
초기에 802.11에서 사용되어지는 기본인증이며, 보안에 취약하다고 하며, 사실 요즘은 거의 사용되지 않지만, 그래도 기본적으로 제공되어진다.
여기서 더 발전되어 나온 것이 아래의 WPA/WPA2 인증방식이다. 
  https://en.wikipedia.org/wiki/Wired_Equivalent_Privacy

  • WPA(Wi-Fi Protected Access)/WPA2 인증
802.11의 표준 인증방식으로 WPA/WPA2 (Wi-Fi Protected Access 1st version/ 2nd Version)을 말한다.
Wi-Fi Alliance에 의해 개발되어진 인증 시스템이며 현재 사용되어지고 있는 인증시스템이다.
내부를 좀 자세히 보면, WPA/WPA2는 분류를 하면 두가지로 분류되며 각각은 아래설명 
  1. WPA-Personal 
  2. WPA-Enterprise
  https://en.wikipedia.org/wiki/Wi-Fi_Protected_Access
  https://ko.wikipedia.org/wiki/%EC%99%80%EC%9D%B4%ED%8C%8C%EC%9D%B4_%EB%B3%B4%ED%98%B8_%EC%A0%91%EC%86%8D

  • WPS(Wi-Fi Protected Setup, originally, Wi-Fi Simple Config)
상위 이름에서 알수 있듯이 AP와 STA사이에서 간단하게 설정하는 모드이며, 보통 버튼 형태로 되어있다. 
Network의 보안기능이지만, 다른것과 다르게 AP와 STA에 WPS 버튼이 있어 서로 눌렀을 경우 쉽게 인증되고 설정되는 구조이다.
WPS도 상위 WPA/WPA2를 사용하고 있으며, 이부분을 쉽게 연결해주는 형태라고 생각하면 될꺼 같다. 
  https://en.wikipedia.org/wiki/Wi-Fi_Protected_Setup


2.1 WPA/WPA2-Personal
WPA/WPA2-Personal은 WPA-PSK(pre-shared key) 이라고 하며, 집이나 작은 office에서 사용 용도로 만들어졌다고 한다.
세부적인 동작을 알려며, KEY 알고리즘과 관련된 부분을 알아야 할 것 같아, 좀 Link만 연결한다.

WPA-PSK의 이해
  http://www.juniper.net/techpubs/en_US/junos-space-apps12.3/network-director/topics/concept/wireless-wpa-psk-authentication.html


2.2 WPA/WPA2 Enterprise 

WPA/WPA2 Enterprise는 기업용으로 좀 더 복잡한 인증요구를 하며, AP이외의 RADIUS Server를 통하여 인증까지 지원한다.
그래서 WPA/WPA2 Enterprise는 아래와 같은 추가적인 인증 프로토콜을 지원(TLS) 
  1. EAP(Extensible Authentication Protocol)
  2. PEAP(Protected_Extensible_Authentication_Protocol)
WPA/WPA2 Enterprise 기반하에 사용되는 인증하는 Protocol 통신이라고 생각하면 되겠다.
구조를 보면, SSL과 TLS를 이해한다면 대충은 이해가 가능하다. 
EAP를 보면 각각 역할이 있으며, TLS처럼 키교환, 인증, 암호화 각각 나뉘어져 있으므로, 세부적으로 알고자 하면, EAP Method를 자세히 알아야 한다. 

  • 관련용어 세부사항 
EAP/PEAP/TLS 및 관련하여 Wiki를 참고해서 보자.
  https://en.wikipedia.org/wiki/Extensible_Authentication_Protocol
  https://ko.wikipedia.org/wiki/%ED%99%95%EC%9E%A5_%EA%B0%80%EB%8A%A5_%EC%9D%B8%EC%A6%9D_%ED%94%84%EB%A1%9C%ED%86%A0%EC%BD%9C
  https://en.wikipedia.org/wiki/Protected_Extensible_Authentication_Protocol
  https://en.wikipedia.org/wiki/Transport_Layer_Security


우선 아래의 인증을 이해하기위해서는 기본적인 TLS에 대해서 이해를 해야한다. 

  • 다양한 EAP-x 관련 내용 
다양한 EAP 관련기능들을 소개하고 있으므로, 한번 보자.
  1. EAP-TLS
  2. EAP-PEAP/MSCHAPv2 (both PEAPv0 and PEAPv1)
  3. EAP-PEAP/TLS (both PEAPv0 and PEAPv1)
  4. EAP-PEAP/GTC (both PEAPv0 and PEAPv1)
  5. EAP-PEAP/OTP (both PEAPv0 and PEAPv1)
  6. EAP-PEAP/MD5-Challenge (both PEAPv0 and PEAPv1)
  7. EAP-TTLS/EAP-MD5-Challenge
  8. EAP-TTLS/EAP-GTC
  9. EAP-TTLS/EAP-OTP
  10. EAP-TTLS/EAP-MSCHAPv2  
  11. 기타 등등 
  http://w1.fi/wpa_supplicant/


2.3 WLAN의 인증 및 세부사항 

아래의 내용을 참고하면될 것 같다.

  http://etutorials.org/Networking/802.11+security.+wi-fi+protected+access+and+802.11i/Part+II+The+Design+of+Wi-Fi+Security/
  http://etutorials.org/Networking/Wireless+lan+security/Chapter+8.+WLAN+Encryption+and+Data+Integrity+Protocols/Encryption+Protocols/
  http://etutorials.org/Networking/Wireless+lan+security/Chapter+8.+WLAN+Encryption+and+Data+Integrity+Protocols/Key+Management/
  http://etutorials.org/Networking/Wireless+lan+security/Chapter+7.+EAP+Authentication+Protocols+for+WLANs/


3. WLAN의 AP와 STA의 기본동작구조  

  • AP와 STA의 기본구조 
  1. ctrl i/f: GUI or wpa_cli/hostapd_cli 로 부터 control event를 받아제어   
  2. l2_packet: socket으로 L2와 연결하여, Network 상태를 읽거나 , Ether type를 변경한다. 
  3. Driver API:  APP에서 kernel driver를 연결하는 통로이며 wext 나 nl80211 혹은 개별 vendor driver로 연결하여 실제 chip 제어 (ndiswrapper : window)


  • STA(Station,wpa_supplicant)
STA의 경우, EAP기반의 TLS와 암호화 기능을 제공하고 있다. 





  • AP(hostapd)
AP의 경우, 상위에서 언급했듯이 WPA/WPA2 Enterprise를 제공하기 위해서 RADIUS Client를 제공을 한다. 





관련출처
  http://w1.fi/wpa_supplicant/devel/


3. WLAN의 동작 Mode 

WLAN은 동작모드는 두가지이며, infrastructure mode 와 ad hoc mode 존재한다.

  • infrastructure mode 
현재 사용하는 AP(Access Point)와 STA(Station)을 두고 통신하는 구조로 STA끼리 통신하고자 한다면,
반드시 AP를 걸쳐 통신하도록 구현이 되어있는 구조이다.

  • ad hoc mode
상위모드와 달리 P2P(peer to peer)방식으로 STA(Station)끼리 직접 통신을 할때 사용되는 mode이다.
이와 유사한것이 Wifi Direct 이지만, Wifi Direct는 infrastructure mode에서 동작한다.


3.1 infrastructure mode


   • STA (Station) infrastructure mode

STA은 Client 즉 단말이고, default 모드이라고 한다 , 상위에서도 설명했지만, 2개의 STA들이 통신을 할수 없고, AP를 걸쳐야하는 구조이기때문에,
먼저 STA이 AP에 접속을 해야한다. 이때 필요한 것이 AP와STA간의 인증이 존재하는데, 다양하게 존재한다.

이 모드를 WEXT tools (iwconfig) 안에서는 Managed Mode라고도 부른다.


    • AP(Access Point, Hotspot) infrastructure mode

managed 된 network에서 AP로 Master Mode로 동작하며,이는 network를 관리하고 유지를 해준다.
주목적은 STA를 관리 및 제어 등 여러가지 설정을 하게된다.
Linux에서 이를 사용하기 위해서, hostapd가 사용되어진다.

STA와 AP를 사용을 동시에 동작 가능하도록도 하는 것도 가능한데, 핸드폰의 Hotspot 역시 AP 기능으로서 사용하는 것이다.

  https://en.wikipedia.org/wiki/Wireless_access_point


  • WiFi Direct 
AP없이 P2P로  연결되는 것이 기본개념은 ad hoc mode와 동일하지만, 구조가 다르다고 한다.
처음 P2P로 연결할때, 누가 AP/STA 동작할 것인지에 대해 결정하고 동작한다고 한다.
WiFi Direct는 Single hop Network 이며, ad hoc는 multi-hop 이라고 한다.
WiFi Direct와 ad hoc의 중요한 차이점은 WiFi Direct는 WPA2에 의해 보호되고 있으며, 전형적인 WiFi speed와 range를 가지고 있다고 한다.

아직 직접 사용해본적이 없어 관련자료만 수집한다.


WPA Supplicant 의 P2P(WIFI Direct)
  http://w1.fi/wpa_supplicant/devel/p2p.html

Raspberry Pi WIFI Direct 설정 
  https://tomaketech.tistory.com/21
3.2 ad-hoc mode

    • Ad-hoc (IBSS) Mode     

Ad-hoc모드는 IBBS(Independent Basic Service Set) 모드로 알려져있으며, Peer to Peer 방식으로 AP의 도움 없이 통신이 가능하다.
IBBS에 있는 개별 STA이 서로 조절을 하며 P2P(Peer to Peer)로  그 이상이  가능하도록  되어 있다고 한다.
장점은 일 대 일 , 그 이상이 되고, 인증을 거치지 않고 AP 없이 직접 통신하고 전송속도 및 전송범위 또한 개선된다.

  https://en.wikipedia.org/wiki/Wireless_ad_hoc_network
  https://en.wikipedia.org/wiki/Ad_hoc_network
  https://en.wikipedia.org/wiki/Mobile_ad_hoc_network


3.3 WIFI 그 외 다른 모드

아래 부분 Mode들은 각각의 소스들이 존재하지만, 각각의 정확한 역할과 사용용도를 모르기에, 관련된 부분을 언급한다.

  1. Wireless Distribution System (WDS) mode
  2. Monitor (MON) mode
  3. Mesh Mode 
  http://linuxwireless.sipsolutions.net/en/users/Documentation/modes/


  • WDS(Wireless Distribution System) mode
AP가 다양한 AP들 사용하여 네트워크를 확장하는 개념인 것 같다. 기본적으로 네트워크를 분배하는 시스템

  https://en.wikipedia.org/wiki/Wireless_distribution_system
  http://linuxwireless.sipsolutions.net/en/users/Documentation/iw/#Setting_up_a_WDS_peer
  http://linuxwireless.sipsolutions.net/en/users/Documentation/iw/#Using_4-address_for_AP_and_client_mode


  • MON(Monitor) Mode
passive-only mode, 즉, 어떤 frame도 전송을 할 수 없으며, Monitor 하는 기능으로 모든 들어온 Packet 을 Host Computer에게 전달해주는 역할
한마디로 Packet Sniffer 역할로, 보통 현재 동작 중인 WIFI Packet를 쉽게 잡아 분석할 수 있다.
이는 각 WIFI Driver 혹은 Chip 제조사에서 지원을 해줘야 가능하며, 이 기능이 제공되면 Packet Sniffering 가능하다.    

  • Mesh Mode 
그물망(Mesh) 일반적인 LAN에서도 Router를 통해 구성될 수 있는 Network 망이다. 
WIFI에서는 상위 Infra의 AP/STA가 단일 버스 구조가 아닌 Mesh로  구성하여, 사용하려는 것 같은데, 아직 WIFI에서 직접 구성을 본 적 없다.
다만, Mesh로 구성할 경우, 항상 Routing 알고리즘도 필요할 것으로 생각되어진다. 
  https://en.wikipedia.org/wiki/Mesh_networking
  https://en.wikipedia.org/wiki/Wireless_mesh_network


4. 출처 및 관련사항 

WLAN 관련내용
  https://en.wikipedia.org/wiki/Wireless_LAN
  http://wireless.kernel.org/en/users/Documentation/modes
  http://www.haifux.org/lectures/206/wirelessLec.pdf

2/10/2014

추후 삭제할 것 (3개로 분리 후 삭제) Android WIFI 기본구조


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     
                        addr: packages/apps/Settings/src/com/android/settings/wifi/


  • WIFI SDK          
                        * files-1: WifiConfiguration.java , ScanResult.java , WifiInfo.java ,
                                 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


  • WIFI JNI
                        * file: frameworks/base/core/jni/android_net_wifi_Wifi.cpp
                          or
                        * file: frameworks/base/core/jni/android_net_wifi_WifiNative.cpp

  • WIFI HAL
                        * file: hardware/libhardware_legacy/wifi/wifi.c     
                         
(driver load & control)

  • WPA_Supplicant Controller
                        * file: external/wpa_supplicant_8/src/common/wpa_ctrl.c


  • 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와 연결되어, Data 통신을 한다.
            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


                      cfg80211cfg80211은 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/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
                            * files-1: WifiService.java,ConnectivityService.java
                            * files-2: NetworkManagementService.java , NativeDaemonConnector.java

                            * addr: frameworks/base/services/java/com/android/server/


    • WIFI JNI
                            * files: CommandListener.cpp, TetherController.cpp, NatController.cpp, SoftapController.cpp
                              
                            * addr: system/netd/

    • WIFI HAL
                            file: hardware/libhardware_legacy/wifi/wifi.c   
                             
    (driver load & control)

    • WPA_Supplicant (hostapd)
                      
                      Network Driver control       
                            * file: src/l2_packet/l2_packet_linux.c

                          
                      Driver wrapper by using socket
                            * filesrc/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 

    • WIFI Direct API Guide 
                            - link: http://developer.android.com/guide/topics/connectivity/wifip2p.html
    • WIFI SDK          
                            * files: WifiP2pConfig.java , WifiP2pDevice.java, WifiP2pDeviceList.java ,
                                       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
                            - 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
                            * file: frameworks/base/core/jni/android_net_wifi_Wifi.cpp
                              or
                            * file: frameworks/base/core/jni/android_net_wifi_WifiNative.cpp

    • WIFI HAL
                            file: hardware/libhardware_legacy/wifi/wifi.c   
                             
    (driver load & control)

    • WPA_Supplicant Controller
                            * file: external/wpa_supplicant_8/src/common/wpa_ctrl.c


    • 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
                            * filesrc/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

    • 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