udhcp源碼詳解(三)下   之配置信息的讀取

udhcp源碼詳解(三)      下   之配置信息的讀取

Author : hui <[email protected]>

From : <http://blog.csdn.net/hui_love2046>

Created : 2010-10-3

 

       上節講解了read_config函數,讀取配置信息到server_config的相應成員變量裏,但read_config函數只負責把配置信息重文件裏讀出來,具體怎麼把信息填寫到指定的地址內,是調用keywords數組裏元素的handler成員指向的函數完成。這節就是講解完成具體的寫入操作中比較複雜的函數。

1)  int read_opt(const char *line, void *arg)

 

       在read_config從udhcpd.conf裏讀到 token = “opt” 或 “option”;

       摘自udhcp.conf裏的options配置信息

      

              調用handler: read_opt

const_line的從udhcpd.conf的讀出的line

line的值 例:

                                          dns     192.168.10.2 192.168.10.10

                     subnet  255.255.255.0 等

 

arg的值是 &(server_config.options)

 

即是把line的值存儲到頭結點爲*arg的鏈表裏去。

 

read_opt函數與read_config有點類似,也藉助一個輔助的數組進行信息添加。

在以前章節有講解過選項信息的存儲組織方式,CLV:Code + Length + Value,value我們文件裏讀出來了,Code和Length在哪?

現在來看下這個輔助數組:

元素結構體的定義:

 

              
 

              該結構體定義的數組:

       

       

 

 

這個輔助數組的做法與read_config裏的有些類似,name即是keyword,flag可以求出Length,code即Code。

 

 

 

 

講解這些函數真是痛苦,給你下套,而且是一環套一環的!

得到了每個選項信息裏的value,其值保存在opt指向的內存,value長度爲length,Code在struct dhcp_option類型的option裏。

調用attach_option函數把選項信息的添加到server_config.options選項鍊表裏。

 

/*

 * add an option to the opt_list

 *

 * attach_option函數把從文件裏讀出的以options 或opt標識的配置信息

 * 在函數read_opt,通過option->flag處理好了line裏val 值 存放在buffer

 * 再把配置信息填入到struct option_set的鏈表裏

 *

 * 參數:opt_list:  &(server_config.options)

 *    option:            根據選項頭確定的dhcp_options數組裏的一項

 *    buffer            配置信息(去除了option/opt和選項頭,而且已經轉換過了)

 *    length             配置信息的大小(以字節爲單位)

 */

static void attach_option(struct option_set **opt_list, struct dhcp_option *option, char *buffer, int length);


 

添加到鏈表裏分爲兩種情況

①鏈表裏沒有與將要添加的選項信息的Code一樣的結點,直接添加到鏈表即可。

 

②鏈表裏已有與將要添加的選項信息的Code一樣的結點,該Code選項信息flag選項裏OPT_LIST(例如:dns選項的value是IP List 有兩個IP):

 

 

}

 

      


 

2)、int read_staticlease(const char *line, void *arg)

              udhcpd.conf裏static lease:

              

            

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章