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:

              

            

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