天天看點

Freeradius2.1.12啟動流程

        這兩天工作上事情不太多,趁有空重新走讀和研究了一下freeradius2.1.12的源碼,對freeradius的啟動方式有了進一步的了解,現總結如下。

1 首先是程式入口函數,即main函數。 freeradius2.1.12版的main函數在radiusd.c檔案中;

2 程式開始運作後,首先讀取各配置檔案内容。該部分功能集中在read_mainconfig函數中,該函數中通過遞歸方式讀取各配置檔案中的配置項,各配置      檔案配置項以及伺服器的相關配置都儲存在全局變量mainconfig中,其中配置項以紅黑樹來儲存,友善高效查找等操作,增加和删除操作後,自動維護      樹的平衡性。

3 讀取完所有配置檔案後,将加載和初始化資料庫連結庫。

  (1) rlm_sql.c檔案rlm_sql_instantiate函數進行初始化工作。連結庫使用free radius/lib/目錄下的rlm_sql_mysql.so。   
  (2) rlm_sql_instantiate調用sql_init_socketpool()使用sql_init_socket初始化 socket,建立資料庫連接配接池,連接配接池中連接配接數為sql.conf檔案中配置的   資料庫連接配接數 連接配接池中資料庫連接配接使用單連結清單來組織和管理,每一個資料庫連接配接都配備一個互斥鎖。   
  (3) 讀取radius用戶端(nas表),sql.conf檔案中配置“readclients = yes”,nas表資訊必須在radius啟動時讀取,不能在啟動以後實時讀取。讀取     nas表功能在函數generate_sql_clients()中實作。rlm_sql_instantiate調用generate_sql_clients。

4 generate_sql_clients調用rlm_sql_select_query函數,擷取nas表資料。

過程:rlm_sql_select_query則是調用rlm_sql_mysql.so連結庫檔案中sql_select_query函數,然後通過rlm_sql_fetch_row函數調rlm_sql_mysql.so中sql_fetch_row函數。nas表中各radius用戶端以樹結構來進行管理。

5 加載acct相關子產品。-- 待研究

6 設定監聽,src/main/event.c檔案中radius_event_init函數初始化監聽位址和端口。

繼續閱讀