上節講解了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:
udhcp原始碼詳解(三) 下
udhcp原始碼詳解 三 下 之配置資訊的讀取 author hui 632254504 qq.com from created 2010 10 3 上節講解了read config函式,讀取配置資訊到server config的相應成員變數裡,但read config函式只負責把配置資訊重檔案裡讀...
udhcp原始碼詳解(三) 下
udhcp 原始碼詳解 三 下 之配置資訊的讀取 author hui 632254504 qq.com from created 2010 10 3 上節講解了 read config 函式,讀取配置資訊到 server config 的相應成員變數裡,但 read config 函式只負責把配置...
udhcp詳解原始碼(序)
udhcp原始碼詳解 序 author hui 632254504 qq.com from created 2010 10 1 這篇udhcp詳解是基於busybox 1.02裡的 busybox 1.02 networking udhcp 目錄下的原始碼進行講解與分析,主要是對udhcp serv...