• udhcp源码详解(三) 下 之配置信息的读取


    上节讲解了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:

  • 相关阅读:
    文件搜索和图像裁剪
    Mat的复制
    map
    substr
    cin,scanf
    strstr
    Applying vector median filter on RGB image based on matlab
    sobel算子的一些细节
    matlab 有趣小细节
    高斯混合模型(GMM)
  • 原文地址:https://www.cnblogs.com/woainilsr/p/3181023.html
Copyright © 2020-2023  润新知