2009년 08월 08일
802.11 in Linux
Linux에서 네트워크디바이스를 동작시키기 위해서는 (1)유저레벨 API, (2)네트워크프로토콜스택(L2~L4), 그리고 디바이스를 직접 제어하는 (3)디바이스드라이버(L1~L2)가 필요하다. SoftMAC을 사용하는 무선랜디바이스(Atheros계열포함)에서는 자체 드라이버에 포함된 디바이스 고유의 L2프로토콜스택 혹은 리눅스의 mac80211이라는 공용 L2프로토콜스택과 함께 Wireless Extensions이라는 API를 사용하게 된다. (디바이스 고유의 L2프로토콜스택은 아예 디바이스드라이버의 일부로 생각하기도 한다.)
mac80211 (802.11 Protocol Stack)
2006년부터 John Linville의 주도로 개발되기 시작했으며 (초기에는 d80211로 불리우기도 했음) 커널 2.6.22부터 포함되었다. mac80211에서 AP(Access Point)모드동작은 hostapd를 통해 유저스페이스에 이루어지고 있지만 STA모드동작은 아직까지 커널스페이스에서 이루어 지고 있으며 조만간에 유저스페이스로 옮겨질 예정이다. mac80211은 멀티SSID지원을 위해 한개의 마스터인터페이스(wmaster*)와 한개이상의 가상인터페이스(wlan*)를 만드는 방법을 사용하고 있다. FullMAC을 사용하는 무선랜디바이스들의 경우 디바이스의 펌웨어/로직이 자체적인 L2프로토콜스택(MLME:MAC Layer Management Entity)을 포함하므로 mac80211을 필요로 하지 않고 자체적으로 동작한다.
Wireless Extensions (WE/WEXT)
1996년부터 HP랩의 Jean Tourrilhes라는 사람의 주도로 만들어진 API이며, 흔히 사용되는 iwconfig라는 커맨드명령어도 이 API에서 지원한다. WE는 유저스페이스와 커널스페이스간의 통신을 위해 ioctl함수를 사용하는데 이 함수는 몇가지 치명적인 문제점을 가지고 있어서 이를 대신하기 위해 현재 cfg80211/nl80211이 개발중에 있다.
cfg80211/nl80211 (WE Replacement)
cfg80211은 WE의 Configuration-API부분을 대신하여 무선랜디바이스의 설정을 담당한다. nl80211은 cfg80211과 유저스페이스를 연결하며 WE의 ioctl-based netlink 인터페이스를 대신한다. cfg80211은 디바이스등록을 위해 새로운 wiphy 구조체를 사용하며, 현재 iw, crda, hostapd, wpa_supplicant 등의 여러 애플리케이션이 이를 지원하고 있한다. OpenWrt에서는 libnl 풀버젼에서 netfilter관련부분과 rtnetlink를 뺀 미니버젼인 libnl-tiny을 함께 제공하고 있다.
madwifi/ath5k/ath9k driver
Atheros계열의 802.11a/b/g 디바이스를 지원하는 madwifi 드라이버는 자체적인 L2프로토콜스택과 하드웨어를 제어하는 HAL, 그리고 WE를 사용한다. 그러나 ath5k/ath9k는 L2프로토콜스택으로 공용 mac80211을 사용하기 때문에 간단한 low-level 부분만을 포함하며 디바이스를 기존madwifi의 HAL바이너리없이 직접 제어한다.
mac80211 (802.11 Protocol Stack)
2006년부터 John Linville의 주도로 개발되기 시작했으며 (초기에는 d80211로 불리우기도 했음) 커널 2.6.22부터 포함되었다. mac80211에서 AP(Access Point)모드동작은 hostapd를 통해 유저스페이스에 이루어지고 있지만 STA모드동작은 아직까지 커널스페이스에서 이루어 지고 있으며 조만간에 유저스페이스로 옮겨질 예정이다. mac80211은 멀티SSID지원을 위해 한개의 마스터인터페이스(wmaster*)와 한개이상의 가상인터페이스(wlan*)를 만드는 방법을 사용하고 있다. FullMAC을 사용하는 무선랜디바이스들의 경우 디바이스의 펌웨어/로직이 자체적인 L2프로토콜스택(MLME:MAC Layer Management Entity)을 포함하므로 mac80211을 필요로 하지 않고 자체적으로 동작한다.
Wireless Extensions (WE/WEXT)
1996년부터 HP랩의 Jean Tourrilhes라는 사람의 주도로 만들어진 API이며, 흔히 사용되는 iwconfig라는 커맨드명령어도 이 API에서 지원한다. WE는 유저스페이스와 커널스페이스간의 통신을 위해 ioctl함수를 사용하는데 이 함수는 몇가지 치명적인 문제점을 가지고 있어서 이를 대신하기 위해 현재 cfg80211/nl80211이 개발중에 있다.
cfg80211/nl80211 (WE Replacement)
cfg80211은 WE의 Configuration-API부분을 대신하여 무선랜디바이스의 설정을 담당한다. nl80211은 cfg80211과 유저스페이스를 연결하며 WE의 ioctl-based netlink 인터페이스를 대신한다. cfg80211은 디바이스등록을 위해 새로운 wiphy 구조체를 사용하며, 현재 iw, crda, hostapd, wpa_supplicant 등의 여러 애플리케이션이 이를 지원하고 있한다. OpenWrt에서는 libnl 풀버젼에서 netfilter관련부분과 rtnetlink를 뺀 미니버젼인 libnl-tiny을 함께 제공하고 있다.
madwifi/ath5k/ath9k driver
Atheros계열의 802.11a/b/g 디바이스를 지원하는 madwifi 드라이버는 자체적인 L2프로토콜스택과 하드웨어를 제어하는 HAL, 그리고 WE를 사용한다. 그러나 ath5k/ath9k는 L2프로토콜스택으로 공용 mac80211을 사용하기 때문에 간단한 low-level 부분만을 포함하며 디바이스를 기존madwifi의 HAL바이너리없이 직접 제어한다.
# by | 2009/08/08 00:16 | Embedded System | 트랙백 | 덧글(2)





☞ 내 이글루에 이 글과 관련된 글 쓰기 (트랙백 보내기) [도움말]