1:dhcpd.c

  udhcpd_main函数是整个程序的入口,依次完成的主要工作有读取配置文件信息至全局结构体、记录程序pid number、初始化lease链表、将程序作为daemon运行、死循环中用socket监听报文执行DHCP报文交互逻辑.

2:files.c

  2.1--read_config 一行一行读取配置文件信息,将配置信息填写入全局结构体以供后面访问使用.

  2.2--read_leases/write_leases 读或记录当前租赁出去的ip及到期信息到文件中

3:pidfile.c

  记录当前程序的pid number到文件中

4:lease.c

  在租赁信息链表中添加、查找租赁信息

5:socket.c

  封装创建socket fd的函数以供使用

6:serverpacket.c

  主要封装执行DHCP报文交互逻辑的函数,如sendOffer、sendACK等等

7:packet.c

   是serverpacket.c中函数的辅助函数,实现具体的报文封装事宜

8:options.c

  报文中相关options的操作(1:DHCP交互报文中的options项  2:配置文件中指定的opt项) 

9:arpping.c

  只有一个函数arpping,被check_ip函数调用,使用arp协议检查ip是否已被使用了

  udhcpd 程序的主要功能就是这些文件实现的,这里忽略了一些重要的全局结构体,比如记录配置文件信息的struct server_config_t server_config和记录已租用出去IP信息的struct dhcpOfferedAddr *leases等等,每个文件中的函数是具体的实现动作,这些将在后面以功能模块的方式解析较为合理。

    

   

udhcp server端源码分析1--文件组织结构的更多相关文章

  1. MyBatis 源码分析 - 映射文件解析过程

    1.简介 在上一篇文章中,我详细分析了 MyBatis 配置文件的解析过程.由于上一篇文章的篇幅比较大,加之映射文件解析过程也比较复杂的原因.所以我将映射文件解析过程的分析内容从上一篇文章中抽取出来, ...

  2. Flink的Job启动TaskManager端(源码分析)

    前面说到了  Flink的JobManager启动(源码分析)  启动了TaskManager 然后  Flink的Job启动JobManager端(源码分析)  说到JobManager会将转化得到 ...

  3. Yii2 源码分析 入口文件执行流程

    Yii2 源码分析  入口文件执行流程 1. 入口文件:web/index.php,第12行.(new yii\web\Application($config)->run()) 入口文件主要做4 ...

  4. Go Revel - server.go 源码分析

    之前介绍了 Go Revel - main函数分析 http://www.cnblogs.com/hangxin1940/p/3263775.html 最后会调用 `revel.Run(*port)` ...

  5. Tornado源码分析 --- 静态文件处理模块

    每个web框架都会有对静态文件的处理支持,下面对于Tornado的静态文件的处理模块的源码进行分析,以加强自己对静态文件处理的理解. 先从Tornado的主要模块 web.py 入手,可以看到在App ...

  6. f2fs源码分析之文件读写过程

    本篇包括三个部分:1)f2fs 文件表示方法: 2)NAT详细介绍:3)f2fs文件读写过程:4) 下面详细阐述f2fs读写的过程. 管理数据位置关键的数据结构是node,node包括三种:inode ...

  7. Flink的Job启动JobManager端(源码分析)

    通过前面的文章了解到 Driver将用户代码转换成streamGraph再转换成Jobgraph后向Jobmanager端提交 JobManager启动以后会在Dispatcher.java起来RPC ...

  8. django源码分析——静态文件staticfiles中间件

    本文环境python3.5.2,django1.10.x系列 1.在上一篇文章中已经分析过handler的处理过程,其中load_middleware就是将配置的中间件进行初始化,然后调用相应的设置方 ...

  9. kestrel Server的源码分析

    今天这一篇博客讲的是.net core 自带的kestrel server,当你开发微服务k8s部署在linux环境下,一般默认开启这个高性能服务,如果大家之前看过我的owin katana的博客,会 ...

随机推荐

  1. Microsoft Edge 浏览器开始支持webkit私有样式

    微软表示新版的浏览器Edge(spartan)不会再增加新的私有属性,同时移除了部分-ms-属性,但很多标准在没有支持到之前,会使用webkit的api.Edge开发工程师Jacob Rossi列出了 ...

  2. 贵州省未来二十年的投资机会的探讨2>

    房产投资 升值最快的 在教育资源丰富  生活方便的 地方 价格和地段取其中之一. 其次 车位 再其次墓地等 公寓住房. 还有商标 和网站注册 公司注册 除了以上的这些  还有茅台生效酒 收藏

  3. Python高级编程-多进程

    要让Python程序实现多进程(multiprocessing),我们先了解操作系统的相关知识. Unix/Linux操作系统提供了一个fork()系统调用,它非常特殊.普通的函数调用,调用一次,返回 ...

  4. BZOJ 4736 温暖会指引我们前行 LCT+最优生成树+并查集

    题目链接:http://uoj.ac/problem/274 题意概述: 没什么好概述的......概述了题意就知道怎么做了......我懒嘛 分析: 就是用lct维护最大生成树. 然后如果去UOJ上 ...

  5. POJ 1741 Tree(树的分治)

    Description Give a tree with n vertices,each edge has a length(positive integer less than 1001). Def ...

  6. 【转】redis安装与配置

    一.安装 1.官方:http://www.redis.cn/download.html 2.下载.解压.编译 wget http://download.redis.io/releases/redis- ...

  7. 第四课——MFC应用程序框架

    一.MFC应用程序类型 上篇文章的彩蛋:可通过使用MFC应用程序向导(MFC AppWizard)的功能来创建所需要的应用程序,这意味着不需要输入任何代码.MFC除了应用程序向导,还对应用程序项目有着 ...

  8. Martian Addition

    In the 22nd Century, scientists have discovered intelligent residents live on the Mars. Martians are ...

  9. SpringMVC拦截器实现登录认证(转发)

    感谢原作者,转发自:http://blog.csdn.net/u014427391/article/details/51419521 以Demo的形式讲诉拦截器的使用 项目结构如图: 需要的jar:有 ...

  10. node必学的Hello World实现--服务器实现

    node是JavaScript运行在后端的一种实现.而后端语言,不管是php,java都需要一个服务器才能跑起来,node如是. node的服务器较php而言,少了单独安装服务器的步骤,node的服务 ...