udhcp原始碼詳解(三) 下 之配置資訊的讀取

2022-05-05 22:36:15 字數 1869 閱讀 9172

上節講解了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...