hostapd 的main函式位於hostapd/hostapd.c中。函式開始是日誌相關以及對命令列引數選項的處理。緊接著進入hostapd初始化階段,hostapd包括以下四個步驟。初始化完成之後,進入eloop_run(),通過select函式判斷是否有新的事件,並呼叫相應處理函式進行處理。最後階段,hostapd釋放記憶體,並進行一些清理工作。
h:呼叫
usage()
函式,列印使用說明
static void usage(void)
d:case 'd':
debug++;
if (wpa_debug_level > 0)
wpa_debug_level--;
如果選項中每出現乙個d則
debug
級別遞增,同時日誌級別數字降低。
在src/utils/wpa_debug.c
中有定義:
int wpa_debug_level = msg_info;
int wpa_debug_show_keys = 0;
int wpa_debug_timestamp = 0;
這裡enum ;
其中msg_info值為2
,在該級別時正常情況下基本沒有日誌輸出。
預設級別就是
msg_info
,因而要想獲得更多執行流程中的輸出就需要增加
debug
級別。如果想把碼流及各
radius
屬性均列印出的話就將級別調為
msg_msgdump=0
吧。【本系列分析中
debug
級別或日誌級別越高指的是
debug
變數值越大,
wpa_debug_level
值越低。】
b:作為守護程序執行,
case 'b':
daemonize++;
break;
如果含有該選項則執行
os_daemonize(pid_file)
if (daemonize && os_daemonize(pid_file))
在utils/os_win32.c
中該函式未實現。
在utils/os_unix.c
中定義為
int os_daemonize(const char *pid_file)
if (pid_file)
}return -0;
#endif /* __uclinux__ */}其中
os_daemon
即為daemon
系統呼叫。如果呼叫成功則獲取程序
id並寫入
pid_file
指定的檔案中。
k:case 'k':
wpa_debug_show_keys++;
break;
用於控制在除錯時是否輸出金鑰相關
key值。如需輸出金鑰還需要設定日誌級別為
msg_debug
或以上例如
:wpa_hexdump_key(msg_debug, "eap-ttls: derived implicit challenge",
challenge, len);
如果選項中沒有
k顯式說明,則即使日誌級別為
msg_debug
或msg_msgdump
也不會輸出的。
p:case 'p':
os_free(pid_file);
pid_file = os_rel2abs_path(optarg);
break;
設定pid_file
的值,os_rel2abs_path
將引數提供的相對路徑轉為絕對路徑。
t:case 't':
wpa_debug_timestamp++;
break;
該項作用為在日誌中包含時間戳資訊。
wpa_debug_timestamp
的定義參見選項
d時的說明,預設值為
0,即不包含。
帶時間戳效果為
1270995804.000000: eap: eap entering state received
1270995804.000000: eap: parseeapresp: rxresp=1 respid=77 respmethod=21 respvendor=0 respvendormethod=0
1270995804.000000: eap: eap entering state integrity_check
1270995804.000000: eap: eap entering state method_response
1270995804.000000: ssl: received packet(len=176) - flags 0x00
1270995804.000000: ssl: received packet: flags 0x0 message length 0
vcase 'v':
show_version();
exit(1);
break;
顯式版本號並退出。
static void show_version(void)
#defi
ne version_str "0.6.10"
hostapd_setup_inte***ce中主要進行了如下工作:
初始化驅動介面、確認配置,並根據配置設定驅動引數、清除過時的station、根據配置設定通道,加密演算法,beacons以及wds links
1.初始化驅動介面hostapd_driver_init()
arm彙編 main函式分析
arm 彙編分析1.主要是為了搞清楚原子操作的實現原理。2.在 c語言環境下 變數賦值應該是可以被打斷。3.還有是在c語言中變數賦值操作對應的彙編 4.原子操作的主要流程 read modify write rwm 那麼接下來先看一下c 語言 include intfunc intmain 反彙編之...
c c 之 main函式引數
一直知道但是沒有深究的東西。說簡單點就是 int argc 表示讀入字串個數 char argv 指標陣列,用來存放讀入的字串 程式的意思逐個輸出所有讀入的字串,每個字串間空乙個製表符間隔。由於main函式不能被其它函式呼叫,因此不可能在程式內部取得實際值。那麼,在何處把實參值賦予main函式的形參...
c c 之 main函式引數
一直知道但是沒有深究的東西。說簡單點就是 int argc 表示讀入字串個數 char ar 指標陣列,用來存放讀入的字串 程式的意思逐個輸出所有讀入的字串,每個字串間空乙個製表符間隔。由於main函式不能被其它函式呼叫,因此不可能在程式內部取得實際值。那麼,在何處把實參值賦予main函式的形參呢?...