udhcp源码剖析(三)——DHCP服务器的初始化和配置

本文详细解析了udhcpd DHCP服务器的初始化和配置过程,包括开启LOG、读取配置文件、设置lease、初始化leases、读取接口信息、创建内部socket及信号处理器,最后进入服务超级循环。
摘要由CSDN通过智能技术生成

udhcpd_main的初始化和配置

udhcpd_main是DHCP服务器的入口,也是其主循环,在该函数中可以了解到DHCP服务的基本所有功能和流程。

开启LOG,初始化server_config

打开名为udhcpd的log文件,打印log信息,并将server_config初始化为0

if (!(opt & 1)) { /* no -f */
    bb_daemonize_or_rexec(0, argv);
    logmode &= ~LOGMODE_STDIO;
}

if (opt & 2) { /* -S */
    openlog(applet_name, LOG_PID, LOG_LOCAL0);
    logmode |= LOGMODE_SYSLOG;
}

读取配置文件信息read_config

DHCP服务器开启后,第一步就是从配置文件读取配置信息,写入server_config。如果未在函数入口指定配置文件路径,则读取默认路径
read_config函数定义在file.c中,用于读取配置文件,以后遇到类似需要读取配置信息的函数可以参照read_config的写法。理解read_config函数需要先看一个file.h中定义的一个辅助数据结构:

struct config_keyword {
    char keyword[14];
    int (*handler)(char *line, void *var);
    void *var;
    char def[30];
};

该结构的数组在file.c中初始化如下,可以看出config_keyword结构的四个成员中,keyword对应着server_config的变量名称,该成员名字所指示的就是server_config_t里的哪个成员;handler是一个函数指针,指向的函数用于读取该项配置信息,并把配置信息写到指定位置;第三项variable address设置的是把参数存储到的地址,第四项default是参数的默认值。

static const struct config_keyword keywords[] = {
    /* keyword       handler   variable address               default */
    {
  "start",        read_ip,  &(server_config.start_ip),     "192.168.0.20"},
    {
  "end",          read_ip,  &(server_config.end_ip),       "192.168.0.254"},
    {
  "interface",    read_str, &(server_config.interface),    "eth0"},
    {
  "option",       read_opt, &(server_config.options),      ""},
    {
  "opt",          read_opt, &(server_config.options),      ""},
    /* Avoid "max_leases value not sane" warning by setting default
     * to default_end_ip - default_start_ip + 1: */
    {
  "max_leases",   read_u32, &(server_config.max_leases)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值