암호가 걸린 AP 에 접속할 때, 사용하는 프로그램인 WPA Supplicant 에 대한 모든 것을 설명한다.
wireless-tools 에서 지원되는 iwconfig 등의 명령어로는 None, WEP 인증 방식의 AP 만 접속이 가능했다.

하지만, 이외에 WPA/WPA2 의 TKIP/AES 같은 인증방식을 사용하는 AP에 접속하기 위해서는 별도의 프로그램이 필요하다. 그것이 바로 WPA Supplicant 이다.

준비운동하기

먼저 최신 소스코드를 다운로드 받는다. http://hostap.epitest.fi/wpa_supplicant/
빌드를 하기전에 필요한 라이브러리를 사전에 설치해야 한다.

#apt-get install libssl-dev
#apt-get install libnl-dev

컴파일 및 설치하기

#tar xjf wpa_supplicant-2.0.tar.gz
#cd wpa_supplicant-2.0
#cd wpa_supplicant
#cp defconfig .config           // 빌드에 필요한 라이브러리와 기능을 설정이 저장된 defconfig 파일을 저장
#make

성공적으로 컴파일을 마쳤다면, 'wpa_passphrase, wpa_supplicant, wpa_cli' 파일이 생성된 것을 볼 수 있다.

동작 확인

실행 설정 파일(etc/wpa_supplicant/wpa.conf)을 아래와 같이 만들어야 한다.

ap_scan=1
ctrl_interface=/var/run/wpa_supplicant

이제 wpa_supplicant 를 실행한다.

#wpa_supplicant -Dwext -i wlan0 -c /etc/wpa_supplicant/wpa.conf -B
Successfully initialized wpa_supplicant

이제 커맨드 라인(wpa_cli)를 통해 여러가지 동작을 확인할 수 있다.

wpa_cli -i wlan0
wpa_cli v2.0
Copyright (c) 2004-2012, Jouni Malinen <j@w1.fi> and contributors
 
This software may be distributed under the terms of the BSD license.
See README for more details.
 
 
 
Interactive mode
 
> 
./wpa_cli -iwlan0 -p/var/run/wpa_supplicant scan
./wpa_cli -iwlan0 -p/var/run/wpa_supplicant scan_results
bssid / frequency / signal level / flags / ssid
00:26:66:aa:e7:b4	2462	-45	[WPA-PSK-CCMP][WPA2-PSK-CCMP][ESS]	ss7
08:10:75:0f:2e:e6	2437	-75	[WPA2-PSK-CCMP][ESS]	marksman
00:40:5a:41:fd:d5	2457	-77	[WPA-PSK-TKIP][ESS]	
00:26:66:c4:a8:e4	2412	-77	[WPA-PSK-TKIP][WPA2-PSK-TKIP][ESS]	boddhisattva
00:1d:93:24:26:6c	2412	-95	[WPA-PSK-TKIP][ESS]	
00:1e:2a:6d:11:10	2462	-69	[WEP][ESS]	ITX[QA]20
00:40:5a:41:fd:d6	2457	-77	[WEP][ESS]	mkm
00:26:5a:fa:26:a4	2427	-89	[WEP][ESS]	ITX[QA]10
00:1e:e5:88:e5:6a	2422	-71	[ESS]	ITX[QA]50
7c:3e:9d:19:55:ed	2412	-87	[WEP][ESS]	
7c:3e:9d:19:55:ee	2412	-89	[WEP][ESS]	
10:f9:6f:ef:7e:f0	2427	-89	[WPA-PSK-TKIP][ESS]	
00:1f:1f:c1:97:c1	2417	-89	[WPA-PSK-TKIP][ESS]	Windy31-C1
7c:3e:9d:19:55:e9	2412	-91	[WPA2-PSK-CCMP][ESS]	HR1004

wpa_supplicant 를 실행할 때, 주는 옵션 중에 -D 인자가 있다. 이것은 드라이버 방식을 지정한다.

drivers:
  wext = Linux wireless extensions (generic)
  nl80211 = Linux nl80211/cfg80211
  wired = Wired Ethernet driver

현재 안드로이드를 제외한 WIFI 제품에서는 wext 를 사용하고, 안드로이드 기반의 제품에서는 nl80211 을 사용한다.
이 두방식의 가장 큰 차이는 WEP 보안 모드에서 동작이다.

wext 방식은 WEP-OPEN(개방모드), WEP-SHARED(공유모드) 각각 서로 다른 명령으로 접속시도를 한다. 만일 공유기가 개방모드인데, 제품에서 공유모드로 접속시도를 한다면, 접속안된다. 이와 반대의 경우도 마찬가지다.
따라서 개방모드와 공유모드에 대한 지정이 필요하고, 이를 토대로 접속을 시도하게 된다.

nl80211 방식은 WEP-OPEN(개방모드)로 접속 시도시, 공유기가 OPEN/SHARED 이든 접속이 가능하다.
하지만 WEP-SHARED(공유모드)로 접속 시도 시에는, 공유기가 OPEN 으로 지정되어 있으면, 접속이 불가능하다. 따라서 WEP 의 경우, 무조건 개방모드로 접속시도를 하면 된다.
이를 좀더 자세히 설명하자면, 이렇다.

  1. 제품에서 개방모드로 접속 시도를 한다.
  2. 공유기는 공유모드로 설정되어 있고, 제품에서의 인증 요청에 대해 지원하지 않는 알고리즘이라고 응답을 보낸다.
  3. 제품에서는 공유모드로 접속 시도를 한다.
  4. 공유기는 인증 요청에 대해 성공 응답을 보낸다.
  5. 이후 인증 과정을 거쳐 접속이 된다.

wext 가 나오고나서 nl80211 가 나온만큼 개인적으로 nl80211 방식을 선호한다.

해당 WIFI 드라이버에서 둘 중 어떤 방식을 지원하는지 알아야 한다. 드라이버마다 차이가 있겠지만, 어떤 드라이버의 경우, 한번의 빌드로 2가지 방식을 모두 사용할 수 있는 반면에, 어떤 드라이버의 경우 별도의 빌드 옵션을 추가하여 컴파일해야 하는 경우도 있기 때문이다.
드라이버 뿐만 아니라, wpa_supplicant 역시 nl80211 옵션을 추가하여 빌드해야 한다(기본설정은 enable 되어 있다). 빌드 시, libnl 라이브러리를 참조할 것이다. PC 플랫폼에서는 앞서 설치 방법대로 하면 되겠지만, 만일 임베디드 환경을 위한 크로스 컴파일을 해야 한다면, wpa_supplicant 를 빌드하기 전에 libnl 라이브러리를 먼저 크로스 컴파일 해야 한다.

접속하기

자세한 설정 방법은 다른 문서를 참고한다.

옵션 설명

wpa_supplicant.conf 파일의 예제를 통해 옵션을 설명하도록 하겠다.

update_config=0
ctrl_interface=/data/local/tmp/wpa_supplicant
eapol_version=1
ap_scan=2
fast_reauth=1
bss_max_count=2
 
network={
ssid="Android-Adhoc"
scan_ssid=1
mode=1
key_mgmt=NONE
group=WEP104
auth_alg=SHARED
wep_key0="abcdefghijklm"
bgscan="simple:10:-30:50"
}

위는 android-wifi-tether 에서 사용하는 wpa_supplicant.conf 에 적용된 설정 모드인데 해당 항목과 설명은 다음과 같다.

사용자가 와이파이를 실행하는 동안에 설정파일을 수정하고 적용할 것인가에 대한 여부이다. 만약 'update_config=1' 로 설정한다면, 설정파일을 수정하여 wpa_cli 나 password 명령어로 즉시 적용이 가능하다. 디폴트는 'update_config=0' 으로 설정된다.

관리용 인터페이스를 의미한다.

IEEE 802.1X/EAPOL(Extensible Authentication Protocol over Lan) 버전인데, IEEE 802.1X/EAPOL 은 사용자 인증과 관련된 프로토콜의 버전을 의미한다. 최근 나온 버전은 2 이고 wpa_supplicant 에서 지원 가능하지만, 과거 설치한 무선접속장치 모델들이 버전 1을 지원하고 있어 상위버전에 대한 지원에 문제가 발생할 수 있으므로 호환이 가능하도록 'eapol_version=1' 로 설정해주어야 한다.
802.1X 구조는 인증을 위한 3개의 구성요소를 가지고 있다.

  1. 신청자(Supplicant) : 인증을 통해 네트워크 망에 접속하고자 하는 사용자 또는 클라이언트를 말한다.
  2. 인증 서버(Authentication server) : 인증서버로 보통 RADIUS 서버 또는 AAA 서버라는 사용자 관리 서버이다.
  3. 인증자(Authenticator) : 클라이언트를 통해 받은 인증을 서버로 전달하는 기능을 수행하는 무선 접속 장치이다.

애드혹과 와이파이 무선접속장치를 모두 스캔하고자 한다면 'ap_scan=2' 로 선택해야 하며, 만약 와이파이 무선접속장치로만 국한하여 스캔하고자 한다면 'ap_scan=1' 로 설정한다.

디폴트는 'ap_scan=1' 인데, 여기서는 에드혹을 사용하므로 'ap_scan=2' 로 설정한다. 만약 단말기가 안드로이드라면, 'ap_scan=2' 로 설정해주어야 단말기와 테더링 기능을 수행하는 안드로이드 간에 에드혹 망으로 구성하게 된다. 만약 단말기가 윈도우를 사용하는 노트북인 경우, 윈도우 모델별로 에드혹을 지원하기도 하고 못할 수도 있다.
예를 들어 Window XP 는 에드혹과 무선접속장치 모두 스캔을 통해 인식하지만, Window7 가운데 일부 패치 버전을 설치하면 에드혹을 인식하지 못하는 문제를 가지고 있다.

EAP 인증에 관한 사항인데, 빠른 인증을 원하면 'fast_reauth=1' 로 설정해야 한다.

AP 스캔 시에 검색할 최대 개수를 지정한다. 2 라면, 최대 AP 2대를 검색한다.

네트워크로 구성되는 정보를 설정한다. 네트워크(무선 접속 장치를 중심으로 기본 서비스 집합으로 구성된 망을 '무선랜' 또는 '네트워크'로 표현한다) 정보 내용은 자바 프로그램처럼 '{' 로 시작하며, '}'으로 끝나게 된다.

다른 네트워크 망과 구분하는 데 사용되는 네트워크의 이름이다. 여기서는 Android-Adhoc 이라 하였다.

클라이언트가 네트워크에 접속하고자 한다면 해당 네트워크 망을 구성하는 와이파이 무선접속장치를 찾기 위해 프로브(클라이언트에서 접속을 요청하는 패킷을 프로브(Probe) 라 부른다. 반면에 무선접속장치에서 네트워크 내 와이파이 장치가 들어와 있는지 찾는 패킷(스캔)을 비콘(Beacon)이라 한다)라는 요청 메시지를 무선으로 전송하게 된다.

따라서 'scan_ssid=0' 은 네트워크를 스캔하지 않는다. 즉 프로브 메시지를 발송하지 않는다는 의미를 나타내며, 'scan_ssid=1' 은 접속가능한 무선접속장치(네트워크)를 스캔함을 나타낸다.
에드혹은 무선접속장치의 기능을 수행하는 동시에 클라이언트 기능을 수행한다. 따라서 에드혹은 비콘 메시지와 프로브 메시지 둘 다 주변에 발송할 수 있어야 한다.

mode 는 와이파이 디바이스가 무선접속장치로부터 무선을 수신받는 단순히 클라이언트 역할만 할 것인가 아니면 에드혹 역할을 할 것인가 하는 기능을 설정한다.
'mode=0' 이면 단순 클라이언트를 의미하게 되며, 'mode=1' 이면 에드혹(또는 P2P) 역할을 수행하게 된다.

허용 가능한 키 관리 프로토콜을 선언한다. 키 관리 프로토콜의 종류는 다음과 같다.

  1. NONE : 평문 또는 WEP 를 사용함을 나타낸다.
  2. WPA-EAP : WPA 에서 사용하는 EAP 인증 프로토콜
  3. IEEE 8021X : IEEE 802.1X 에서 사용하는 EAP 인증 프로토콜로 WEP key 를 생성한다.
  4. WPA-PSK : WPA 사전 공유키(psk 필드에서 필요로 한다)
  5. WPA-PSK-SHA256 : WPA-PSK 와 동일한데 SHA256 암호화 알고리즘을 사용한다.
  6. WPA-EAP-SHA256 : WPA-EAP 와 동일한데 SHA256 암호화 알고리즘을 사용한다.

별도 선언이 없다면 WPA-PSK 와 WPA-EAP 으로 선언되며, 사용방법은 'key_mgmt=NONE WPA-PSK WPA-EAP' 과 같이 허용 가능한 프로토콜 종류를 나열하고 공백('')으로 구분하여 주면 된다.

허용가능 한 IEEE 802.11 인증 알고리즘을 선언한다. 인증 관련 알고리즘은 아래와 같다.

  1. OPEN : WPA/WPA2 사용하는 Open System authentication
  2. SHARED : WEP 사용하는 Shared Key authentication
  3. LEAP : LEAP/Network EAP

그리고 만약 사용자가 설정하지 않는다면, 시스템 판단에 따라 허용 가능한 범위에서 자동 설정된다.

암호화에 사용하는 알고리즘의 그룹을 의미한다. 암호화의 종류는 다음과 같다.

  1. CCMP : AES 암호화(RFC 3610, IEEE 802.11i/D7.0)
  2. TKIP : Temporal Key Integrity Protocol(IEEE 802.11i/D7.0)
  3. WEP104 : WEP 의 104-bit key
  4. WEP40 : WEP 의 40-bit key(IEEE 802.11)

역시 동일하게 사용자가 설정하지 않는다면, 디폴트로 'group=CCMP TKIP WEP104 WEP40' 로 선언된다.

WEP 에서 사용하는 암호키이다. 사용하는 종류에 따라 각각 wep_key0..3 최대 4개까지 차례로 사용하게 된다. 여기서는 wep_key()=“abcdefghijklm” 로 주었는데, 암호화 키로 abcdefghijklm 를 사용한다는 것을 뜻하게 된다.

앞의 예에서는 wpa_supplicant.conf 내 네트워크의 보안 모드를 WEP104 으로 설정하였는데, 만약 이 보안모드가 마음에 걸린다면 아래와 같이 바꿔도 무방하다.
테더링 애플리케이션에서는 적용하는 보안 수준이 낮지만 테더링에서 사용하는 wpa_supplicant 에서는 거의 모든 보안 방식을 지원하고 있어 사용자에 따라 원하는 방식으로 보안을 적용할 수 있으며, 또한 어떤 key 값도 사용 가능하다. 따라서 만약 해킹이나 보안이 염려된다면 더욱 강력한 보안을 걸면 된다.

network={
ssid="test adhoc"
mode=1
frequency=2412
proto=WPA
key_mgmt=WPA-NONE
pairwise=NONE
group=TKIP
psk="secret passphrase"
}

bgscan(background scan) 을 설정한다. wpa_supplicant 는 기본적으로 접속이 안된 경우에는 주기적으로 AP scan 을 시도하지만, 일단 접속이 되고 나면, 다시 끊어지기 전까지는 AP scan 을 하지 않는다.
주기적으로 AP scan 을 하도록 하기 위해서는 auto scan 옵션을 추가한 후, AP scan 을 실행해야 한다.

bgscan 은 AP 에 접속된 이후에도 AP scan 을 하도록 설정하는 것이다. 참고로 bgscan 을 사용하기 위해서는 wpa_supplicant 빌드 옵션을 수정해야 한다. wpa_supplicant 에서 지원하는 bgscan 의 방법은 simple 과 learn 이 있다.
simple 방법은 AP 들의 신호 세기를 기반으로 한다. 아래와 같이 설정한다면,

bgscan="simple:10:-30:50"

-30 dbm 을 기준으로 최소 10초, 최대 50초 동안 scan 을 실행한다는 의미다. AP 에 접속된 이후, 주기적으로 scan 을 시도하게 된다. 이때 유의할 점은 network {} 안에서 선언해야 하는 점이다.

wpa_supplicant.conf 파일 설명

##### Example wpa_supplicant configuration file ###############################
#
# This file describes configuration file format and lists all available option.
# Please also take a look at simpler configuration examples in 'examples'
# subdirectory.
# (이 파일은 설정 파일의 형식과 모든 사용가능한 옵션들에 대해 설명하고 있다. examples 디렉토리 아래에 있는 단순한 설정 예제들 또한 보기 바란다.)
#
#
# Empty lines and lines starting with # are ignored
# (빈 줄과 # 로 시작하는 줄은 무시된다)
#
# NOTE! This file may contain password information and should probably be made
# readable only by root user on multiuser systems.
# (주의! 이 파일은 비밀번호를 포함할 수도 있고, 멀티유저 시스템 상의 루트에 의해 오직 읽혀질 수도 있다.)
#
# Note: All file paths in this configuration file should use full (absolute,
# not relative to working directory) path in order to allow working directory
# to be changed. This can happen if wpa_supplicant is run in the background.
# (주의: 이 설정 파일 안에 모든 파일 경로는 모두 사용할수도 있다(오직, 작업 디렉토리에 상관없이) 작업디렉토리를 허용하기 위해 수정되어야 한다.)
# (만일 wpa_supplicant 를 백그라운드에서 실행한다면, 수정이 필요할 것이다.)
#
# Whether to allow wpa_supplicant to update (overwrite) configuration
# (설정을 갱신하고 wpa_supplicant 에 적용하기 위해서 어떻게 해야 하나?)
#
# This option can be used to allow wpa_supplicant to overwrite configuration
# file whenever configuration is changed (e.g., new network block is added with
# wpa_cli or wpa_gui, or a password is changed). This is required for
# wpa_cli/wpa_gui to be able to store the configuration changes permanently.
# Please note that overwriting configuration file will remove the comments from
# it.
#update_config=1
# (이 옵션은 설정 파일이 수정될 때마다(예를들면, 새로운 네트워크 블럭이 wpa_cli 또는 wpa_gui 로부터 추가되거나, 또는 비밀번호가 바뀌었을 때) 설정파일을 갱신하고 wpa_supplicant 에 적용하는 데 사용한다. 
# (이것은 wpa_cli/wpa_gui 로 영구적으로 설정을 수정하여 저장하는 것을 요구한다.)
# (갱신하는 설정 파일은 주석들을 삭제할 것이다.)
 
# global configuration (shared by all network blocks)
# (전체 설정 (모든 네트워크 블럭들에 의해 공유되어짐))
#
# Parameters for the control interface. If this is specified, wpa_supplicant
# will open a control interface that is available for external programs to
# manage wpa_supplicant. The meaning of this string depends on which control
# interface mechanism is used. For all cases, the existence of this parameter
# in configuration is used to determine whether the control interface is
# enabled.
# (컨드롤 인터페이스를 위한 파라메터들. 만일 이것이 명시되어 있다면, wpa_supplicant 는 콘트롤 인터페이스를 오픈할 것이다. 이 인터페이스는 외부 프로그램들이 wpa_supplicant 를 관리하기 위해 사용가능하다.)
# (콘트롤 인터페이스 메커니즘에 의존적인 이 문자열은 사용된다. 모든 경우를 위해, 설정 파일에 이 파라메터가 존재하면, 어떤 컨트롤 인터페이스를 활성화할지 결정하는데 사용한다.)
#
# For UNIX domain sockets (default on Linux and BSD): This is a directory that
# will be created for UNIX domain sockets for listening to requests from
# external programs (CLI/GUI, etc.) for status information and configuration.
# The socket file will be named based on the interface name, so multiple
# wpa_supplicant processes can be run at the same time if more than one
# interface is used.
# /var/run/wpa_supplicant is the recommended directory for sockets and by
# default, wpa_cli will use it when trying to connect with wpa_supplicant.
#
# (유닉스 도메인 소켓(리눅스와 BSD 의 기본)을 위한 방법 : 이것은 정보의 상태와 설정을 위해 외부 프로그램(CLI/GUI 등)으로부터 요청을 듣기위한 유닉스 도메인 소켓을 생성할 디렉토리이다.)
# (소켓파일은 인터페이스 이름을 기반으로 만들어지고, 만일 하나 이상의 인터페이스를 사용한다면, 여러개의 wpa_supplicant 프로세스들이 동시에 실행할 수 있다.)
# (/var/run/wpa_supplicant 는 기본으로 소켓을 위해 추천하는 디렉토리다. wpa_cli 은 wpa_supplicant 에 연결할 때 사용된다.)
#
# Access control for the control interface can be configured by setting the
# directory to allow only members of a group to use sockets. This way, it is
# possible to run wpa_supplicant as root (since it needs to change network
# configuration and open raw sockets) and still allow GUI/CLI components to be
# run as non-root users. However, since the control interface can be used to
# change the network configuration, this access needs to be protected in many
# cases. By default, wpa_supplicant is configured to use gid 0 (root). If you
# want to allow non-root users to use the control interface, add a new group
# and change this value to match with that group. Add users that should have
# control interface access to this group. If this variable is commented out or
# not included in the configuration file, group will not be changed from the
# value it got by default when the directory or socket was created.
#
# (콘트롤 인터페이스를 위한 액세스 컨트롤은 소켓을 사용하는 그룹의 멤버들만 오직 허용하기 위해서는 디렉토리를 세팅함으로써 설정될 수 있다.)
# (이 방법은 루트(네트워크 설정을 바꾸고 raw 소캣을 열기를 원할 때)로서 wpa_supplicant 를 실행을 가능하게 한다. 그리고 GUI/CLI 컴포넌트들을 루트가 아닌 유저들도 실행할 수 있도록 허용한다. 그러나 네트워크 설정을 바꾸기 위해 콘트롤 인터페이스를 사용하여 접근하는 것은 많은 경우에 보호되어야 한다.)
# (기본적으로, wpa_supplicant 는 root 가 사용하도록 설정된다. 만일 root 가 아닌 사용자가 콘트롤 인터페이스를 사용하길 허용하고 싶다면, 그룹을 추가하고 그룹에 맞는 값을 바꿔줘야 한다. 추가된 사용자는 이 그룹에서 콘트롤 인터페이스에 접근할 수 있다. 만일 이 변수가 주석처리(comment out) 되어 있거나, 설정 파일 안에 포함되어있지 않으면, 그룹은 디렉토리 또는 소켓을 생성할 때, 기본적으로 변경할 수 없다.)
#
# When configuring both the directory and group, use following format:
# DIR=/var/run/wpa_supplicant GROUP=wheel
# DIR=/var/run/wpa_supplicant GROUP=0
# (group can be either group name or gid)
#
# (디렉토리와 그룹 둘다 설정할 때, 다음의 포맷을 사용한다.)
# (그룹은 그룹 이름 또는 gid 를 사용할 수 있다.)
#
# For UDP connections (default on Windows): The value will be ignored. This
# variable is just used to select that the control interface is to be created.
# The value can be set to, e.g., udp (ctrl_interface=udp)
#
# (UDP 연결을 위한 방법(윈도우에서는 기본) : 이 값은 무시될 것이다. 이 변수는 콘트롤 인터페이스가 생성되고 단지 선택하기위해 사용된다.)
# (이 값은 다음과 같이 설정할 수 있다. ex) udp (ctrl_interface=upd))
#
#
#
# For Windows Named Pipe: This value can be used to set the security descriptor
# for controlling access to the control interface. Security descriptor can be
# set using Security Descriptor String Format (see http://msdn.microsoft.com/
# library/default.asp?url=/library/en-us/secauthz/security/
# security_descriptor_string_format.asp). The descriptor string needs to be
# prefixed with SDDL=. For example, ctrl_interface=SDDL=D: would set an empty
# DACL (which will reject all connections). See README-Windows.txt for more
# information about SDDL string format.
#
# (윈도우 파이브를 이용한 방법 : 이 값은 콘트롤 인터페이스에 접근하여 콘트롤하기 위한 security descriptor 를 설정하는데 사용한다.)
# (Security descriptor 은 Security Descriptor String Format 을 사용할 때 설정한다. descriptor string 은 SDDL= 접두사를 필요로 한다. 예를들면, ctrl_interface=SDDL=D: 는 텅빈 DACL(모든 연결을 거부하는)을 설정한다. README-Windows.txt 를 읽으면 SDDL string 포맷에 대해 더 많은 정보를 얻을 수 있다.)
#
#
ctrl_interface=/var/run/wpa_supplicant
 
# IEEE 802.1X/EAPOL version
# wpa_supplicant is implemented based on IEEE Std 802.1X-2004 which defines
# EAPOL version 2. However, there are many APs that do not handle the new
# version number correctly (they seem to drop the frames completely). In order
# to make wpa_supplicant interoperate with these APs, the version number is set
# to 1 by default. This configuration value can be used to set it to the new
# version (2).
eapol_version=1
 
# (IEEE 802.1X/EAPOL version)
# (wpa_supplicant 는 EAPOL 버전 2 가 정의된 IEEE Standard 802.1X-2004 기반으로 실행된다. 그러나 그것은 정확한 새로운 버전 넘버(완전하게 프레임이 삭제되어 보인다)를 핸들링할 수 없는 많은 AP 들이다.)
# (wpa_supplicant 가 AP 들 사이에서 동작되기 위해서는 버전 넘버가 기본적으로 1로 설정된다. 이 설정값은 새로운 버전(2)을 설정하는데 사용된다.  
#
#
# AP scanning/selection
# By default, wpa_supplicant requests driver to perform AP scanning and then
# uses the scan results to select a suitable AP. Another alternative is to
# allow the driver to take care of AP scanning and selection and use
# wpa_supplicant just to process EAPOL frames based on IEEE 802.11 association
# information from the driver.
# 1: wpa_supplicant initiates scanning and AP selection; if no APs matching to
#    the currently enabled networks are found, a new network (IBSS or AP mode
#    operation) may be initialized (if configured) (default)
# 0: driver takes care of scanning, AP selection, and IEEE 802.11 association
#    parameters (e.g., WPA IE generation); this mode can also be used with
#    non-WPA drivers when using IEEE 802.1X mode; do not try to associate with
#    APs (i.e., external program needs to control association). This mode must
#    also be used when using wired Ethernet drivers.
# 2: like 0, but associate with APs using security policy and SSID (but not
#    BSSID); this can be used, e.g., with ndiswrapper and NDIS drivers to
#    enable operation with hidden SSIDs and optimized roaming; in this mode,
#    the network blocks in the configuration file are tried one by one until
#    the driver reports successful association; each network block should have
#    explicit security policy (i.e., only one option in the lists) for
#    key_mgmt, pairwise, group, proto variables
# When using IBSS or AP mode, ap_scan=2 mode can force the new network to be
# created immediately regardless of scan results. ap_scan=1 mode will first try
# to scan for existing networks and only if no matches with the enabled
# networks are found, a new IBSS or AP mode network is created.
#
# (AP 스캔/선택)
# (기본적으로, wps_supplicant 는 AP 스캔 동작을 위해 드라이버에 요청한 후, 적합한 AP 를 선택하기 위해 스캔 결과를 사용한다.)
# (또 다른 대안은 AP 스캔과 선택 그리고 wpa_supplicant 를 사용하는 것(드라이버로부터 IEEE 802.11 접속정보를 기반으로 한 EAPOL 프레임을 처리하기 위해)을 드라이버에 허용하는 것이다.) 
# (1: wpa_supplicant 스캔과 AP 선택을 초기화한다; 만일 현재 활성화된 네트워크에 AP 를 찾지못했다면, 새로운 네트워크(IBSS 또는 AP 모드)를 초기화할 수도 있다(설정되어 있다면)(기본값)
# (0: 드라이버가 스캔하고, AP 선택 그리고 IEEE 802.11 접속 파라메터들(예를 들면, WPA IE generation)을 처리한다. 이 모드는 IEEE 802.1X 모드를 사용할 때, non-WPA 드라이버를 사용할 수 있다; AP들에 접속하기 위해 시도하지 않는다(예를 들면, 외부 프로그램들은 접속을 관리하는 것을 필요로한다). 이 모드는 반드시 유선 이더넷 드라이버를 사용할 때 사용되어야 한다.)
# (2: 0과 비슷하다. 그러나 보안 정책과 SSID(BSSID 가 아니다)를 사용하는 AP 와 접속하지 않는다; 이것은 사용가능하다. 예를들면, ndiswrapper 과 NDIS 드라이버가 hidden SSID 와 최적회된 로밍을 활성화 시킨다. 이 모드에서 설정 파일의 네트워크 블럭들은 성공적으로 접속이 될 때까지 하나씩 하나씩 시도한다.)
# (각 네트워크 블럭은 key_mgmt, pairwise, group, proto 변수들을 위한(예를들면, 리스트에서 단 하나의 옵션) 분명한 보안 정책을 가진다.)
# (IBSS 또는 AP 모드를 사용할 때, ap_scan=2 모드는 스캔 결과에 상관없이 즉시 새로운 네트워크를 강제로 만들 수 있다. ap_scan=1 모드는 현재 네트워크와 활성화된 네트워크를 찾았는데, 일치하는 것이 없는 경우에 한해, 그리고 새로운 IBSS 또는 AP 모드를 네트워크를 생성했을 때 스캔하기위해 처음 시도할 것이다.)
# (접속 시도를 했는데, 잘못된 SSID 를 입력해서 스캔 결과에서 매칭되는 것이 없다면, 자동으로 스캔할 것이다.)
#
ap_scan=1
 
# EAP fast re-authentication
# By default, fast re-authentication is enabled for all EAP methods that
# support it. This variable can be used to disable fast re-authentication.
# Normally, there is no need to disable this.
#
# (EAP fast 재인증)
# (기본적으로, 빠른 재인증은 그것을 지원하는 모든 EAP 방법들을 위해 활성화된다. 이 변수는 fast 재인증을 비활성화하기 위해 사용될 수 있다. 보통, 이것은 비활성화할 필요가 없다.
#
fast_reauth=1
 
# OpenSSL Engine support
# These options can be used to load OpenSSL engines.
# The two engines that are supported currently are shown below:
# They are both from the opensc project (http://www.opensc.org/)
# By default no engines are loaded.
# make the opensc engine available
#opensc_engine_path=/usr/lib/opensc/engine_opensc.so
# make the pkcs11 engine available
#pkcs11_engine_path=/usr/lib/opensc/engine_pkcs11.so
# configure the path to the pkcs11 module required by the pkcs11 engine
#pkcs11_module_path=/usr/lib/pkcs11/opensc-pkcs11.so
#
# (OpenSSL Engine 지원)
# (이 옵션은 OpenSSL 엔진을 사용하기 위해 사용된다. 두개의 엔진은 아래와 같이 현재 지원되고 있다.)
# (그것들은 둘다 opensc 프로젝트로부터 왔다. 기본적으로 어떤 엔진도 사용하지 않는다. opensc 엔진을 활성화하는 방법(opensc_engine_path=/usr/lib/opensc/engine_opensc.so 적어준다)
# (pkcs11 엔진을 활성하는 방법(pkcs11_engine_path=/usr/lib/opensc/engine_pkcs11.so 적어준다)
# (pkcs11 엔진에 의해 pkcs11 모듈이 필요한데, 경로를 설정해주는 방법(pkcs11_module_path=/usr/lib/pkcs11/opensc-pkcs11.so 적어준다)
#
#
# Dynamic EAP methods
# If EAP methods were built dynamically as shared object files, they need to be
# loaded here before being used in the network blocks. By default, EAP methods
# are included statically in the build, so these lines are not needed
#load_dynamic_eap=/usr/lib/wpa_supplicant/eap_tls.so
#load_dynamic_eap=/usr/lib/wpa_supplicant/eap_md5.so
#
#
# (Dynamic EAP methods)
# (EAP methods 들이 shared object 파일로서 동적으로 구축되어 있다면, 그것들은 네트워크 블럭에서 사용되기 전에 로딩되어야 한다. 기본적으로 EAP methods 가 정적으로 빌드되어 포함되어 있다면, 아래의 줄은 필요없다.)
#
 
# Driver interface parameters
# This field can be used to configure arbitrary driver interace parameters. The
# format is specific to the selected driver interface. This field is not used
# in most cases.
#driver_param="field=value"
#
# (드라이버 인터페이스 파라미터)
# (이 필드는 임의로 드라이버 인터페이스 파라미터들을 설정하는데 사용한다. 포맷은 선택된 드라이버 인터페이스를 명시한다. 이 필드는 많은 경우 사용하지 않는다.)
#
 
# Country code
# The ISO/IEC alpha2 country code for the country in which this device is
# currently operating.
#country=US
#
# (국가코드)
# (디바이스가 현재 동작 중인 ISO/IEC alpha2 국가 코드)
#
 
# Maximum lifetime for PMKSA in seconds; default 43200
#dot11RSNAConfigPMKLifetime=43200
# Threshold for reauthentication (percentage of PMK lifetime); default 70
#dot11RSNAConfigPMKReauthThreshold=70
# Timeout for security association negotiation in seconds; default 60
#dot11RSNAConfigSATimeout=60
#
# (PMKSA 초를 위한 최대 수명; 기본값은 43200)
# (재인증을 위한 한계치(PMK 수명의 페센트); 기본값 70)
# (암호 접속 네고를 위한 타임아웃 시간; 기본값 60)
#
#
# Wi-Fi Protected Setup (WPS) parameters
 
# Universally Unique IDentifier (UUID; see RFC 4122) of the device
# If not configured, UUID will be generated based on the local MAC address.
#uuid=12345678-9abc-def0-1234-56789abcdef0
#
# (디바이스의 UUID, 만일 설정되지 않는다면, UUID 는 로컬 MAC 주소를 기반으로 만들어지게 된다.)
#
#
# Device Name
# User-friendly description of device; up to 32 octets encoded in UTF-8
#device_name=Wireless Client
#
# (디바이스 이름)
# (디바이스의 사용자 친화적인 설명; 최대 UTF-8 의 인코딩된 32 옥텟까지)
#
 
# Manufacturer
# The manufacturer of the device (up to 64 ASCII characters)
#manufacturer=Company
#
# (제조사)
# (디바이스의 제조사(최대 64 아스키 문자까지))
#
 
# Model Name
# Model of the device (up to 32 ASCII characters)
#model_name=cmodel
#
# (모델 이름)
# (디바이스의 모델(최대 32 아스키 문자열까지))
 
# Model Number
# Additional device description (up to 32 ASCII characters)
#model_number=123
#
# (모델 넘버)
# (추가적인 디바이스 설명(최대 32 아스키 문자열까지))
 
# Serial Number
# Serial number of the device (up to 32 characters)
#serial_number=12345
#
# (시리얼 번호)
# (디바이스의 시리얼 번호(최대 32 글자))
#
 
# Primary Device Type
# Used format: <categ>-<OUI>-<subcateg>
# categ = Category as an integer value
# OUI = OUI and type octet as a 4-octet hex-encoded value; 0050F204 for
#       default WPS OUI
# subcateg = OUI-specific Sub Category as an integer value
# Examples:
#   1-0050F204-1 (Computer / PC)
#   1-0050F204-2 (Computer / Server)
#   5-0050F204-1 (Storage / NAS)
#   6-0050F204-1 (Network Infrastructure / AP)
#device_type=1-0050F204-1
#
# (주 디바이스 타입)
# (사용 포맷 : <categ>-<OUI>-<subcateg>)
# (categ = 정수값으로 카테고리 지정)
# (OUI = 4옥텟으로 hex 인코딩된 값으로서 OUI 와 타입; 기본 WPS OUI 를 위한 0050F204)
# (subcateg = 정수값으로서 OUI-specific 서브 카테고리)
#
#
# OS Version
# 4-octet operating system version number (hex string)
#os_version=01020300
#
# (OS 버전)
# (4옥텟으로 운영체제 시스템 버전나타냄(hex 문자열))
#
#
#
# Config Methods
# List of the supported configuration methods
# Available methods: usba ethernet label display ext_nfc_token int_nfc_token
#	nfc_interface push_button keypad virtual_display physical_display
#	virtual_push_button physical_push_button
# For WSC 1.0:
#config_methods=label display push_button keypad
# For WSC 2.0:
#config_methods=label virtual_display virtual_push_button keypad
#
# (설정 방법)
# (지원하는 설명 방법 리스트)
# (사용가능한 방법들: usba ethernet labe display ext_nfc_token, int_nfc_token, nfc_interface, push_button, keypad, virtual_display, physical_display virtual_push_button, physical_push_button 
# (WSC 1.0 을 위한 방법 : config_methods = label, display, push_button, keypad)
# (WSC 2.0 을 위한 방법 : config_methods = label, virtual_display, virtual_push_button, keypad)
#
#
# Credential processing
#   0 = process received credentials internally (default)
#   1 = do not process received credentials; just pass them over ctrl_iface to
#	external program(s)
#   2 = process received credentials internally and pass them over ctrl_iface
#	to external program(s)
#wps_cred_processing=0
#
# (인증 절차)
# (0 = 내부적으로 인증을 받는 절차(기본방법))
# (1 = 인증을 받지 않는 방법; 외부 프로그램에 ctrl_iface 를 넘기는 방법)
# (2 = 0번과 1번을 모두 사용)
#
#
# Vendor attribute in WPS M1, e.g., Windows 7 Vertical Pairing
# The vendor attribute contents to be added in M1 (hex string)
#wps_vendor_ext_m1=000137100100020001
#
# (WPS M1 에서 벤더 특징. 예를들면 윈도우7 vertical 페어링 기술)
# (벤더 특징의 내용은 M1(hex 문자열)에 추가되었다
#
#
# NFC password token for WPS
# These parameters can be used to configure a fixed NFC password token for the
# station. This can be generated, e.g., with nfc_pw_token. When these
# parameters are used, the station is assumed to be deployed with a NFC tag
# that includes the matching NFC password token (e.g., written based on the
# NDEF record from nfc_pw_token).
#
#wps_nfc_dev_pw_id: Device Password ID (16..65535)
#wps_nfc_dh_pubkey: Hexdump of DH Public Key
#wps_nfc_dh_privkey: Hexdump of DH Private Key
#wps_nfc_dev_pw: Hexdump of Device Password
#
# (WPS 를 위한 NFC password token)
# (이 파라메터는 station 을 위한 고정된 NFC password token 을 설정하기위해 사용되어왔다. 이것은 생성되어질 수 있다. 예를들면, nfc_pw_token)
# (이 파라메터를 사용할 때, station 은 매칭하는 NFC password token(예를들면, nfc_pw_token 으로부터 NDEF record 기반으로 쓰여진) 이 포함된 NFC 태그와 동작되는 것으로 추정된다.)
#
# Maximum number of BSS entries to keep in memory
# Default: 200
# This can be used to limit memory use on the BSS entries (cached scan
# results). A larger value may be needed in environments that have huge number
# of APs when using ap_scan=1 mode.
#bss_max_count=200
#
# (메모리에 저장하는 최대 숫자의 BSS 엔트리)
# (기본값 : 200)
# (BSS 엔트리(스캔 결과를 캐싱되어진)는 제한된 메모리에서 사용되어왔다. ap_scan=1 모드를 사용할 때, AP 의 갯수가 많은 환경에서는 큰 숫자가 필요할 수도 있다. 
#
# Automatic scan
# This is an optional set of parameters for automatic scanning
# within an interface in following format:
#autoscan=<autoscan module name>:<module parameters>
# autoscan is like bgscan but on disconnected or inactive state.
# For instance, on exponential module parameters would be <base>:<limit>
#autoscan=exponential:3:300
# Which means a delay between scans on a base exponential of 3,
# up to the limit of 300 seconds (3, 9, 27 ... 300)
# For periodic module, parameters would be <fixed interval>
#autoscan=periodic:30
# So a delay of 30 seconds will be applied between each scan
#
# (자동 스캔)
# (자동 스캔을 위한 선택적인 파라미터들의 조합이다)
# (아래의 형식처럼 사용한다)
# (autoscan=<autoscan module name>:<module parameters>
# (자동 스캔은 bgscan(background scan)과 같습니다. 하지만 disconnected 또는 inactive 상태는 아닙니다.)
# (예를들면, 기하급수적인 스캔을 위한 파라메터는 <base>:<limit> 로 사용합니다.)
#
# autoscan=exponential:3:300
#
# (3의 지수값을 기본값으로 delay 를 준다는 의미입니다. 300초의 제한까지(3, 9, 27, 81, 273, 300)
# (주기적인 스캔을 하고싶다면, 파라메터는 <fixed interval> 로 사용합니다.)
#
# autoscan=periodic:30  
#
# (30초 delay 마다 스캔을 하게될 것입니다)
#
# filter_ssids - SSID-based scan result filtering
# 0 = do not filter scan results (default)
# 1 = only include configured SSIDs in scan results/BSS table
#filter_ssids=0
#
# (filter_ssids - SSID 기반의 스캔 결과 필터링)
# (0 = 스캔 결과를 필터링하지 않음(기본값))
# (1 = 스캔 결과/BSS 테이블에서 설정된 SSID 를 오직 포함시킴)
#
# Password (and passphrase, etc.) backend for external storage
# format: <backend name>[:<optional backend parameters>]
#ext_password_backend=test:pw1=password|pw2=testing
#
# (외부 저장장치를 위한 Password (and passphrase, etc.) 후위 방식)
# (형식: <backend name>[:<optional backend parameters>]
#
#
# Timeout in seconds to detect STA inactivity (default: 300 seconds)
#
# This timeout value is used in P2P GO mode to clean up
# inactive stations.
#p2p_go_max_inactivity=300
#
# (STA 정지를 감지하기 위한 초의 타임아웃(기본값 : 300 초))
# (이 타임아웃값은 inactive station 을 제거하기 위해 P2P Go 모드에서 사용되어 왔다.)
#
#
# Opportunistic Key Caching (also known as Proactive Key Caching) default
# This parameter can be used to set the default behavior for the
# proactive_key_caching parameter. By default, OKC is disabled unless enabled
# with the global okc=1 parameter or with the per-network
# proactive_key_caching=1 parameter. With okc=1, OKC is enabled by default, but
# can be disabled with per-network proactive_key_caching=0 parameter.
#okc=0
#
# (우발적인 키 캐싱(Proactive key caching 으로 알고 있는) 기본)
# (이 파라메터는 proactive_key_caching 파라메터를 위한 기본적인 동작을 설정하는데 사용될 수 있다.)
# (기본적으로 OKC 는 global okc=1 파라메터 또는 per-network proactive_key_caching=1 파라메터로 활성화하지 않는한 비활성화 된다.)
# (okc=1 은 OKC 는 기본적으로 활성화된다. 그러나 per-network proactive_key_caching=0 파라메터는 비활성화 된다. 
#
## Protected Management Frames default
# This parameter can be used to set the default behavior for the ieee80211w
# parameter. By default, PMF is disabled unless enabled with the global pmf=1/2
# parameter or with the per-network ieee80211w=1/2 parameter. With pmf=1/2, PMF
# is enabled/required by default, but can be disabled with the per-network
# ieee80211w parameter.
#pmf=0
#
# (Protected Management Frames 기본)
# (이 파라메터는 ieee80211w 파라미터를 위한 기본적인 동작을 설정하는데 사용된다. 기본적으로 PMF 는 global pmf=1/2 또는 per-network ieee80211w=1/2 로 활성화하지 않는한 비활성화 된다.)
# (pmf=1/2 는 PMF 가 기본적으로 활성화/요청되고, 그러나 per-network ieee80211w 파라메터에 비활성화 된다.)
#
# Interworking (IEEE 802.11u)
# (인터워킹 (IEEE 802.11u)
 
# Enable Interworking
# interworking=1
# (인터워킹 활성화)
 
# Homogenous ESS identifier
# If this is set, scans will be used to request response only from BSSes
# belonging to the specified Homogeneous ESS. This is used only if interworking
# is enabled.
# hessid=00:11:22:33:44:55
#
# (동일의 ESS 지시자)
# (만일 이것이 설정되면, 스캔은 명시된 Homogeneous ESS 에 속한 BSSes 로부터 오직 응답을 요청하는데 사용될 것이다.)
# (만일 인터워킹이 활성화되면, 오직 사용된다.)
#
# Automatic network selection behavior
# 0 = do not automatically go through Interworking network selection
#     (i.e., require explicit interworking_select command for this; default)
# 1 = perform Interworking network selection if one or more
#     credentials have been configured and scan did not find a
#     matching network block
#auto_interworking=0
#
# (자동 네트워크 선택 동작)
# (0 = 인터워킹 네트워크 선택을 자동으로 하지 않음(예를들면, 이를 위한 명백한 interworking_select 명령어를 요청; 기본적인 방법))
# (1 = 만일 하나 또는 그 이상의 인증에서 설정되고, 매칭되는 네트워크 block 을 스캔에서 찾을 수 없다면 인터워킹 네트워크 선택을 실행함)
#
# credential block
#
# Each credential used for automatic network selection is configured as a set
# of parameters that are compared to the information advertised by the APs when
# interworking_select and interworking_connect commands are used.
#
# (인증 블럭)
# (자동 네트워크 선택을 위한 각 인증의 사용은 interworking_select 와 interworking_connect 명령어를 사용했을 때의 AP들의 의한 광고 정보를 비교한 파라메터의 조합으로 설정된다.)
#
# credential fields:
#
# priority: Priority group
#	By default, all networks and credentials get the same priority group
#	(0). This field can be used to give higher priority for credentials
#	(and similarly in struct wpa_ssid for network blocks) to change the
#	Interworking automatic networking selection behavior. The matching
#	network (based on either an enabled network block or a credential)
#	with the highest priority value will be selected.
#
# (인증 필드:)
# (우선순위: 우선순위 그룹)
# (기본적으로 모든 네트워크들과 인증들은 같은 우선순위 그룹(0)을 가진다. 이 필드는 인터워킹 자동 네트워킹 선택 동작을 바꾸기 위한 인증(네트워크 블럭을 위한 wpa_ssid 구조체에서 비슷한)을 위한 더 높은 우선순위를 얻기위해 사용한다.)
# (가장 높은 우선순위 값을 가진 매칭 네트워크(활성화된 네트워크 블럭 또는 인증을 기반으로 한)가 선택될 것이다.)
#
# pcsc: Use PC/SC and SIM/USIM card
# (pcsc : PC/SC 와 SIM/USIM 카드 사용)
#
# realm: Home Realm for Interworking
# (realm : 인터워킹을 위한 Home realm)
#
# username: Username for Interworking network selection
# (username : 인터워킹 네트워크 선택을 위한 유저이름)
#
# password: Password for Interworking network selection
# (password : 인터워킹 네트워크 선택을 위한 패스워드)
#
# ca_cert: CA certificate for Interworking network selection
# (ca_cert : 인터워킹 네트워크 선택을 위한 CA 인증)
#
# client_cert: File path to client certificate file (PEM/DER)
#	This field is used with Interworking networking selection for a case
#	where client certificate/private key is used for authentication
#	(EAP-TLS). Full path to the file should be used since working
#	directory may change when wpa_supplicant is run in the background.
#
#	Alternatively, a named configuration blob can be used by setting
#	this to blob://blob_name.
# 
# (client_cert: 클라이언트 인증 파일(PEM/DER)의 파일 경로)
# (이 필드는 클라이언트 인증/개인키가 인증(EAP-TLS)을 위해 사용되는 경우, 인터워킹 네트워크 선택하는데 사용되었다.)
# (파일의 전체 경로는 작업 경로가 wpa_supplicant 가 백그라운드로 실행될 때 작업 디렉토리가 변경될 수도 있기 때문에 필요하다.)
# (그 대신에, 지정된 설정 부분은 blob://blob_name 으로 설정함으로서 사용될 수 있다.)
#
# private_key: File path to client private key file (PEM/DER/PFX)
#	When PKCS#12/PFX file (.p12/.pfx) is used, client_cert should be
#	commented out. Both the private key and certificate will be read
#	from the PKCS#12 file in this case. Full path to the file should be
#	used since working directory may change when wpa_supplicant is run
#	in the background.
#
# (개인 키: client private key file(PEM/DER/PFX) 의 파일 경로)
# (PKCS#12/PFX file(.p12/.pfx)을 사용할 때, client_cert 는 주석처리해야 한다. 이런 경우, private key 와 인증 둘다 PKCS#12 file 로부터 읽어들일 것이다. 파일의 전체경로는 wpa_supplicant 가 백그라운드에서 실행될 때, 작업 디렉토리가 변경될 수도 있기 때문에 필요하다.)
#
#	Windows certificate store can be used by leaving client_cert out and
#	configuring private_key in one of the following formats:
# 
# (Windows certificate store 은 client_cert out 과 다음 형식의 하나로서 private_key 를 설정함으로서 사용된다.  
#
#	cert://substring_to_match
#
#	hash://certificate_thumbprint_in_hex
#
#	For example: private_key="hash://63093aa9c47f56ae88334c7b65a4"
#
#
#	Note that when running wpa_supplicant as an application, the user
#	certificate store (My user account) is used, whereas computer store
#	(Computer account) is used when running wpasvc as a service.
#
#	Alternatively, a named configuration blob can be used by setting
#	this to blob://blob_name.
#
# (애플리케이션으로서 wpa_supplicant 가 실행 중이면, user certificate store(My 유저 계정)이 사용되지만, 서비스로서 wpasvc 가 실행 중이면 computer store(Computer account)가 사용된다.)
#
# private_key_passwd: Password for private key file
#
# imsi: IMSI in <MCC> | <MNC> | '-' | <MSIN> format
#
# milenage: Milenage parameters for SIM/USIM simulator in <Ki>:<OPc>:<SQN>
#	format
#
# (<Ki>:<OPc>:<SQN> 형식에서 SIM/USIM 시뮬레이터를 위한 Milenage parameters)
#
# domain: Home service provider FQDN
#	This is used to compare against the Domain Name List to figure out
#	whether the AP is operated by the Home SP.
#
# (domain: Home service provider FQDN)
# (Home SP 에 의해 AP가 동작되는지 아닌지를 알기위해 Domain name list 에 대응하여 비교하는데 사용되어 왔다.)
#
# roaming_consortium: Roaming Consortium OI
#	If roaming_consortium_len is non-zero, this field contains the
#	Roaming Consortium OI that can be used to determine which access
#	points support authentication with this credential. This is an
#	alternative to the use of the realm parameter. When using Roaming
#	Consortium to match the network, the EAP parameters need to be
#	pre-configured with the credential since the NAI Realm information
#	may not be available or fetched.
#
# (roaming_consortium: 로밍 컨소시엄 01)
# (만일 roaming_consortium_len 가 0 이 아니면, 이 필드는 Roaming Consortium OI 를 포함한다. 이것(Roaming Consortium OI)은 증명서에서 인증을 지원하는 액세스 포인트를 결정하기 위해 사용될 수 있다.)
# (이것은 범위 파라메터의 사용의 대안이다. 네트워크를 매칭하기 위해 Roaming Consortium 을 사용할 때, EAP 파라메터는 증명서를 사전-설정하는데 필요하다. NAI Realm information 은 사용가능하지 않거나 가져올 수 없기 때문에.)
#
# eap: Pre-configured EAP method
#	This optional field can be used to specify which EAP method will be
#	used with this credential. If not set, the EAP method is selected
#	automatically based on ANQP information (e.g., NAI Realm).
#
# (eap: Pre-configured EAP method)
# (이 옵션 필드는 EAP method 를 증명서에 사용될 것임을 명시하기위해 사용된다. 만일 설정되지 않으면, EAP method 는 ANQP information 기반(예를들면, NAI Realm)에서 자동으로 선택된다.) 
#
# phase1: Pre-configure Phase 1 (outer authentication) parameters
#	This optional field is used with like the 'eap' parameter.
#
# (phase1: Pre-configure Phase 1 (outer authentication) parameters)
# (이 옵션 필드는 eap 파라미터 처럼 사용된다)
#
# phase2: Pre-configure Phase 2 (inner authentication) parameters
#	This optional field is used with like the 'eap' parameter.
#
# (phase2: Pre-configure Phase 2 (inner authentication) parameters)
# (이 옵션 필드는 eap 파라미터 처럼 사용된다)
#
# excluded_ssid: Excluded SSID
#	This optional field can be used to excluded specific SSID(s) from
#	matching with the network. Multiple entries can be used to specify more
#	than one SSID.
#
# (excluded_ssid: 제외된 SSID)
# (이 옵션 필드는 네트워크의 매칭된 것으로부터 명시된 SSID 를 제외시키는데 사용된다. 복수개의 엔트리는 하나 이상의 SSID 를 명시하는데 사용된다)
#
#
# for example:
#
#cred={
#	realm="example.com"
#	username="user@example.com"
#	password="password"
#	ca_cert="/etc/wpa_supplicant/ca.pem"
#	domain="example.com"
#}
#
#cred={
#	imsi="310026-000000000"
#	milenage="90dca4eda45b53cf0f12d7c9c3bc6a89:cb9cccc4b9258e6dca4760379fb82"
#}
#
#cred={
#	realm="example.com"
#	username="user"
#	password="password"
#	ca_cert="/etc/wpa_supplicant/ca.pem"
#	domain="example.com"
#	roaming_consortium=223344
#	eap=TTLS
#	phase2="auth=MSCHAPV2"
#}
 
# Hotspot 2.0
# hs20=1
#
# (핫스팟 2.0)
#
# network block
#
# Each network (usually AP's sharing the same SSID) is configured as a separate
# block in this configuration file. The network blocks are in preference order
# (the first match is used).
#
# (네트워크 블럭)
# (각 네트워크(같은 SSID 로 공유된 보통의 AP들)는 설정파일에서 분할된 블럭으로서 설정된다. 네트워크 블럭들은 선호 순이다(첫번째 매칭되는 것을 사용))
#
# network block fields:
#
# disabled:
#	0 = this network can be used (default)
#	1 = this network block is disabled (can be enabled through ctrl_iface,
#	    e.g., with wpa_cli or wpa_gui)
#
# (네트워크 블럭 필드:)
# (비활성화:)
# (0 = 이 네트워크는 사용할 수 있다(기본값))
# (1 = 이 네트워크 블럭은 비활성화된다(ctrl_iface 를 통해 활성화할수도 있다, 예를들면, wpa_cli or wpa_gui 로서))
#
# id_str: Network identifier string for external scripts. This value is passed
#	to external action script through wpa_cli as WPA_ID_STR environment
#	variable to make it easier to do network specific configuration.
#
# (id_str: 외부 스크립트를 위한 Network identifier string. 이 값은 네트워크 설정을 더 쉽게 하기위한 WPA_ID_STR 환경변수 로서 wpa_cli 를 통해 외부 action script 로 보내진다.)
#
# ssid: SSID (mandatory); network name in one of the optional formats:
#	- an ASCII string with double quotation
#	- a hex string (two characters per octet of SSID)
#	- a printf-escaped ASCII string P"<escaped string>"
#
# (ssid: SSID(필수조건); 옵션 형식들 중의 하나인 네트워크 이름:)
# (- 아스키 문자열은 double quotation(큰따옴표)와 함께)
# (- hex 문자열(SSID 의 2글자마다 옥텟))
# (- printf 탈출 아스키 문자열 P"<escaped 문자열>")
#
# scan_ssid:
#	0 = do not scan this SSID with specific Probe Request frames (default)
#	1 = scan with SSID-specific Probe Request frames (this can be used to
#	    find APs that do not accept broadcast SSID or use multiple SSIDs;
#	    this will add latency to scanning, so enable this only when needed)
#
# (scan_ssid:)
# (0 = 명시된 Probe Request 프레임과 함께 SSID 를 스캔하지 않음(기본값))
# (1 = SSID-specific Probe Request 프레임과 함께 스캔(SSID 또는 multiple SSID 브로드캐스트를 허용하지 않는 AP 찾는데 사용된다))
# (스캔하는데 지연이 될 것 같고, 필요할 때, 이것을 활성화한다)
#
# bssid: BSSID (optional); if set, this network block is used only when
#	associating with the AP using the configured BSSID
#
# (bssid: BSSID (선택옵션); 만일 설정되면, 이 네트워크 블럭은 설정된 BSSID 를 사용하는 AP 에 접속할 때만 사용한다)
#
# priority: priority group (integer)
# By default, all networks will get same priority group (0). If some of the
# networks are more desirable, this field can be used to change the order in
# which wpa_supplicant goes through the networks when selecting a BSS. The
# priority groups will be iterated in decreasing priority (i.e., the larger the
# priority value, the sooner the network is matched against the scan results).
# Within each priority group, networks will be selected based on security
# policy, signal strength, etc.
# Please note that AP scanning with scan_ssid=1 and ap_scan=2 mode are not
# using this priority to select the order for scanning. Instead, they try the
# networks in the order that used in the configuration file.
#
# (우선순위: 우선순위 그룹(정수))
# (기본적으로, 모든 네트워크는 같은 우선순위 그룹(0)을 갖는다. 만일 어떤 네트워크에 좀더 호감(!)이 있다면, 이 필드는 순서를 바꿀 수 있게 할 수 있다.)
# (BSS 를 선택할 때, wpa_supplicant 는 네트워크를 살펴본다. 우선순위 그룹들은 우선순위를 감소시키면서 반복할 것이다(예를들면, 높은 우선순위 값은 스캔 결과에 대응하여 네트워크를 바로 매칭한다.))
# (각 우선순위 그룹에서 네트워크 들은 보안정책, 신호세기등을 기반으로 선택되어 진다)
# (scan_ssid=1 과 ap_scan=2 에서의 AP 스캔은 스캔하는 것의 순서를 선택하기 위한 우선순위를 사용하지 않는다)
# (대신에 설정파일을 사용하여 순서를 네트워크들에 시도할 수 있다)
#
# mode: IEEE 802.11 operation mode
# 0 = infrastructure (Managed) mode, i.e., associate with an AP (default)
# 1 = IBSS (ad-hoc, peer-to-peer)
# 2 = AP (access point)
# Note: IBSS can only be used with key_mgmt NONE (plaintext and static WEP)
# and key_mgmt=WPA-NONE (fixed group key TKIP/CCMP). WPA-None requires
# following network block options:
# proto=WPA, key_mgmt=WPA-NONE, pairwise=NONE, group=TKIP (or CCMP, but not
# both), and psk must also be set.
#
# (mode: IEEE 802.11 operation mode)
# (0 = 인프라스트럭쳐 (Managed) 모드, 예를들면, AP 에 접속하는 모드(기본값))
# (1 = IBSS (에드혹, 피어 투 피어))
# (2 = AP (엑세스 포인트))
# (IBSS 는 오직 key_mgmt NONE 과 함께 사용할 수 있다(암호화하지 않음 그리고 static WEP))
# (그리고 key_mgmt=WPA-NONE(fixed group key TKIP/CCMP). WPA-None 은 네트워크 블럭 옵션들을 필요로한다.)
# (proto=WPA, key_mgmt=WPA-NONE, pairwise=NONE, group=TKIP (or CCMP, but not both), 그리고 psk 는 반드시 또한 설정해야 한다)
#
# frequency: Channel frequency in megahertz (MHz) for IBSS, e.g.,
# 2412 = IEEE 802.11b/g channel 1. This value is used to configure the initial
# channel for IBSS (adhoc) networks. It is ignored in the infrastructure mode.
# In addition, this value is only used by the station that creates the IBSS. If
# an IBSS network with the configured SSID is already present, the frequency of
# the network will be used instead of this configured value.
#
# (frequency: IBSS 를 위한 채널 대역)
# (2412 = IEEE 802.11b/g channel 1. 이값은 IBSS(에드혹) 네트워크를 위해 초기 채널을 설정하는데 사용된다. 인프라스트럭처 모드에서는 무시된다.)
# (추가로, 이값은 오직 IBSS 를 만든 station 에 의해 사용된다. 만일 설정된 SSID 와 IBSS 네트워크가 이미 존재한다면, 네트워크의 대역은 설정된 값 대신에 사용될 것이다)
#
# scan_freq: List of frequencies to scan
# Space-separated list of frequencies in MHz to scan when searching for this
# BSS. If the subset of channels used by the network is known, this option can
# be used to optimize scanning to not occur on channels that the network does
# not use. Example: scan_freq=2412 2437 2462
#
# (scan_freq: 스캔의 주파수 리스트)
# (이 BSS를 찾을 때, 스캔 MHz 의 주파수 공간이 분리된 리스트로 나타낸다)
# (만일 네트워크를 알고있어서 채널의 부분집합(서브셋)을 사용한다면, 이 옵션은 스캔을 최적화하기 위해 사용된다. 사용하지 않는 네트워크는 스캔하지 않는다.)
# (예를들면, scan_freq=2412 2437 2462)
#
#
# freq_list: Array of allowed frequencies
# Space-separated list of frequencies in MHz to allow for selecting the BSS. If
# set, scan results that do not match any of the specified frequencies are not
# considered when selecting a BSS.
#
# (freq_list: 허용된 주파수의 배열)
# (BSS 를 선택하기 위해 허용하는 주파수 대역의 공간이 분리된 리스트로 나타낸다)
# (만일 설정되면, 스캔 결과는 BSS 가 선택될 때, 명시된 주파수들을 고려하지 않아 어떤 것이든 매칭되지 않는다.)
#
#
# bgscan: Background scanning
# wpa_supplicant behavior for background scanning can be specified by
# configuring a bgscan module. These modules are responsible for requesting
# background scans for the purpose of roaming within an ESS (i.e., within a
# single network block with all the APs using the same SSID). The bgscan
# parameter uses following format: "<bgscan module name>:<module parameters>"
# Following bgscan modules are available:
# simple - Periodic background scans based on signal strength
# bgscan="simple:<short bgscan interval in seconds>:<signal strength threshold>:
# <long interval>"
# bgscan="simple:30:-45:300"
# learn - Learn channels used by the network and try to avoid bgscans on other
# channels (experimental)
# bgscan="learn:<short bgscan interval in seconds>:<signal strength threshold>:
# <long interval>[:<database file name>]"
# bgscan="learn:30:-45:300:/etc/wpa_supplicant/network1.bgscan"
#
# (bgscan: 백그라운드 스캔)
# (백그라운드 스캔을 위한 wpa_supplicant 동작은 bgscan 모듈을 설정함으로서 가능하다. 이 모듈은 ESS 가 담긴 로밍의 목적(예를들면, 같은 SSID 를 사용하는 AP가 싱글 네트워크 블럭에 포함되어 있을 때)을 위한 백그라운드 스캔을 요청하는데 책임이있다.)
# (bgscan 파라메터는 다음의 형식을 가진다: "<bgscan module name>:<module parameters>")
# (bgscan 모듈은 다음과 같이 사용가능하다)
# (simple - 신호세기를 기반으로 하는 주기적인 백그라운드 스캔)
# (bgscan="simple:<short bgscan interval in seconds>:<signal strength threshold>:<long interval>")
# (bgscan="simple:30:-45:300")
# (learn - 네트워크에 의해 사용하는 채널을 알고, 다른 채널로의 bgscan 을 피한다(실험적인 옵션))
# (bgscan="learn:<short bgscan interval in seconds>:<signal strength threshold>:<long interval>[:<database file name>]")
# (bgscan="learn:30:-45:300:/etc/wpa_supplicant/network1.bgscan")
#
#
# proto: list of accepted protocols
# WPA = WPA/IEEE 802.11i/D3.0
# RSN = WPA2/IEEE 802.11i (also WPA2 can be used as an alias for RSN)
# If not set, this defaults to: WPA RSN
#
# (proto: 수락한 프로토콜의 리스트)
# (WPA = WPA/IEEE 802.11i/D3.0)
# (RSN = WPA2/IEEE 802.11i (also WPA2 can be used as an alias for RSN))
# (만일 설정되지 않으면, 기본값은 WPA RSN 이다)
#
# key_mgmt: list of accepted authenticated key management protocols
# WPA-PSK = WPA pre-shared key (this requires 'psk' field)
# WPA-EAP = WPA using EAP authentication
# IEEE8021X = IEEE 802.1X using EAP authentication and (optionally) dynamically
#	generated WEP keys
# NONE = WPA is not used; plaintext or static WEP could be used
# WPA-PSK-SHA256 = Like WPA-PSK but using stronger SHA256-based algorithms
# WPA-EAP-SHA256 = Like WPA-EAP but using stronger SHA256-based algorithms
# If not set, this defaults to: WPA-PSK WPA-EAP
#
# (key_mgmt: 수락한 authenticated key management protocols 의 리스트)
# (WPA-PSK = WPA pre-shared key(psk 필드가 요구됨))
# (WPA-EAP = WPA using EAP authentication)
# (IEEE8021X = EAP authentication 를 사용하는 IEEE 802.1X 그리고 (선택적인) 동적으로 만들어진 WEP Keys
# (NONE = WPA 를 사용하지 않음; 암호되지 않거나, static WEP 를 사용함)
# (WPA-PSK-SHA256 = WPA-PSK 와 비슷함. 그러나 강력한 SHA256-based algorithms 를 사용함)
# (WPA-EAP-SHA256 = WPA-EAP 와 비슷함. 그러나 강력한 SHA256-based algorithms 를 사용함)
# (만일 설정되지 않으면, 기본값은 WPA-PSK WPA-EAP 이다.)
#
#
# ieee80211w: whether management frame protection is enabled
# 0 = disabled (default unless changed with the global pmf parameter)
# 1 = optional
# 2 = required
# The most common configuration options for this based on the PMF (protected
# management frames) certification program are:
# PMF enabled: ieee80211w=1 and key_mgmt=WPA-EAP WPA-EAP-SHA256
# PMF required: ieee80211w=2 and key_mgmt=WPA-EAP-SHA256
# (and similarly for WPA-PSK and WPA-WPSK-SHA256 if WPA2-Personal is used)
#
# (ieee80211w: management frame protection 을 활성화함)
# (0 = 비활성홤(global pmf 파라미터를 변경할 때까지 기본값임))
# (1 = 옵션)
# (2 = 요청됨)
# (PMF(protected management frames) 인증 프로그램 기반의 가장 일반적인 설정 옵션)
# (PMF enabled: ieee80211w=1 and key_mgmt=WPA-EAP WPA-EAP-SHA256)
# (PMF required: ieee80211w=2 and key_mgmt=WPA-EAP-SHA256)
# (그리고 만일 WPA2-Personal 을 사용하면, WPA-PSK 와 WPA-WPSK-SHA256 는 비슷하다)
#
#
# auth_alg: list of allowed IEEE 802.11 authentication algorithms
# OPEN = Open System authentication (required for WPA/WPA2)
# SHARED = Shared Key authentication (requires static WEP keys)
# LEAP = LEAP/Network EAP (only used with LEAP)
# If not set, automatic selection is used (Open System with LEAP enabled if
# LEAP is allowed as one of the EAP methods).
#
# (auth_alg: 허용하는 IEEE 802.11 authentication 알고리즘 리스트)
# (OPEN = Open System authentication (WPA/WPA2 에 요구됨))
# (SHARED = Shared Key authentication (static WEP keys 에 요구됨))
# (LEAP = LEAP/Network EAP (오직 LEAP 에서 사용함))
# (만일 설정하지 않으면, 자동선택으로 사용되어짐(만일 LEAP 가 EAP methods 의 한가지 방법으로 허용된다면 Open System with LEAP 가 활성화됨))
#
# pairwise: list of accepted pairwise (unicast) ciphers for WPA
# CCMP = AES in Counter mode with CBC-MAC [RFC 3610, IEEE 802.11i/D7.0]
# TKIP = Temporal Key Integrity Protocol [IEEE 802.11i/D7.0]
# NONE = Use only Group Keys (deprecated, should not be included if APs support
#	pairwise keys)
# If not set, this defaults to: CCMP TKIP
#
# (pairwise: WPA 를 위한 받아들인 pairwise(unicast) 암호화 리스트)
# (CCMP = AES in Counter mode with CBC-MAC [RFC 3610, IEEE 802.11i/D7.0])
# (TKIP = Temporal Key Integrity Protocol [IEEE 802.11i/D7.0])
# (NONE = Use only Group Keys (만일 AP가 pairwise keys 를 지원하면, 포함하지 않는다(앞으로 사라지게될)))
# (만일 설정하지 않으면, 기본값으로 CCMP, TKIP 을 사용)
#
# group: list of accepted group (broadcast/multicast) ciphers for WPA
# CCMP = AES in Counter mode with CBC-MAC [RFC 3610, IEEE 802.11i/D7.0]
# TKIP = Temporal Key Integrity Protocol [IEEE 802.11i/D7.0]
# WEP104 = WEP (Wired Equivalent Privacy) with 104-bit key
# WEP40 = WEP (Wired Equivalent Privacy) with 40-bit key [IEEE 802.11]
# If not set, this defaults to: CCMP TKIP WEP104 WEP40
#
# (group: WPA 를 위한 받아들인 그룹(broadcast/multicast) 암호화 리스트)
# (CCMP = AES in Counter mode with CBC-MAC [RFC 3610, IEEE 802.11i/D7.0])
# (TKIP = Temporal Key Integrity Protocol [IEEE 802.11i/D7.0])
# (WEP104 = WEP (Wired Equivalent Privacy) with 104-bit key)
# (WEP40 = WEP (Wired Equivalent Privacy) with 40-bit key [IEEE 802.11])
# (만일 설정되지 않으면, 기본값은 CCMP, TKIP, WEP104, WEP40 으로 설정된다)
#
# psk: WPA preshared key; 256-bit pre-shared key
# The key used in WPA-PSK mode can be entered either as 64 hex-digits, i.e.,
# 32 bytes or as an ASCII passphrase (in which case, the real PSK will be
# generated using the passphrase and SSID). ASCII passphrase must be between
# 8 and 63 characters (inclusive). ext:<name of external PSK field> format can
# be used to indicate that the PSK/passphrase is stored in external storage.
# This field is not needed, if WPA-EAP is used.
# Note: Separate tool, wpa_passphrase, can be used to generate 256-bit keys
# from ASCII passphrase. This process uses lot of CPU and wpa_supplicant
# startup and reconfiguration time can be optimized by generating the PSK only
# only when the passphrase or SSID has actually changed.
#
# (psk: WPA preshared key; 256-bit pre-shared key)
# (WPA-PSK 모드에서 사용하는 키는 64 hex-digits 로서 입력된다. 예를들면, 32 bytes 또는 아스키 암호화(예를들면, real PSK 가 passphrase 와 SSID 를 사용해서 생성되어질 것이다))
# (아스키 암호화는 8 과 63 문자 사이가 되어야 한다(포함). ext:<name of external PSK field> 형식은 외부 저장장치에 저장된 PSK/passphrase 를 가리키는데 사용되어 왔다.)
# (만일 WPA-EAP를 사용한다면, 이 필드는 필요하지 않다.)
# (Note: Separate tool, wpa_passphrase, 아스키 passphrase 로부터 256-비트 키를 생성하는데, 사용되어 왔다. 이 과정은 CPU 를 많이 사용하고, wpa_supplicant 가 시작시, 오직 재설정 시간이 암호화 또는 SSID 가 실제로 변경될 때, 오직 PSK 를 생성함으로서 최적화된다.)
#
# eapol_flags: IEEE 802.1X/EAPOL options (bit field)
# Dynamic WEP key required for non-WPA mode
# bit0 (1): require dynamically generated unicast WEP key
# bit1 (2): require dynamically generated broadcast WEP key
# 	(3 = require both keys; default)
# Note: When using wired authentication, eapol_flags must be set to 0 for the
# authentication to be completed successfully.
#
# (eapol_flags: IEEE 802.1X/EAPOL options (bit field))
# (non-WPA 모드를 위한 동적 WEP key 요구)
# (bit0 (1) : 유니캐스트 WEP key 를 동적으로 생성하는 것을 요구함)
# (bit1 (2) : 브로드캐스트 WEP key 를 동적으로 생성하는 것을 요구함)
# (3 = 두가지 키를 요구함; 기본값)
# (Note: 유선 암호화를 사용할 때, eapol_flags 는 암호화를 성공적으로 완료하기 위해 반드시 0 으로 설정한다.)
#
# mixed_cell: This option can be used to configure whether so called mixed
# cells, i.e., networks that use both plaintext and encryption in the same
# SSID, are allowed when selecting a BSS from scan results.
# 0 = disabled (default)
# 1 = enabled
#
# (mixed_cell: 이 옵션은 mixed cells 라 불리는 설정을 위해 사용되어 왔다. 예를들면, 같은 SSID 에서 암호없음과 인증 둘다 사용하고 있는 네트워크에서 허용된다. 스캔 결과로부터 BSS 를 선택할 때)
# (0 = 비활성화(기본값))
# (1 = 활성화)
#
# proactive_key_caching:
# Enable/disable opportunistic PMKSA caching for WPA2.
# 0 = disabled (default unless changed with the global okc parameter)
# 1 = enabled
#
# (proactive_key_caching:)
# (WPA2 를 위한 기회적인(우발적인) PMSK caching 을 활성화/비활성화)
# (0 = 비활성화(global okc 파라메터가 변경되기 전까지 기본값 유지))
# (1 = 활성화)
#
# wep_key0..3: Static WEP key (ASCII in double quotation, e.g. "abcde" or
# hex without quotation, e.g., 0102030405)
# wep_tx_keyidx: Default WEP key index (TX) (0..3)
#
# (wep_key0..3: Static WEP key (큰따옴표의 아스키, 예를들면, "abcde" 또는 따옴표 없는 헥사 예를들면, 0102030405))
# (wep_tx_keyidx: 기본 WEP key 인덱스 (TX) (0..3))
#
# peerkey: Whether PeerKey negotiation for direct links (IEEE 802.11e DLS) is
# allowed. This is only used with RSN/WPA2.
# 0 = disabled (default)
# 1 = enabled
#peerkey=1
#
# (peerkey: 다이렉트 링크(IEEE 802.11e DLS)를 위한 PeerKey 협상을 허용. 이것은 오직 RSN/WPA2 에세만 사용함)
# (0 = 비활성화(기본값))
# (1 = 활성화)
#
# wpa_ptk_rekey: Maximum lifetime for PTK in seconds. This can be used to
# enforce rekeying of PTK to mitigate some attacks against TKIP deficiencies.
#
# (wpa_ptk_rekey: PTK 시간을 위한 최대한 실행시간. TKIP 결점에 대응하는 어떤 공격을 완화시키기 위해 PTK 를 다시 입력(rekey)하는 것을 수행하는데 사용된다)
#
# Following fields are only used with internal EAP implementation.
# eap: space-separated list of accepted EAP methods
#	MD5 = EAP-MD5 (unsecure and does not generate keying material ->
#			cannot be used with WPA; to be used as a Phase 2 method
#			with EAP-PEAP or EAP-TTLS)
#       MSCHAPV2 = EAP-MSCHAPv2 (cannot be used separately with WPA; to be used
#		as a Phase 2 method with EAP-PEAP or EAP-TTLS)
#       OTP = EAP-OTP (cannot be used separately with WPA; to be used
#		as a Phase 2 method with EAP-PEAP or EAP-TTLS)
#       GTC = EAP-GTC (cannot be used separately with WPA; to be used
#		as a Phase 2 method with EAP-PEAP or EAP-TTLS)
#	TLS = EAP-TLS (client and server certificate)
#	PEAP = EAP-PEAP (with tunnelled EAP authentication)
#	TTLS = EAP-TTLS (with tunnelled EAP or PAP/CHAP/MSCHAP/MSCHAPV2
#			 authentication)
#	If not set, all compiled in methods are allowed.
#
# (내부 EAP 실행에 오직 사용되는 필드)
# (eap: 수용하는 EAP methods 공간 분할 리스트)
# (MD5 = EAP-MD5 (안전하지 않고, keying material 을 만들지 않음 -> WPA 에 사용되지 않음; EAP-PEAP 또는 EAP-TTLS 와 Phase 2 method 로서 사용됨))
# (MSCHAPV2 = EAP-MSCHAPv2 (WPA 와 각기 별도로 사용할 수 없음; EAP-PEAP 또는 EAP-TTLS 와 Phase 2 method 로서 사용됨))
# (OTP = EAP-OTP (WPA 와 각기 별도로 사용할 수 없음; EAP-PEAP 또는 EAP-TTLS 와 Phase 2 method 로서 사용됨))
# (GTC = EAP-GTC (WPA 와 각기 별도로 사용할 수 없음; EAP-PEAP 또는 EAP-TTLS 와 Phase 2 method 로서 사용됨))
# (TLS = EAP-TLS (클라이언트와 서버 인증))
# (PEAP = EAP-PEAP (터널을 통한 EAP 인증))
# (TTLS = EAP-TTLS (터널을 통한 EAP 또는 PAP/CHAP/MSCHAP/MSCHAPV2))
# (설정하지 않으면, 모든 방법들 허용된다)
#
# identity: Identity string for EAP
#	This field is also used to configure user NAI for
#	EAP-PSK/PAX/SAKE/GPSK.
# anonymous_identity: Anonymous identity string for EAP (to be used as the
#	unencrypted identity with EAP types that support different tunnelled
#	identity, e.g., EAP-TTLS). This field can also be used with
#	EAP-SIM/AKA/AKA' to store the pseudonym identity.
# password: Password string for EAP. This field can include either the
#	plaintext password (using ASCII or hex string) or a NtPasswordHash
#	(16-byte MD4 hash of password) in hash:<32 hex digits> format.
#	NtPasswordHash can only be used when the password is for MSCHAPv2 or
#	MSCHAP (EAP-MSCHAPv2, EAP-TTLS/MSCHAPv2, EAP-TTLS/MSCHAP, LEAP).
#	EAP-PSK (128-bit PSK), EAP-PAX (128-bit PSK), and EAP-SAKE (256-bit
#	PSK) is also configured using this field. For EAP-GPSK, this is a
#	variable length PSK. ext:<name of external password field> format can
#	be used to indicate that the password is stored in external storage.
# ca_cert: File path to CA certificate file (PEM/DER). This file can have one
#	or more trusted CA certificates. If ca_cert and ca_path are not
#	included, server certificate will not be verified. This is insecure and
#	a trusted CA certificate should always be configured when using
#	EAP-TLS/TTLS/PEAP. Full path should be used since working directory may
#	change when wpa_supplicant is run in the background.
#
# (identity: EAP 를 위한 Identity string)
# (이 필드는 EAP-PSK/PAX/SAKE/GPSK 를 위한 user NAI 를 설정하기위해 또한 사용된다)
# (anonymous_identity: EAP(예를들면, EAP-TTLS 같은 다른 터널링된 identity 를 지원하는 EAP 타입의 복호화된 identity 로서 사용해온)를 위한 Anonymous identity string.)
# (이 필드는 pseudonym identity 를 저장하기위해 EAP-SIM/AKA/AKA 를 또한 사용해왔다)
# (password: EAP 를 위한 Password string. 이 필드는 평문 패스워드(아스키 또는 hex string) 또는 hash 의 NtPasswordHash(16바이트 MD4 hash 패스워드) : <32 hex digits> 형식.)
# (NtPasswordHash 는 패스워드가 MSCHAPv2 또는 MSCHAP (EAP-MSCHAPv2, EAP-TTLS/MSCHAPv2, EAP-TTLS/MSCHAP, LEAP) 일때, 사용한다)
# (EAP-PSK (128-bit PSK), EAP-PAX (128-bit PSK), and EAP-SAKE (256-bit PSK)는 이 필드를 사용할 때 또한 설정된다. EAP-GPSK 를 위해서, 이것은 PSK 길이 변수이다)
# (ext:<name of external password field> 형식으로 외부 저장장치에 저장된 패스워드를 가리키는데 사용한다)
# (ca_cert: CA certificate file (PEM/DER) 의 파일 경로. 이 파일은 하나 또는 그 이상의 인증된 CA 인증서를 가진다)
# (만일 ca_cert 과 ca_path 가 포함되지 않으면, 서버 인증서는 검증되지 않을 것이다. 이것은 안전하지 않고, 인증된 CA 인증서는 항상 설정될 것이다. EAP-TLS/TTLS/PEAP 를 사용할 때마다)
# (wpa_supplicant 가 백그라운드로 실행될 때, 작업 디렉토리가 변경될 수 있기 때문에 전체경로를 사용한다)
#
#
#	Alternatively, this can be used to only perform matching of the server
#	certificate (SHA-256 hash of the DER encoded X.509 certificate). In
#	this case, the possible CA certificates in the server certificate chain
#	are ignored and only the server certificate is verified. This is
#	configured with the following format:
#	hash:://server/sha256/cert_hash_in_hex
#	For example: "hash://server/sha256/
#	5a1bc1296205e6fdbe3979728efe3920798885c1c4590b5f90f43222d239ca6a"
#
# (대안적으로, 이것은 서버 인증(DER encoded X.509 certificate 의 SHA-256 hash)의 매칭하는 것 오직 실행하기 위해 사용한다. 이 경우, 서버 인증 사슬(chain)에서 가능한 CA 인증은 무시되고, 오직 서버 인증만 검증된다.)
# (이것은 다음 형식으로 설정할 수 있다)
# (hash:://server/sha256/cert_hash_in_hex)
#
#	On Windows, trusted CA certificates can be loaded from the system
#	certificate store by setting this to cert_store://<name>, e.g.,
#	ca_cert="cert_store://CA" or ca_cert="cert_store://ROOT".
#	Note that when running wpa_supplicant as an application, the user
#	certificate store (My user account) is used, whereas computer store
#	(Computer account) is used when running wpasvc as a service.
# ca_path: Directory path for CA certificate files (PEM). This path may
#	contain multiple CA certificates in OpenSSL format. Common use for this
#	is to point to system trusted CA list which is often installed into
#	directory like /etc/ssl/certs. If configured, these certificates are
#	added to the list of trusted CAs. ca_cert may also be included in that
#	case, but it is not required.
# client_cert: File path to client certificate file (PEM/DER)
#	Full path should be used since working directory may change when
#	wpa_supplicant is run in the background.
#	Alternatively, a named configuration blob can be used by setting this
#	to blob://<blob name>.
#
# (윈도우에서 신뢰하는 CA 인증은 시스템 인증 store 로부터 로딩된다. 이때 설정은 cert_store://<name> 로 한다.)
# (예를들면, ca_cert="cert_store://CA 또는 ca_cert="cert_store://ROOT)
# (애플리케이션으로서 wpa_supplicant 가 실행될 때, 유저 인증 store(나의 유저 계정)가 사용되고, computer store(Computer 계정)은 서비스로서 wpasvc 가 실행될 때, 사용된다)
# (ca_path: CA certificate files (PEM)을 위한 디렉토리 경로. 이 경로는 OpenSSL 형식에서 multiple CA certificates 를 포함할 수도 있다.)
# (보통 /etc/ssl/certs 같은 디렉토리에 자주 설치되는 system trusted CA list 를 가리키는데 사용한다.)
# (만일 설정되어 있다면, 이 인증들은 trusted CAs 의 리스트에 추가된다. 이런 경우에 ca_cert 는 또한 포함될 수도 있다. 하지만, 요구되지는 않는다)
# (client_cert: client certificate file (PEM/DER) 의 파일 경로)
# (전체 경로는 wpa_supplicat 가 백그라운드에서 동작할 때, 바뀔 수도 있기 때문에 사용한다. 대안으로는 blob 설정으로 할 수 있다 blob://<blob name>)
#
# private_key: File path to client private key file (PEM/DER/PFX)
#	When PKCS#12/PFX file (.p12/.pfx) is used, client_cert should be
#	commented out. Both the private key and certificate will be read from
#	the PKCS#12 file in this case. Full path should be used since working
#	directory may change when wpa_supplicant is run in the background.
#	Windows certificate store can be used by leaving client_cert out and
#	configuring private_key in one of the following formats:
#	cert://substring_to_match
#	hash://certificate_thumbprint_in_hex
#	for example: private_key="hash://63093aa9c47f56ae88334c7b65a4"
#	Note that when running wpa_supplicant as an application, the user
#	certificate store (My user account) is used, whereas computer store
#	(Computer account) is used when running wpasvc as a service.
#	Alternatively, a named configuration blob can be used by setting this
#	to blob://<blob name>.
# private_key_passwd: Password for private key file (if left out, this will be
#	asked through control interface)
# dh_file: File path to DH/DSA parameters file (in PEM format)
#	This is an optional configuration file for setting parameters for an
#	ephemeral DH key exchange. In most cases, the default RSA
#	authentication does not use this configuration. However, it is possible
#	setup RSA to use ephemeral DH key exchange. In addition, ciphers with
#	DSA keys always use ephemeral DH keys. This can be used to achieve
#	forward secrecy. If the file is in DSA parameters format, it will be
#	automatically converted into DH params.
#
# (private_key: client private key file (PEM/DER/PFX) 의 파일 경로)
# (PKCS#12/PFX 파일을 사용할 때, client_cert 는 주석처리한다. private key 와 certificate 은 둘다 PKCS#12 파일로부터 읽어들인다.)
# (전체 경로는 wpa_supplicat 가 백그라운드에서 동작할 때, 바뀔 수도 있기 때문에 사용한다. Windows certificate store 는 client_cert out 과 private_key 를 설정을 해제함으로서 사용한다. 다음 포맷 중 하나로서.)
# (cert://substring_to_match)
# (hash://certificate_thumbprint_in_hex)
# (for example: private_key="hash://63093aa9c47f56ae88334c7b65a4")
# (애플리케이션으로서 wpa_supplicant 가 실행될 때, 유저 인증 store(나의 유저 계정)가 사용되고, computer store(Computer 계정)은 서비스로서 wpasvc 가 실행될 때, 사용된다)
# (대안으로는 blob 설정으로 할 수 있다 blob://<blob name>)
#
# (private_key_passwd: private key file 을 위한 Password(만약 빼버린다면, 이것은 control interface 를 통해 물어볼 것이다))
# (dh_file: DH/DSA parameters file (in PEM format) 의 파일경로)
# (이것은 짧은 시간 동안에 DH key 교환을 위한 파라메터를 세팅에 필요한 선택적인 설정파일이다.)
# (대부분 경우, 기본 RSA 인증은 이 설정을 사용하지 않는다. 그러나 짧은 시간 동안에 DH key 교환을 사용하는 RSA 설치는 가능하다.)
# (게다가, DSA keys 의 암호는 짧은 시간 동안의 DH keys 를 항상 사용한다. 이것은 앞으로의 보안을 달성하기위해 사용된다.)
# (만일, 파일이  DSA 파라메터 형식이면, 자동으로 DH params 로 변환되어 적용될 것이다)
#
# subject_match: Substring to be matched against the subject of the
#	authentication server certificate. If this string is set, the server
#	sertificate is only accepted if it contains this string in the subject.
#	The subject string is in following format:
#	/C=US/ST=CA/L=San Francisco/CN=Test AS/emailAddress=as@example.com
# altsubject_match: Semicolon separated string of entries to be matched against
#	the alternative subject name of the authentication server certificate.
#	If this string is set, the server sertificate is only accepted if it
#	contains one of the entries in an alternative subject name extension.
#	altSubjectName string is in following format: TYPE:VALUE
#	Example: EMAIL:server@example.com
#	Example: DNS:server.example.com;DNS:server2.example.com
#	Following types are supported: EMAIL, DNS, URI
# phase1: Phase1 (outer authentication, i.e., TLS tunnel) parameters
#	(string with field-value pairs, e.g., "peapver=0" or
#	"peapver=1 peaplabel=1")
#	'peapver' can be used to force which PEAP version (0 or 1) is used.
#	'peaplabel=1' can be used to force new label, "client PEAP encryption",
#	to be used during key derivation when PEAPv1 or newer. Most existing
#	PEAPv1 implementation seem to be using the old label, "client EAP
#	encryption", and wpa_supplicant is now using that as the default value.
#	Some servers, e.g., Radiator, may require peaplabel=1 configuration to
#	interoperate with PEAPv1; see eap_testing.txt for more details.
#	'peap_outer_success=0' can be used to terminate PEAP authentication on
#	tunneled EAP-Success. This is required with some RADIUS servers that
#	implement draft-josefsson-pppext-eap-tls-eap-05.txt (e.g.,
#	Lucent NavisRadius v4.4.0 with PEAP in "IETF Draft 5" mode)
#	include_tls_length=1 can be used to force wpa_supplicant to include
#	TLS Message Length field in all TLS messages even if they are not
#	fragmented.
#	sim_min_num_chal=3 can be used to configure EAP-SIM to require three
#	challenges (by default, it accepts 2 or 3)
#	result_ind=1 can be used to enable EAP-SIM and EAP-AKA to use
#	protected result indication.
#	'crypto_binding' option can be used to control PEAPv0 cryptobinding
#	behavior:
#	 * 0 = do not use cryptobinding (default)
#	 * 1 = use cryptobinding if server supports it
#	 * 2 = require cryptobinding
#	EAP-WSC (WPS) uses following options: pin=<Device Password> or
#	pbc=1.
# phase2: Phase2 (inner authentication with TLS tunnel) parameters
#	(string with field-value pairs, e.g., "auth=MSCHAPV2" for EAP-PEAP or
#	"autheap=MSCHAPV2 autheap=MD5" for EAP-TTLS)
#
# (subject_match: 인증 서버 인증의 목적(subject)에 대응해서 매칭되는 부분 문자열. 만일 문자열이 설정되면, 서버 인증은 오직 목적(subject)에 이 문자열이 포함될 때 오직 수용한다.)
# (목적(subject) 문자열은 다음 형식이다:)
# (/C=US/ST=CA/L=San Francisco/CN=Test AS/emailAddress=as@example.com)
# (altsubject_match: 엔트리의 세미콜론(;)으로 나눠진 문자열은 인증서버 인증서(authentication server certificate)의 대안 목적(subject)에 대응하여 매칭된다.)
# (만일 이 문자열이 설정되면, 서버 인증은 오직 alternative subject name extension 의 엔트리 중에 하나가 포함되었을 때 수용한다.)
# (altSubjectName 문자열은 다음의 형식을 따른다)
# (Example: EMAIL:server@example.com, Example: DNS:server.example.com;DNS:server2.example.com) 
# (다음의 타입도 지원한다 : EMAIL, DNS, URI)
# (phase1: Phase1 (외부 인증, 예를 들어 TLS tunnel) 파라메터(string with field-value pairs 예를들면, peapver=0 또는 peapver=1 peaplabel=1))
# (peapver 는 PEAP version (0 or 1)을 강제로 사용해야 할때, 사용한다. peaplabel=1 는 새로운 라벨을 강제로 사용하는데 사용한다.)
# (client PEAP encryption 은 PEAPv1 또는 newer 일때, key derivation(생성시간) 동안에 사용된다.) 
# (대부분 현존하는 PEAPv1 동작은 오래된 라벨(client EAP encryption)을 사용하는 것으로 보인다.)
# (그리고 wpa_supplicant 는 기본값으로서 현재 사용하고 있다)
# (어떤 서버들은(예를들어 Radiator), PEAPv1 에서 동작하기 위해 peaplabel=1 설정을 요구한다.)
# (좀더 자세한 것을 보려면, eap_testing.txt 를 보기바란다. peap_outer_success=0 은 tunneled EAP-Success 상에서 PEAP authentication 을 종료시키기위해 사용될 수 있다.)
# (이것은 draft-josefsson-pppext-eap-tls-eap-05.txt 를 실행하는 어떤 RADIUS 서버에서 요구된다.(예를들면, IETF Draft 5 모드 에서 PEAP 의 Lucent NavisRadius v4.4.0))
# (include_tls_length=1 은 wpa_supplicant 에서 강제로 사용될 수 있다. 만일 fragmented 되지 않았다면, 모든 TLS 메세지에서의 TLS Message Length field 를 포함하기 위해.)
# (sim_min_num_chal=3 은 EAP-SIM 을 설정하는데 사용된다. 3가지 도전을 요구하기 위해.(기본적으로 2 또는 3을 사용))
# (result_ind=1 EAP-SIM 과 보호된 결과를 사용하기 위한 EAP-AKA 을 활성화하는데 사용한다.)
# (crypto_binding 옵션은 PEAPv0 cryptobinding behavior 를 콘트롤하기 위해 사용한다.)
# (0 = cryptobinding 하지 않는다(기본값))
# (1 = 서버가 지원한다면, cryptobinding 를 사용한다)
# (2 = cryptobinding 를 요구한다)
# (EAP-WSC(WPS)는 다은 옵션을 사용한다: pin=<Device Password> or pbc=1)
# (phase2: Phase2(TLS tunnel 을 통한 내부 인증) 파라메터(예를들면, EAP-PEAP 를 위한 auth=MSCHAPV2 또는 EAP-TTLS 를 위한 autheap=MSCHAPV2 autheap=MD5)
#
#
# TLS-based methods can use the following parameters to control TLS behavior
# (these are normally in the phase1 parameter, but can be used also in the
# phase2 parameter when EAP-TLS is used within the inner tunnel):
# tls_allow_md5=1 - allow MD5-based certificate signatures (depending on the
#	TLS library, these may be disabled by default to enforce stronger
#	security)
# tls_disable_time_checks=1 - ignore certificate validity time (this requests
#	the TLS library to accept certificates even if they are not currently
#	valid, i.e., have expired or have not yet become valid; this should be
#	used only for testing purposes)
# tls_disable_session_ticket=1 - disable TLS Session Ticket extension
# tls_disable_session_ticket=0 - allow TLS Session Ticket extension to be used
#	Note: If not set, this is automatically set to 1 for EAP-TLS/PEAP/TTLS
#	as a workaround for broken authentication server implementations unless
#	EAP workarounds are disabled with eap_workarounds=0.
#	For EAP-FAST, this must be set to 0 (or left unconfigured for the
#	default value to be used automatically).
#
# (TLS-based method 는 TLS 동작을 콘트롤하는 파라메터를 사용하는 것이다(이것들은 보통 phase1 파라메터들이다. 그러나 EAP-TLS 가 inner tunnel 에서 사용될 때 phase2 파라메터들도 또한 사용된다.))
# (tls_allow_md5=1 - MD5-based 인증 시그니쳐를 허용(TLS 라이브러리에 의존적임. 이것은 강력한 보안을 실행하기 위해 비활성화 될 수도 있다.)
# (tls_disable_time_checks=1 - 유효시간 인증을 무시함(TLS library 가 그것이 현재 유효하지 않더라도 인증을 승인하기 위해 요청함. 예를들면, 만료되었거나, 아직 유효하지 않을 때, 이것은 오직 테스트 목적으로 사용된다))
# (tls_disable_session_ticket=1 - TLS Session Ticket 확장을 비활성화)
# (tls_disable_session_ticket=0 - TLS Session Ticket 확장을 사용하도록 허용. 만일 설정되지 않으면, eap_workarounds=0 로 EAP workarounds 가 비활성되지 않는한 고장난 인증서버를 위한 대체방법으로서 EAP-TLS/PEAP/TTLS 를 위해 1로 자동으로 설정됨)
# (EAP-FAST 를 위해, 이것은 0 으로 설정되어야 한다(또는 자동으로 기본값으로 설정하지 않도록 두었을 때))
#
# Following certificate/private key fields are used in inner Phase2
# authentication when using EAP-TTLS or EAP-PEAP.
# ca_cert2: File path to CA certificate file. This file can have one or more
#	trusted CA certificates. If ca_cert2 and ca_path2 are not included,
#	server certificate will not be verified. This is insecure and a trusted
#	CA certificate should always be configured.
# ca_path2: Directory path for CA certificate files (PEM)
# client_cert2: File path to client certificate file
# private_key2: File path to client private key file
# private_key2_passwd: Password for private key file
# dh_file2: File path to DH/DSA parameters file (in PEM format)
# subject_match2: Substring to be matched against the subject of the
#	authentication server certificate.
# altsubject_match2: Substring to be matched against the alternative subject
#	name of the authentication server certificate.
#
# fragment_size: Maximum EAP fragment size in bytes (default 1398).
#	This value limits the fragment size for EAP methods that support
#	fragmentation (e.g., EAP-TLS and EAP-PEAP). This value should be set
#	small enough to make the EAP messages fit in MTU of the network
#	interface used for EAPOL. The default value is suitable for most
#	cases.
#
# (EAP-TTLS 또는 EAP-PEAP 를 사용할 때, 내부 Phase2 인증에서 사용하는 certificate/private key 필드)
# (ca_cert2: CA certificate file 의 파일 경로. 이 파일은 하나 또는 그 이상의 신뢰된 CA certificates 를 가진다. 만일 ca_cert2 와 ca_path2 가 포함되지 않으면, server certificate 는 유효하지 않을 것이다.)
# (이것은 불안정하고, 신뢰한 CA certificate 는 항상 설정되어야 한다.)
# (ca_path2: CA certificate files (PEM) 을 위한 디렉토리 경로)
# (client_cert2: client certificate file 의 파일 경로)
# (private_key2: client private key file 의 파일 경로)
# (private_key2_passwd: private key file 을 위한 패스워드)
# (dh_file2: DH/DSA parameters file(in PEM format) 의 파일 경로)
# (subject_match2: authentication server certificate 의 subject 에 대응하여 매칭되는 부분 문자열)
# (altsubject_match2: authentication server certificate 의 대체 subject name 에 대응하여 매칭되는 부분 문자열)
# 
# (fragment_size: 바이트의 최대 EAP fragment size (기본값은 1398))
# (이 값은 fragmentation 을 지원하는 EAP methods 를 위한 fragment size 의 limit 이다. 예를들면, EAP-TLS and EAP-PEAP)
# (이 값은 EAPOL 를 위한 네트워크 인터페이스의 MTU 에서 EAP messages 를 딱 맞게 만들기 위해 작게 설정되어야 한다.)
# (기본값은 대부분의 경우에 적당하다)
#
# EAP-FAST variables:
# pac_file: File path for the PAC entries. wpa_supplicant will need to be able
#	to create this file and write updates to it when PAC is being
#	provisioned or refreshed. Full path to the file should be used since
#	working directory may change when wpa_supplicant is run in the
#	background. Alternatively, a named configuration blob can be used by
#	setting this to blob://<blob name>
# phase1: fast_provisioning option can be used to enable in-line provisioning
#         of EAP-FAST credentials (PAC):
#         0 = disabled,
#         1 = allow unauthenticated provisioning,
#         2 = allow authenticated provisioning,
#         3 = allow both unauthenticated and authenticated provisioning
#	fast_max_pac_list_len=<num> option can be used to set the maximum
#		number of PAC entries to store in a PAC list (default: 10)
#	fast_pac_format=binary option can be used to select binary format for
#		storing PAC entries in order to save some space (the default
#		text format uses about 2.5 times the size of minimal binary
#		format)
#
# (EAP-FAST 변수:)
# (pac_file: PAC entries 를 위한 File 경로. wpa_supplicant 는 PAC 가 공급되거나 회복(refresh) 되었을 때, 이 파일을 생성하고, 업데이트 갱신하는 것을 필요로 한다.)
# (wpa_supplicant 가 백그라운드로 실행할 때, 작업디렉토리가 변경될 수도 있기 때문에 파일의 전체경로를 사용한다)
# (대안으로는, blob 설정으로서 가능하다. blob://<blob name>)
# (phase1: fast_provisioning 옵션은 in-line provisioning of EAP-FAST credentials (PAC) 을 활성화하는데 사용한다)
# (0 = 비활성화,)
# (1 = 인증되지 않은 provisioning 을 허용)
# (2 = 인증된 provisioning 을 허용)
# (3 = 1 번과 2번의 provisioning 을 모두 허용)
# (fast_max_pac_list_len=<num> 옵션은 PAC list 에 저장된 PAC 엔트의 최대 숫자값을 설정하는데 사용한다.(기본값 : 10))
# (fast_pac_format=binary 옵션은 어떤 공간을 절약하기 위해 PAC entries 를 저장하기 위한 바이너리 포맷을 선택하는데 사용한다)
#
# wpa_supplicant supports number of "EAP workarounds" to work around
# interoperability issues with incorrectly behaving authentication servers.
# These are enabled by default because some of the issues are present in large
# number of authentication servers. Strict EAP conformance mode can be
# configured by disabling workarounds with eap_workaround=0.
#
# (wpa_supplicant 는 잘못 동작하는 인증 서버와의 상호 동작상의 문제를 대처하기 위한  EAP workarounds 의 갯수를 지원한다.)
# (이것은 기본적으로 활성화된다. 어떤 문제들이 많은 대수의 인증서버들에 존재하기 때문이다. Strict EAP conformance mode 는 eap_workaround=0 의 workarounds 를 비활성화함으로서 설정되어질 수 있다.)
#
# Station inactivity limit
#
# If a station does not send anything in ap_max_inactivity seconds, an
# empty data frame is sent to it in order to verify whether it is
# still in range. If this frame is not ACKed, the station will be
# disassociated and then deauthenticated. This feature is used to
# clear station table of old entries when the STAs move out of the
# range.
#
# (Station 무활동(inactivity) 제한)
# (만일 station 이 ap_max_inactivity 시간에 어떤 것도 보내지 않으면, 아직 범위내에 있는지 검증하기 위해 빈 데이터 프레임이 전달된다.)
# (만일 이 프레임이 ACKed 되지 않으면, station 은 disassociated 하고, deauthenticated 할 것이다. 이 특징은 station 이 범위 밖으로 옮겨졌을 때, 오래된 엔트리의 station table 을 clear 하는데 사용된다.)
#
#
# The station can associate again with the AP if it is still in range;
# this inactivity poll is just used as a nicer way of verifying
# inactivity; i.e., client will not report broken connection because
# disassociation frame is not sent immediately without first polling
# the STA with a data frame.
# default: 300 (i.e., 5 minutes)
#ap_max_inactivity=300
#
# (아직 범위내에 있다면, station 은 AP 에 다시 연결할 수 있다; 이 inactivity poll 은 inactivity 를 검증하는 좋은 방법으로 사용되어 왔다. 예를 들어, client 접속이 끊어진 것을 보고 하지 않았다. data 프레임과 STA 첫번째 폴링없이 disassociation 프레임이 곧바로 전송되지 않았기 때문이다.)
# (기본값: 300 (예를들어 5 분))
# (ap_max_inactivity=300)
#
# DTIM period in Beacon intervals for AP mode (default: 2)
#dtim_period=2
#
# (AP 모드를 위한 비콘 주기 안의 DTIM period (기본값: 2))
#
# disable_ht: Whether HT (802.11n) should be disabled.
# 0 = HT enabled (if AP supports it)
# 1 = HT disabled
#
# (disable_ht: HT (802.11n) 를 비활성화 할지 여부)
# (0 = HT 활성화(만일 AP 가 지원한다면))
# (1 = HT 비활성화)
#
# disable_ht40: Whether HT-40 (802.11n) should be disabled.
# 0 = HT-40 enabled (if AP supports it)
# 1 = HT-40 disabled
# 
# (disable_ht40: HT-40 (802.11n) 를 비활성화 할지 여부)
# (0 = HT-40 활성화(만일 AP 가 지원한다면)
# (1 = HT-40 비활성화)
#
# disable_sgi: Whether SGI (short guard interval) should be disabled.
# 0 = SGI enabled (if AP supports it)
# 1 = SGI disabled
#
# (disable_sgi: SGI(short guard interval) 를 비활성화할지 여부)
# (0 = SGI 활성화(만일 AP 가 지원한다면))
# (1 = SGI 비활성화)
#
# ht_mcs:  Configure allowed MCS rates.
#  Parsed as an array of bytes, in base-16 (ascii-hex)
# ht_mcs=""                                   // Use all available (default)
# ht_mcs="0xff 00 00 00 00 00 00 00 00 00 "   // Use MCS 0-7 only
# ht_mcs="0xff ff 00 00 00 00 00 00 00 00 "   // Use MCS 0-15 only
#
# (ht_mcs: MCS rates 를 허용할지를 설정)
# (base-16 (ascii-hex) 에서 바이트 배열로서 분석함)
#
# disable_max_amsdu:  Whether MAX_AMSDU should be disabled.
# -1 = Do not make any changes.
# 0  = Enable MAX-AMSDU if hardware supports it.
# 1  = Disable AMSDU
#
# (disable_max_amsdu: MAX_AMSDU 를 비활성화 할지 여부)
# (-1 = 어떤 변화도 만들지 않음)
# (0 = 만일 하드웨어가 지원한다면, MAX-AMSDU 을 활성화)
# (1 = AMSDU 비활성화)
#
# ampdu_density:  Allow overriding AMPDU density configuration.
#  Treated as hint by the kernel.
# -1 = Do not make any changes.
# 0-3 = Set AMPDU density (aka factor) to specified value.
#
# (ampdu_density: AMPDU 밀도(density) 설정을 overriding(우선시 하는) 허용)
# (커널에 의한 힌드를 받음)
# (-1 = 어떤 변화도 만들지 않음)
# (0-3 = 특정한 값으로 AMPDU density(aka factor) 를 설정)
 
# Example blocks:
 
# Simple case: WPA-PSK, PSK as an ASCII passphrase, allow all valid ciphers
network={
	ssid="simple"
	psk="very secret passphrase"
	priority=5
}
 
# Same as previous, but request SSID-specific scanning (for APs that reject
# broadcast SSID)
network={
	ssid="second ssid"
	scan_ssid=1
	psk="very secret passphrase"
	priority=2
}
 
# Only WPA-PSK is used. Any valid cipher combination is accepted.
network={
	ssid="example"
	proto=WPA
	key_mgmt=WPA-PSK
	pairwise=CCMP TKIP
	group=CCMP TKIP WEP104 WEP40
	psk=06b4be19da289f475aa46a33cb793029d4ab3db7a23ee92382eb0106c72ac7bb
	priority=2
}
 
# WPA-Personal(PSK) with TKIP and enforcement for frequent PTK rekeying
network={
	ssid="example"
	proto=WPA
	key_mgmt=WPA-PSK
	pairwise=TKIP
	group=TKIP
	psk="not so secure passphrase"
	wpa_ptk_rekey=600
}
 
# Only WPA-EAP is used. Both CCMP and TKIP is accepted. An AP that used WEP104
# or WEP40 as the group cipher will not be accepted.
network={
	ssid="example"
	proto=RSN
	key_mgmt=WPA-EAP
	pairwise=CCMP TKIP
	group=CCMP TKIP
	eap=TLS
	identity="user@example.com"
	ca_cert="/etc/cert/ca.pem"
	client_cert="/etc/cert/user.pem"
	private_key="/etc/cert/user.prv"
	private_key_passwd="password"
	priority=1
}
 
# EAP-PEAP/MSCHAPv2 configuration for RADIUS servers that use the new peaplabel
# (e.g., Radiator)
network={
	ssid="example"
	key_mgmt=WPA-EAP
	eap=PEAP
	identity="user@example.com"
	password="foobar"
	ca_cert="/etc/cert/ca.pem"
	phase1="peaplabel=1"
	phase2="auth=MSCHAPV2"
	priority=10
}
 
# EAP-TTLS/EAP-MD5-Challenge configuration with anonymous identity for the
# unencrypted use. Real identity is sent only within an encrypted TLS tunnel.
network={
	ssid="example"
	key_mgmt=WPA-EAP
	eap=TTLS
	identity="user@example.com"
	anonymous_identity="anonymous@example.com"
	password="foobar"
	ca_cert="/etc/cert/ca.pem"
	priority=2
}
 
# EAP-TTLS/MSCHAPv2 configuration with anonymous identity for the unencrypted
# use. Real identity is sent only within an encrypted TLS tunnel.
network={
	ssid="example"
	key_mgmt=WPA-EAP
	eap=TTLS
	identity="user@example.com"
	anonymous_identity="anonymous@example.com"
	password="foobar"
	ca_cert="/etc/cert/ca.pem"
	phase2="auth=MSCHAPV2"
}
 
# WPA-EAP, EAP-TTLS with different CA certificate used for outer and inner
# authentication.
network={
	ssid="example"
	key_mgmt=WPA-EAP
	eap=TTLS
	# Phase1 / outer authentication
	anonymous_identity="anonymous@example.com"
	ca_cert="/etc/cert/ca.pem"
	# Phase 2 / inner authentication
	phase2="autheap=TLS"
	ca_cert2="/etc/cert/ca2.pem"
	client_cert2="/etc/cer/user.pem"
	private_key2="/etc/cer/user.prv"
	private_key2_passwd="password"
	priority=2
}
 
# Both WPA-PSK and WPA-EAP is accepted. Only CCMP is accepted as pairwise and
# group cipher.
network={
	ssid="example"
	bssid=00:11:22:33:44:55
	proto=WPA RSN
	key_mgmt=WPA-PSK WPA-EAP
	pairwise=CCMP
	group=CCMP
	psk=06b4be19da289f475aa46a33cb793029d4ab3db7a23ee92382eb0106c72ac7bb
}
 
# Special characters in SSID, so use hex string. Default to WPA-PSK, WPA-EAP
# and all valid ciphers.
network={
	ssid=00010203
	psk=000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f
}
 
 
# EAP-SIM with a GSM SIM or USIM
network={
	ssid="eap-sim-test"
	key_mgmt=WPA-EAP
	eap=SIM
	pin="1234"
	pcsc=""
}
 
 
# EAP-PSK
network={
	ssid="eap-psk-test"
	key_mgmt=WPA-EAP
	eap=PSK
	anonymous_identity="eap_psk_user"
	password=06b4be19da289f475aa46a33cb793029
	identity="eap_psk_user@example.com"
}
 
 
# IEEE 802.1X/EAPOL with dynamically generated WEP keys (i.e., no WPA) using
# EAP-TLS for authentication and key generation; require both unicast and
# broadcast WEP keys.
network={
	ssid="1x-test"
	key_mgmt=IEEE8021X
	eap=TLS
	identity="user@example.com"
	ca_cert="/etc/cert/ca.pem"
	client_cert="/etc/cert/user.pem"
	private_key="/etc/cert/user.prv"
	private_key_passwd="password"
	eapol_flags=3
}
 
 
# LEAP with dynamic WEP keys
network={
	ssid="leap-example"
	key_mgmt=IEEE8021X
	eap=LEAP
	identity="user"
	password="foobar"
}
 
# EAP-IKEv2 using shared secrets for both server and peer authentication
network={
	ssid="ikev2-example"
	key_mgmt=WPA-EAP
	eap=IKEV2
	identity="user"
	password="foobar"
}
 
# EAP-FAST with WPA (WPA or WPA2)
network={
	ssid="eap-fast-test"
	key_mgmt=WPA-EAP
	eap=FAST
	anonymous_identity="FAST-000102030405"
	identity="username"
	password="password"
	phase1="fast_provisioning=1"
	pac_file="/etc/wpa_supplicant.eap-fast-pac"
}
 
network={
	ssid="eap-fast-test"
	key_mgmt=WPA-EAP
	eap=FAST
	anonymous_identity="FAST-000102030405"
	identity="username"
	password="password"
	phase1="fast_provisioning=1"
	pac_file="blob://eap-fast-pac"
}
 
# Plaintext connection (no WPA, no IEEE 802.1X)
network={
	ssid="plaintext-test"
	key_mgmt=NONE
}
 
 
# Shared WEP key connection (no WPA, no IEEE 802.1X)
network={
	ssid="static-wep-test"
	key_mgmt=NONE
	wep_key0="abcde"
	wep_key1=0102030405
	wep_key2="1234567890123"
	wep_tx_keyidx=0
	priority=5
}
 
 
# Shared WEP key connection (no WPA, no IEEE 802.1X) using Shared Key
# IEEE 802.11 authentication
network={
	ssid="static-wep-test2"
	key_mgmt=NONE
	wep_key0="abcde"
	wep_key1=0102030405
	wep_key2="1234567890123"
	wep_tx_keyidx=0
	priority=5
	auth_alg=SHARED
}
 
 
# IBSS/ad-hoc network with WPA-None/TKIP.
network={
	ssid="test adhoc"
	mode=1
	frequency=2412
	proto=WPA
	key_mgmt=WPA-NONE
	pairwise=NONE
	group=TKIP
	psk="secret passphrase"
}
 
 
# Catch all example that allows more or less all configuration modes
network={
	ssid="example"
	scan_ssid=1
	key_mgmt=WPA-EAP WPA-PSK IEEE8021X NONE
	pairwise=CCMP TKIP
	group=CCMP TKIP WEP104 WEP40
	psk="very secret passphrase"
	eap=TTLS PEAP TLS
	identity="user@example.com"
	password="foobar"
	ca_cert="/etc/cert/ca.pem"
	client_cert="/etc/cert/user.pem"
	private_key="/etc/cert/user.prv"
	private_key_passwd="password"
	phase1="peaplabel=0"
}
 
# Example of EAP-TLS with smartcard (openssl engine)
network={
	ssid="example"
	key_mgmt=WPA-EAP
	eap=TLS
	proto=RSN
	pairwise=CCMP TKIP
	group=CCMP TKIP
	identity="user@example.com"
	ca_cert="/etc/cert/ca.pem"
	client_cert="/etc/cert/user.pem"
 
	engine=1
 
	# The engine configured here must be available. Look at
	# OpenSSL engine support in the global section.
	# The key available through the engine must be the private key
	# matching the client certificate configured above.
 
	# use the opensc engine
	#engine_id="opensc"
	#key_id="45"
 
	# use the pkcs11 engine
	engine_id="pkcs11"
	key_id="id_45"
 
	# Optional PIN configuration; this can be left out and PIN will be
	# asked through the control interface
	pin="1234"
}
 
# Example configuration showing how to use an inlined blob as a CA certificate
# data instead of using external file
network={
	ssid="example"
	key_mgmt=WPA-EAP
	eap=TTLS
	identity="user@example.com"
	anonymous_identity="anonymous@example.com"
	password="foobar"
	ca_cert="blob://exampleblob"
	priority=20
}
 
blob-base64-exampleblob={
SGVsbG8gV29ybGQhCg==
}
 
 
# Wildcard match for SSID (plaintext APs only). This example select any
# open AP regardless of its SSID.
network={
	key_mgmt=NONE
}

Appendix

먼저 libnl 을 크로스 컴파일해야 한다. http://www.carisma.slowglass.com/~tgr/libnl/ 에 다운로드 받을 수 있고, libnl-1.1.4.tar.gz 를 사용했다(2013년 7월 기준).
압축을 풀고, 다음과 같이 Makefile 파일을 생성한다.

#./configure --prefix=/usr/local/program/libnl

빌드하기 전에 툴체인 경로를 지정하기 위해 Makefile.opts 파일을 아래와 같이 수정한다.

CC               := /home/sungho/opt/montavista/pro/devkit/arm/v5t_le/bin/arm_v5t_le-gcc
...
AR               := /home/sungho/opt/montavista/pro/devkit/arm/v5t_le/bin/arm_v5t_le-ar
...

이제 빌드 후 설치한다.

#make
#make install

만일 빌드 하다가 '특정 define 값을 알 수 없다' 는 에러가 발생한다면, 리눅스 커널에서 해당 define 으로 검색한 후, 값을 소스코드에 직접 추가한다.
나의 경우, vlan.c 파일에 다음을 추가하였다.

#ifndef VLAN_FLAG_REORDER_HDR
#define VLAN_FLAG_REORDER_HDR 0x01
#endif

앞서 지정한 디렉토리(/usr/local/program/libnl)에 헤더 파일과 라이브러리가 생성되었을 것이다. 이후 wpa_supplicant 빌드 시, 이 경로를 참조할 것이다.

여기서는 기본적인 defconfig 파일을 기준으로 설명한다. 이 파일은 이후 .config 파일로 복사한다.
빌드하기전에 .config 파일을 수정하여 앞서 만든 libnl 라이브러리 경로를 지정한다. 아래 해당 부분의 주석을 풀고, 경로를 적어준다.

...
# Driver interface for FreeBSD net80211 layer (e.g., Atheros driver)
#CONFIG_DRIVER_BSD=y
CFLAGS += -I/usr/local/program/libnl/include
LIBS += -L/usr/local/program/libnl/lib
#LIBS_p += -L/usr/local/lib
#LIBS_c += -L/usr/local/lib
...

이제 빌드한다. 만일 빌드 시, '특정 define 값을 알 수 없다' 는 에러가 발생한다면, 리눅스 커널에서 해당 define 으로 검색한 후, 값을 소스코드에 직접 추가한다.
나의 경우, driver_nl80211.c 파일에 다음을 추가 하였다.

#ifndef CTRL_ATTR_MCAST_GROUPS
#define CTRL_ATTR_MCAST_GROUPS  7
#endif
 
enum {
    CTRL_ATTR_MCAST_GRP_UNSPEC,
    CTRL_ATTR_MCAST_GRP_NAME,
    CTRL_ATTR_MCAST_GRP_ID,
    __CTRL_ATTR_MCAST_GRP_MAX,
};

성공적으로 빌드가 되었다면, wpa_supplicant 라는 바이너리 파일이 보일 것이다. 이것으로 끝이 아니다.
실제 타겟보드에서 이 파일이 실행되기 위해서는 libnl 라이브러리가 필요하다. 공유 라이브러리로 빌드했기 때문이다.

#file wpa_supplicant
wpa_supplicant: ELF 32-bit LSB executable, ARM, version 1 (SYSV), for GNU/Linux 2.6.18, dynamically linked (uses shared libs), for GNU/Linux 2.6.18, not stripped

libnl.so.1.1.4 파일을 파일시스템의 /lib 디렉토리 아래에 복사하고, libnl.so.1 라는 이름의 심볼릭 링크를 생성해야 한다.
실제 정상적으로 동작하는 지 확인해보자.

wpa_cli -iwlan0 disconnect
for i in `wpa_cli -iwlan0 list_networks | grep ^[0-9] | cut -f1`; do wpa_cli -iwlan0 remove_network $i; done
wpa_cli -iwlan0 add_network
wpa_cli -iwlan0 set_network 0 auth_alg OPEN
wpa_cli -iwlan0 set_network 0 key_mgmt WPA-EAP
wpa_cli -iwlan0 set_network 0 pairwise TKIP
wpa_cli -iwlan0 set_network 0 group TKIP
wpa_cli -iwlan0 set_network 0 proto WPA
wpa_cli -iwlan0 set_network 0 eap TLS
wpa_cli -iwlan0 set_network 0 identity '"test"'
wpa_cli -iwlan0 set_network 0 client_cert '"/etc/certs/cert.pem"'
wpa_cli -iwlan0 set_network 0 private_key '"/etc/certs/key.pem"'
wpa_cli -iwlan0 set_network 0 private_key_passwd '"test"'
wpa_cli -iwlan0 set_network 0 mode 0
wpa_cli -iwlan0 set_network 0 ssid '"vic_BSS"'
wpa_cli -iwlan0 select_network 0
wpa_cli -iwlan0 enable_network 0
wpa_cli -iwlan0 reassociate
wpa_cli -iwlan0 status
wpa_cli -iwlan0 disconnect
for i in `wpa_cli -iwlan0 list_networks | grep ^[0-9] | cut -f1`; do wpa_cli -iwlan0 remove_network $i; done
wpa_cli -iwlan0 add_network
wpa_cli -iwlan0 set_network 0 auth_alg OPEN
wpa_cli -iwlan0 set_network 0 key_mgmt WPA-EAP
wpa_cli -iwlan0 set_network 0 pairwise TKIP
wpa_cli -iwlan0 set_network 0 group TKIP
wpa_cli -iwlan0 set_network 0 proto WPA
wpa_cli -iwlan0 set_network 0 eap PEAP
wpa_cli -iwlan0 set_network 0 identity "test"
wpa_cli -iwlan0 set_network 0 password "test"
wpa_cli -iwlan0 set_network 0 phase1 "peapver=0"
wpa_cli -iwlan0 set_network 0 phase2 "MSCHAPV2"
wpa_cli -iwlan0 set_network 0 mode 0
wpa_cli -iwlan0 set_network 0 ssid '"vic_BSS"'
wpa_cli -iwlan0 select_network 0
wpa_cli -iwlan0 enable_network 0
wpa_cli -iwlan0 reassociate
wpa_cli -iwlan0 status
wpa_cli -iwlan0 disconnect
for i in `wpa_cli -iwlan0 list_networks | grep ^[0-9] | cut -f1`; do wpa_cli -iwlan0 remove_network $i; done
wpa_cli -iwlan0 add_network
wpa_cli -iwlan0 set_network 0 auth_alg OPEN
wpa_cli -iwlan0 set_network 0 key_mgmt WPA-EAP
wpa_cli -iwlan0 set_network 0 pairwise TKIP
wpa_cli -iwlan0 set_network 0 group TKIP
wpa_cli -iwlan0 set_network 0 proto WPA
wpa_cli -iwlan0 set_network 0 eap PEAP
wpa_cli -iwlan0 set_network 0 identity "test"
wpa_cli -iwlan0 set_network 0 password "test"
wpa_cli -iwlan0 set_network 0 phase1 "peapver=0"
wpa_cli -iwlan0 set_network 0 phase2 "MSCHAPV2"
wpa_cli -iwlan0 set_network 0 mode 0
wpa_cli -iwlan0 set_network 0 ssid '"vic_BSS"'
wpa_cli -iwlan0 select_network 0
wpa_cli -iwlan0 enable_network 0
wpa_cli -iwlan0 reassociate
wpa_cli -iwlan0 status
wpa_cli -iwlan0 disconnect
for i in `wpa_cli -iwlan0 list_networks | grep ^[0-9] | cut -f1`; do wpa_cli -iwlan0 remove_network $i; done
wpa_cli -iwlan0 add_network
wpa_cli -iwlan0 set_network 0 auth_alg OPEN
wpa_cli -iwlan0 set_network 0 key_mgmt WPA-EAP
wpa_cli -iwlan0 set_network 0 pairwise CCMP
wpa_cli -iwlan0 set_network 0 group CCMP
wpa_cli -iwlan0 set_network 0 proto WPA2
wpa_cli -iwlan0 set_network 0 eap PEAP
wpa_cli -iwlan0 set_network 0 identity '"test"'
wpa_cli -iwlan0 set_network 0 password '"test"'
wpa_cli -iwlan0 set_network 0 phase1 '"peapver=0"'
wpa_cli -iwlan0 set_network 0 phase2 '"MSCHAPV2"'
wpa_cli -iwlan0 set_network 0 mode 0
wpa_cli -iwlan0 set_network 0 ssid '"vic_BSS"'
wpa_cli -iwlan0 select_network 0
wpa_cli -iwlan0 enable_network 0
wpa_cli -iwlan0 reassociate
wpa_cli -iwlan0 status
iw wlan0 link
wpa_cli -iwlan0 disconnect	
for i in `wpa_cli -iwlan0 list_networks | grep ^[0-9] | cut -f1`; do wpa_cli -iwlan0 remove_network $i; done
wpa_cli -iwlan0 add_network
wpa_cli -iwlan0 set_network 0 auth_alg OPEN
wpa_cli -iwlan0 set_network 0 key_mgmt WPA-EAP
#wpa_cli -iwlan0 set_network 0 pairwise CCMP TKIP
#wpa_cli -iwlan0 set_network 0 group CCMP TKIP
wpa_cli -iwlan0 set_network 0 proto WPA2
wpa_cli -iwlan0 set_network 0 eap TLS
wpa_cli -iwlan0 set_network 0 identity '"test"'
wpa_cli -iwlan0 set_network 0 client_cert '"/etc/certs/cert.pem"'
wpa_cli -iwlan0 set_network 0 private_key '"/etc/certs/key.pem"'
wpa_cli -iwlan0 set_network 0 private_key_passwd '"test"'
wpa_cli -iwlan0 set_network 0 mode 0
wpa_cli -iwlan0 set_network 0 ssid '"vic_BSS"'
wpa_cli -iwlan0 select_network 0
wpa_cli -iwlan0 enable_network 0
wpa_cli -iwlan0 reassociate
wpa_cli -iwlan0 status
iw wlan0 link

AP 접속이 안된 상태에서는 'Automatic scan' 기능을 사용하고, AP 접속이 완료된 상태에서는 'Background scanning' 기능을 사용한다.

wpa_supplicant 를 사용해서 AP 접속을 시도할 때, 반드시 network 를 만들어야 한다. 이는 해당 AP 에 접속할 수 있는 정보(SSID, 비밀번호, 인증방식 등)를 포함하고 있는데, 이것은 하나의 Profile 이라고 볼 수 있다. 0 번 부터 Profile 을 만들 수 있다.

이러한 Profile 을 여러개 만들 수 있는데, 이를 이용해서 활용할 수 있다.

  1. 현재 접속 중인 AP 와의 연결이 끊어졌을 때, 기존에 접속했던 다른 AP 로 접속을 가능하게끔 하고 싶을 때
  2. 기존에 접속했던 공유기에 접속 시, 별다른 추가적인 입력(비밀번호 입력)이 접속을 하고 싶을 때

wpa_supplicant 의 기본 설정은 접속 도중 연결이 끊기면, 가장 마지막에 접속된 AP 로의 시도를 하는 것이다. 하지만, 다른 Profile 로의 접속을 하도록 하려면, 아래와 같이 enable_network 명령어를 추가해주어야 한다.

예제를 들어보겠다. 총 3개의 network 0~2 를 선언한다.

>wpa_cli -p /var/run/wpa_supplicant ap_scan 1
>wpa_cli -p /var/run/wpa_supplicant add_network
>wpa_cli -p /var/run/wpa_supplicant set_network 0 ssid '"WIFI_DEV1"'
>wpa_cli -p /var/run/wpa_supplicant set_network 0 psk '"88888888"'
>wpa_cli -p /var/run/wpa_supplicant set_network 0 priority 5
>wpa_cli -p /var/run/wpa_supplicant ap_scan 1
>wpa_cli -p /var/run/wpa_supplicant add_network
>wpa_cli -p /var/run/wpa_supplicant set_network 1 ssid '"WIFI_DEV2"'
>wpa_cli -p /var/run/wpa_supplicant set_network 1 psk '"88888888"'
>wpa_cli -p /var/run/wpa_supplicant set_network 1 priority 6
>wpa_cli -p /var/run/wpa_supplicant ap_scan 1
>wpa_cli -p /var/run/wpa_supplicant add_network
>wpa_cli -p /var/run/wpa_supplicant set_network 2 ssid '"WIFI_DEV3"'
>wpa_cli -p /var/run/wpa_supplicant set_network 2 psk '"88888888"'
>wpa_cli -p /var/run/wpa_supplicant set_network 2 priority 7
> list_networks 
network id / ssid / bssid / flags
0	WIFI_DEV1	any	[DISABLED]
1	WIFI_DEV2	any	[DISABLED]
2	WIFI_DEV3	any	[DISABLED]
>enable_network 0
>enable_network 1
>enable_network 2
> list_networks 
network id / ssid / bssid / flags
0	WIFI_DEV1	any	[CURRENT]
1	WIFI_DEV2	any	
2	WIFI_DEV3	any	

현재 0 번에 접속이 되어 있는 상태이다. 이때 0 번의 접속을 강제로 끊으면, 1번 AP 로 접속이 된다. 1번도 접속이 끊어진다면, 2번 AP 로 접속이 된다.
이후 접속이 되는 순서는 각각의 Profile 의 우선순위가 동일하기 때문에 번호대로 순차적으로 접속된다.
만일 접속 순서를 지정하고 싶다면, Profile 의 우선순위를 지정하면 된다. 숫자가 클 수록 우선순위가 높다.

>wpa_cli -p /var/run/wpa_supplicant set_network 0 priority 5
>wpa_cli -p /var/run/wpa_supplicant set_network 1 priority 6
>wpa_cli -p /var/run/wpa_supplicant set_network 2 priority 7
  • computer/technology/wpa_supplicant_핵심가이드.txt
  • Last modified: 3 years ago
  • by likewind