zoukankan      html  css  js  c++  java
  • 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:

  • 相关阅读:
    html5页面资源预加载(Link prefetch)
    html5页面资源预加载(Link prefetch)
    纯CSS制作的图形效果
    echarts 较全面的参数设置分析
    设置css样式背景色透明 字体颜色的不透明 设置select 箭头样式
    this.refs['hh']获取dom对象,this.refs['hh'].value获取dom对象的值
    浏览器运行的时候 事件打印不出来,提示 此页面出现代码禁用了反向和正向缓存(由于默认事件导致的)
    react 点击事件以及原始event与react封装好的事件点击区别
    react中 props与forEach的用法
    基于webpack的react的环境项目搭建
  • 原文地址:https://www.cnblogs.com/woainilsr/p/3181023.html
Copyright © 2011-2022 走看看