상위 WIFI AP/STA Application 프로그램구조를 보면 거의 인증은 필수로 관련되어 동작이 되어지는 것을 알수 있다.
그리고, 더불어 Network Device Driver의 제어하는 부분이지 실제로 통신을 담당하는 것이 아니다.
P2P도 구조를 보면 STA기반인 wpa supplicant에서 인증을 하고 DHCP Server/Client를 동작하는 것은
마치 AP/STA 동작하는 것과 비슷하다.다만 차이점을 보면 hostapd가 사용을 하지 않을 뿐이다.
WIFI 기본용어설명
https://ahyuo79.blogspot.com/2014/03/android-wifi_3.html
wpa_supplicatn/hostapd 의 Porting 및 설정
http://w1.fi/wpa_supplicant//devel/porting.html
인증 후는 WLAN Network Device Driver로 802.3 기반의 통신진행가능하며 아래와 같이 사용
netdevice 관련설명 (상위설정세부설명)
https://linux.die.net/man/7/netdevice
물론 상위설정들과 통신은 wlan이 잡힌 경우이며, 만약 문제가 있다면 ifconfig 확인후 netdevice를 다시 잡도록하자.
1.2 hostpad/wpa_supplicant의 Driver 제어 API
brctl
유선과 무선을 Bridge 역할
존재하는 Linux Driver이며, 각 특성과 AP지원여부를 확인하도록하자.
WIFI 기본용어설명
https://ahyuo79.blogspot.com/2014/03/android-wifi_3.html
- Hostpad 와 wpa supplicant 관련 자료 및 용어
wpa supplicant(Device) 와 hostapd (AP) 관련 그림확인
http://w1.fi/wpa_supplicant/devel/
상위 Application과 상관 없이 사실 Linux기반의 Network 입장에서는 Network Device Driver, 즉 WLAN이 잡히고 초기화되면 기본통신은 가능하다.
1.1 802.3 기반의 Layer2 통신
상위 Application 및 DATA 통신을 IEEE 802.11x를 일반 유선랜처럼 사용하고 있으며, 다만 인증을 위해서 L2의 설정을 바꾸어 통신을 지원한다.
상위 Application 및 DATA 통신을 IEEE 802.11x를 일반 유선랜처럼 사용하고 있으며, 다만 인증을 위해서 L2의 설정을 바꾸어 통신을 지원한다.
Socket(AF/PF_PACKET)을 직접 L2의 EtherType을 변경하여 보낸다.
IEEE 802.11 -> 802.3 변경
- 관련리눅스소스
- Ethertype (인증을 위한 L2 설정)
- Ethertype 0x888E EAPOL (EAP over LAN)
- Ethertype 0x88C7 Pre-Authentication
- Ethertype: 0x890D Fast Roaming Remote Request 802.11 management protocol
EtherType
WIFI를 사용하여도, ETher Type이 중요하므로 각 Ether Type의 종류를 알아두도록하자
nping의 ether typ 설정부분
http://w1.fi/wpa_supplicant//devel/porting.html
인증 후는 WLAN Network Device Driver로 802.3 기반의 통신진행가능하며 아래와 같이 사용
- Ethertype (IP기반 일반통신)
- Ethertype 0x0800 IPv4
- Ethertype 0x86DD IPv6
- netdevice의 IOCTL 관련설정
- SIOCGIFHWADDR : MAC Address 얻기
- SIOCGIFINDEX : Interface index 얻기
- SIOCGIFADDR : IP Addr 얻기
netdevice 관련설명 (상위설정세부설명)
https://linux.die.net/man/7/netdevice
물론 상위설정들과 통신은 wlan이 잡힌 경우이며, 만약 문제가 있다면 ifconfig 확인후 netdevice를 다시 잡도록하자.
$ ifconfig wlan0 up
1.2 hostpad/wpa_supplicant의 Driver 제어 API
brctl
유선과 무선을 Bridge 역할
존재하는 Linux Driver이며, 각 특성과 AP지원여부를 확인하도록하자.
https://wireless.wiki.kernel.org/en/users/Drivers
Linux Driver가 AP가 지원이 된다면 hostapd를 이용하여 이를 AP로 사용
http://nenunena.tistory.com/87
https://stackoverflow.com/questions/32233879/is-there-an-ethertype-field-in-802-11-header
Linux Driver가 AP가 지원이 된다면 hostapd를 이용하여 이를 AP로 사용
http://nenunena.tistory.com/87
- 802.11 to 802.3 conversion
IEEE 802.11 Frame 과 IEEE 802.3 Frame 호환성 확인
- IEEE 802.11 Packet 구조
IEEE 802.11 Layer2의 간단한 자료이며, 이 세부내역을 별도로 알아야한다.
https://en.wikipedia.org/wiki/IEEE_802.11#Layer_2_.E2.80.93_Datagrams
https://en.wikipedia.org/wiki/IEEE_802.11#Layer_2_.E2.80.93_Datagrams
Ethernet Adaptation Layer (LLC/SNAP header)
https://en.wikipedia.org/wiki/Subnetwork_Access_Protocolhttps://stackoverflow.com/questions/32233879/is-there-an-ethertype-field-in-802-11-header
http://www.uniroma2.it/didattica/TPI1/deposito/tpi1-1112-03-wlan-v1.pdf
ftp://ftp.informatik.hu-berlin.de/pub/doc/o-reilly/9780735612914/cd_contents/TrainingSlides/01_LAN_Technologies.PPT
ftp://ftp.informatik.hu-berlin.de/pub/doc/o-reilly/9780735612914/cd_contents/TrainingSlides/01_LAN_Technologies.PPT
- IETF에서 제공하는 draft자료
IPv6기반으로 IEEE802.11 Network 사용방법인데, 현재 사용하는지는 모르겠음
802.11ocb 와 각 Ethernet 호환이라고 하는데, 추후에 확인하자.
https://tools.ietf.org/id/draft-ietf-ipwave-ipv6-over-80211ocb-20.html
https://tools.ietf.org/id/draft-ietf-ipwave-ipv6-over-80211ocb-20.html#epd
Roaming 구조
https://www.cs.auckland.ac.nz/courses/compsci314s1t/lectures/314s1-17-19-ether-4up.pdf
mac80211에서 802.11->802.3 변환 (RX)
http://lists.shmoo.com/pipermail/hostap/2011-November/024595.html
https://stackoverflow.com/questions/31717697/how-to-real-time-convert-ethernet-packet-to-wireless-packet
ieee80211_data_to_8023_exthdr
https://elixir.bootlin.com/linux/latest/source/net/wireless/util.c#L412
https://elixir.bootlin.com/linux/latest/source/net/mac80211/rx.c#L2407
https://elixir.bootlin.com/linux/latest/source/net/mac80211/rx.c#L2609
mac80211에서 802.11->802.3 변환
https://www.ietf.org/rfc/rfc1042.txt
https://elixir.bootlin.com/linux/latest/source/net/mac80211/tx.c#L2400
ieee80211_build_hdr
https://wiki.linuxfoundation.org/networking/wireless/txformat
http://80211notes.blogspot.com/2014/
WPA Supplicant 와 Device driver 사이의 interface 및 device driver 구조를 말하며, 최신 interface는 nl80211/cfg80211과 ext를 지원하지만 이전 것은 ext를 지원 한다.
https://tools.ietf.org/id/draft-ietf-ipwave-ipv6-over-80211ocb-20.html
https://tools.ietf.org/id/draft-ietf-ipwave-ipv6-over-80211ocb-20.html#epd
Roaming 구조
https://www.cs.auckland.ac.nz/courses/compsci314s1t/lectures/314s1-17-19-ether-4up.pdf
mac80211에서 802.11->802.3 변환 (RX)
http://lists.shmoo.com/pipermail/hostap/2011-November/024595.html
https://stackoverflow.com/questions/31717697/how-to-real-time-convert-ethernet-packet-to-wireless-packet
ieee80211_data_to_8023_exthdr
https://elixir.bootlin.com/linux/latest/source/net/wireless/util.c#L412
https://elixir.bootlin.com/linux/latest/source/net/mac80211/rx.c#L2407
https://elixir.bootlin.com/linux/latest/source/net/mac80211/rx.c#L2609
mac80211에서 802.11->802.3 변환
https://www.ietf.org/rfc/rfc1042.txt
https://elixir.bootlin.com/linux/latest/source/net/mac80211/tx.c#L2400
ieee80211_build_hdr
- Full MAC / Soft MAC
https://wiki.linuxfoundation.org/networking/wireless/txformat
http://80211notes.blogspot.com/2014/
2. WPA Supplicant Driver APIs
WPA Supplicant 와 Device driver 사이의 interface 및 device driver 구조를 말하며, 최신 interface는 nl80211/cfg80211과 ext를 지원하지만 이전 것은 ext를 지원 한다.
- A. Driver-Wrapper (WPA Supplicant 와 Driver Interface)
오래된 driver framework이며,보편적으로 많이 사용되었다.이 것을 버리는 이유는, WE는 ioctl 기반으로 user와 kernel사이를 통신
하지만 몇가지 이유로, 앞으로 cfg80211/nl80211가 이를 대체가 될 것이다.
http://w1.fi/wpa_supplicant//devel/driver__wext_8c.html
nl80211
http://w1.fi/wpa_supplicant//devel/driver__wext_8c.html
nl80211
nl80211는 새로운 netlink interface이며, cfg80211함께 WE를 대체한다.
nl80211이 사용되어지는 곳은 iw( iwconfig ) ,crda , hostapd,wpa_supplicant
nl80211이 사용되어지는 곳은 iw( iwconfig ) ,crda , hostapd,wpa_supplicant
이외 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
• mac80211 :
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
https://www.kernel.org/doc/html/v4.9/80211/mac80211.html
HW scan diagram
http://wireless.kernel.org/en/developers/Documentation/mac80211/hw-scan
Linux Install Driver 및 관련용어
https://www.aircrack-ng.org/doku.php?id=install_drivers
https://wireless.wiki.kernel.org/en/developers/documentation/mac80211
https://www.kernel.org/doc/html/latest/driver-api/80211/
• cfg80211:
STA는 Kernel안 에 MLME과 함게 구현이 되어있으며,AP는 Userspace에서 구현됨.
* FullMac device은 이를 사용하지 않습니다.
auth/assoc/deauth diagram
http://wireless.kernel.org/en/developers/Documentation/mac80211/auth-assoc-deauth
https://www.kernel.org/doc/html/v4.9/80211/mac80211.html
HW scan diagram
http://wireless.kernel.org/en/developers/Documentation/mac80211/hw-scan
Linux Install Driver 및 관련용어
https://www.aircrack-ng.org/doku.php?id=install_drivers
https://wireless.wiki.kernel.org/en/developers/documentation/mac80211
https://www.kernel.org/doc/html/latest/driver-api/80211/
• cfg80211:
cfg80211은 WE를 대체하는 configuration API로 , 구조는 nl80211가 kernel 제어를 하기위해서
cfg80211를 통해 제어한다. WE는 현재 유지를 하고,기능추가를 하지 않을 것이며, 나중에는 cfg80211를 거쳐서
설정하게 될 것이다 (하위 호완성, CONFIG_CFG80211_WEXT),앞으로 WE의 필요가 없다면, 가능하다면
제거 할것이며, cfg80211는 wireless-regdb를 통한 full regulatory 과 CRDA의 사용을 제공 할 것이다.
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 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
https://stackoverflow.com/questions/21456235/how-nl80211-library-cfg80211-work
4. 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
5. 숙지용어
STA: Station의 약자.
WNIC: Wiress Network Interface Controller
MLME: (MAC) Sublayer Managemt Entity 의 약자로, PHY MAC의 존재를 알려주고,MAC의 기본기능을 수행한다.
FullMAC: MLME 스택이 hardware로 관리되며 mac80211의 관리가 필요없다.
SoftMAC: MLME 스택이 소프트웨어로 관리되는 WNIC의 한 종류
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
https://stackoverflow.com/questions/21456235/how-nl80211-library-cfg80211-work
4. 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
5. 숙지용어
STA: Station의 약자.
WNIC: Wiress Network Interface Controller
MLME: (MAC) Sublayer Managemt Entity 의 약자로, PHY MAC의 존재를 알려주고,MAC의 기본기능을 수행한다.
FullMAC: MLME 스택이 hardware로 관리되며 mac80211의 관리가 필요없다.
SoftMAC: MLME 스택이 소프트웨어로 관리되는 WNIC의 한 종류