hostapd之main 函式分析

2021-09-30 06:52:55 字數 2814 閱讀 8700

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函式的形參呢?...