udhcp源码分析1--文件组织结构

1:dhcpd.c

  里面的main/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项)  

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

    

   

时间: 2024-10-06 05:48:26

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

飞鸽传书源码分析五-文件传输

转载请注明出处:http://blog.csdn.net/mxway/article/details/44889871 本文是在飞鸽传书源码v2.06的基础上进行分析的. 1.添加要发送的文件 文件的发送是在发送对话框中进行的,首先找到发送对话框的快捷菜单. File Transfer对应的菜单id为MENU_FILEADD,相应的command处理事件在Senddlg.cpp中的EvCommand函数中 BOOL TSendDlg::EvCommand(WORD wNotifyCode, WO

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

本篇包括三个部分:1)f2fs 文件表示方法: 2)NAT详细介绍:3)f2fs文件读写过程:4) 下面详细阐述f2fs读写的过程. 管理数据位置关键的数据结构是node,node包括三种:inode.直接node.间接node.其中inode记录了文件的基本信息,包括访问权限.文件大小.修改时间等,也有索引的功能:直接node和间接node单纯负责索引.F2fs的inode中有923个直接数据块索引,2个一级索引,2个二级索引,1个三级索引,文件的逻辑表示如下图: inode中有923个索引项

分布式文件系统 fastdfs 源码分析 之 文件上传流程分析

fastdfs是一个轻量级的分布式文件系统,主要由 tracker server, storage server 以及client组成,这里主要涉及两点 : 1)客户端上传文件流程和协议分析 2)实现一个简单的文件上传函数 一: 文件上传的基本流程 fastdfs中上传一个文件,主要涉及以下几个步骤: 1)上传连接请求,客户端会向tracker server发出上传文件的请求 2)tracker收到请求后,返回storage server的ip和端口 3)客户端连接storage,并且上传文件

cocos2dx 3.6源码分析之文件路径

cocos2dx中资源文件都放在Resources目录中,编译后会自动复制到exe所在的目录中. 核心类是FileUtils类,一个单例类. 三个重要的函数 void addSearchPath(const std::string & path, const bool front=false); virtual void addSearchResolutionsOrder(const std::string &order,const bool front=false); virtual s

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

本文环境python3.5.2,django1.10.x系列 1.在上一篇文章中已经分析过handler的处理过程,其中load_middleware就是将配置的中间件进行初始化,然后调用相应的设置方法. django框架提供的认证,回话保持,静态文件调试处理等都是通过以中间件的形式来处理. 2.本节就分析一下django框架提供的staticfiles中间件,该中间件分别实现了三个框架的命令,分别为collectstatic,findstatic,runserver. 其中,runserver

MyBatis 源码分析 - 插件机制

1.简介 一般情况下,开源框架都会提供插件或其他形式的拓展点,供开发者自行拓展.这样的好处是显而易见的,一是增加了框架的灵活性.二是开发者可以结合实际需求,对框架进行拓展,使其能够更好的工作.以 MyBatis 为例,我们可基于 MyBatis 插件机制实现分页.分表,监控等功能.由于插件和业务无关,业务也无法感知插件的存在.因此可以无感植入插件,在无形中增强功能. 开发 MyBatis 插件需要对 MyBatis 比较深了解才行,一般来说最好能够掌握 MyBatis 的源码,门槛相对较高.本篇

zg手册 之 python2.7.7源码分析(4)-- pyc字节码文件

什么是字节码 python解释器在执行python脚本文件时,对文件中的python源代码进行编译,编译的结果就是byte code(字节码) python虚拟机执行编译好的字节码,完成程序的运行 python会为导入的模块创建字节码文件 字节码文件的创建过程 当a.py依赖b.py时,如在a.py中import b python先检查是否有b.pyc文件(字节码文件),如果有,并且修改时间比b.py晚,就直接调用b.pyc 否则编译b.py生成b.pyc,然后加载新生成的字节码文件 字节码对象

Hadoop之HDFS原理及文件上传下载源码分析(上)

HDFS原理 首先说明下,hadoop的各种搭建方式不再介绍,相信各位玩hadoop的同学随便都能搭出来. 楼主的环境: 操作系统:Ubuntu 15.10 hadoop版本:2.7.3 HA:否(随便搭了个伪分布式) 文件上传 下图描述了Client向HDFS上传一个200M大小的日志文件的大致过程: 首先,Client发起文件上传请求,即通过RPC与NameNode建立通讯. NameNode与各DataNode使用心跳机制来获取DataNode信息.NameNode收到Client请求后,

Solr4.8.0源码分析(10)之Lucene的索引文件(3)

Solr4.8.0源码分析(10)之Lucene的索引文件(3) 1. .si文件 .si文件存储了段的元数据,主要涉及SegmentInfoFormat.java和Segmentinfo.java这两个文件.由于本文介绍的Solr4.8.0,所以对应的是SegmentInfoFormat的子类Lucene46SegmentInfoFormat. 首先来看下.si文件的格式 头部(header) 版本(SegVersion) doc个数(SegSize) 是否符合文档格式(IsCompoundF