2014-01-30 3 views
34

nl80211cfg80211이 어떻게 작동하는지 자세히 알고 싶습니다. 기능 흐름, wpa_supplicant, iw과 같은 네트워크 도구와 상호 작용하는 방법은 nl80211입니다.nl80211 라이브러리 및 cfg80211 작동 방법은 무엇입니까?

Plz 내게 유용한 링크 나 책을 제안 해주세요.

+2

이 질문은 주제와 관련이 없습니다. 간략한 개요 [도움/주제에] – sigjuice

답변

46

사용자 공간에서 무선 드라이버를 제어하려면 커널과 사용자 공간 간의 일부 IPC 통신 프로세스가 사용됩니다.

  • 처음에는 ioctl과 벤더 종속 API가 사용되었습니다.
  • 1996 년 Jean Tourrilhes는 wireless extensions (WE 또는 WEXT)을 만듭니다.

무선 확장 (WE)는 에 드라이버가 일반적인 무선 LAN에 특정 사용자 공간 구성 및 통계에 노출 허용하는 일반적인 API입니다. 2006 년

  • , 존 Linville는 mac80211 만들고 요하네스 버그는 cfg80211nl80211 만듭니다. 함께 무선 확장을 대체하기위한 것입니다.

    +-------------+ 
    |    | 
    | Userspace | 
    |    | 
    +-------------+ 
        ^
    - - - | - - - - 
         | nl80211 
         v 
    +-------------+ 
    |    | 
    | cfg80211 | 
    |    | 
    +-------------+ 
    +-------------+ 
    |    | 
    | mac80211 | 
    | driver | 
    |    | 
    +-------------+ 
    

중요한 점

는 nl80211/cfg80211/mac80211가 더 이상 IOCTL을 사용하지 않는 것을, 그들이 netlink를 사용합니다.

그래서, 도구 iw, hostapd 또는 wpa_supplicant 같은 일부 넷 링크 라이브러리 (같은 libnl 또는 libnl-tiny) 물론 nl80211.h의 인 넷 링크 인터페이스 공공 헤더를 사용합니다.

많은 문서가 없지만 libnl documentationiw source code (iw은 libnl을 사용하기 때문에)을 읽으라고 조언합니다. 의

+0

고맙습니다. – Rafal

+0

nl80211은 사용자 공간과 커널 공간 간의 인터페이스 역할을합니다 ..... 어떤 점에서 제어 흐름이 사용자 공간에서 커널 공간으로 이동하는지 이해하는 데 어려움이 있습니다. – Rafal

+0

[this] (http : //www.carisma.slowglass .com/~ tgr/libnl/doc/core.html # core_netlink_fundamentals). Netlink는 커널과 사용자 공간 사이의 소켓과 비교 될 수 있습니다. 따라서 사용자는 요청 - 응답 방식 (예 : 'iw dev wlan0 link') 및/또는 이벤트 방식 (예 :'iw dev wlan0 event')에서 사용할 수 있습니다. – jml

25

약간 더 자세한 사진을 어떻게 nl80211 시스템 (user space, kernelhardware)의 다른 부분과 cfg80211 작동합니다.

  • nl80211 사용자 공간 소프트웨어 (iw, wpa_supplicant 등) 및 커널 (cfg80211mac80211 및 커널 모듈, 특정 드라이버) 사이의 인터페이스이다.
  • WiFi 드라이버 및 하드웨어는 Full-MAC 또는 Soft-MAC 일 수 있습니다 (Wireless_network_interface_controller 참조).
  • cfg80211_ops은 전체 MAC 드라이버 및 mac80211 모듈이 cfg80211 모듈에 등록하는 작업 집합입니다.
  • ieee80211_ops은 Soft-MAC 드라이버가 mac80211 모듈에 등록하는 작업 집합입니다.

enter image description here

+0

lspci -k | grep -A 3 -i "network"는 "Kernel driver in use : iwlwifi"를 반환합니다. 그럼 modinfo iwlwifi | grep depends는 "cfg80211"을 반환합니다. 그러나 nl80211 및 mac80211에 대해 어떻게 확인할 수 있습니까? 또한 드라이버가 AP 모드를 지원하는지 여부를 어떻게 알 수 있습니까? – infoclogged

4

src/drivers/driver_nl80211.c의 코드를 따를 수, wpa_supplicant에서 How to learn the structure of Linux wireless drivers (mac80211)?

에 대한 내 대답을 참조하십시오. 이것은 wpa_supplicant 드라이버이며 커널 cfg80211과 통신하기 위해 libnl을 사용하는 커널 드라이버가 아니라 wpa_supplicant 코드에서 사용 된 추상화입니다. 예를 들어 wpa_supplicant에서 스캔을 실행하면 wpa_driver_nl80211_scan이 호출됩니다. NL80211_CMD_TRIGGER_SCAN이라는 명령과 검사에 필요한 모든 매개 변수를 사용하여 netlink 메시지를 작성합니다.