摘要: Server端对于租赁出去的IP的管理是基于结构体dhcpOfferedAddr的,该结构体的定义是在leases.c文件里:(结构体的成员介绍说明见详解之数据结构) 1: struct dhcpOfferedAddr { 2: uint8_t chaddr[16]; 3: uint32_t yiaddr; /* network order... 阅读全文
posted @ 2013-07-09 22:39 woainilsr 阅读(1729) 评论(0) 推荐(0)
摘要: Server端对于租赁出去的IP的管理是基于结构体dhcpOfferedAddr的,该结构体的定义是在leases.c文件里:(结构体的成员介绍说明见详解之数据结构) [cpp] view plaincopy struct dhcpOfferedAddr { uint8_t chaddr[16]; uint32_t yiaddr; /* netw... 阅读全文
posted @ 2013-07-09 22:29 woainilsr 阅读(1874) 评论(0) 推荐(0)
摘要: 上节讲解了read_config函数,读取配置信息到server_config的相应成员变量里,但read_config函数只负责把配置信息重文件里读出来,具体怎么把信息填写到指定的地址内,是调用keywords数组里元素的handler成员指向的函数完成。这节就是讲解完成具体的写入操作中比较复杂的函数。 1) int read_opt(const char *line, void *arg) ... 阅读全文
posted @ 2013-07-09 22:25 woainilsr 阅读(1768) 评论(0) 推荐(0)
摘要: 上节介绍了存储管理配置信息的结构体struct server_config_t,该结构体贯穿整个server端程序的运行。 在dhcpd.c里的用该结构体定义个一个全局的变量: struct server_config_t server_config; 在server启动做的第一件事就是初始化这个全局变量server_config: 现在就进入read_config函数,一睹其真容! ... 阅读全文
posted @ 2013-07-09 22:23 woainilsr 阅读(1447) 评论(0) 推荐(0)
摘要: 定义的数据结构对于C程序的重要性,不言而喻。面向对象设计的程序是一个个对象的集合,而面向过程语言设计的程序则是数据结构与算法的集合。 下面来分析的是dhcp server中的定义结构体: 1)、在packet.h文件里定义了DHCP报文的格式: struct dhcpMessage报文的字段虽然都有注释,但还是有必要讲下options字段。 options在大多文档中的说法是可选字... 阅读全文
posted @ 2013-07-09 22:14 woainilsr 阅读(2313) 评论(1) 推荐(0)
摘要: 最近负责接入模块,包括dhcp、ipoe和pppoe等等。所以需要对dhcp和ppp这几个app的源代码进行一些分析。网上有比较好的文章,参考并补充自己的分析。 这篇udhcp详解是基于busybox-1.20里的…/busybox-1.20/networking/udhcp/目录下的源码进行讲解与分析,主要是对udhcp server端源码进行的讲解,client端相对于server端相对简单一些,源代码上面表现的实现思想大体相似。 该系列的讲解分析是在源代码的基础上,所以并没有打算以单独章节来讲解DHCP协议工作交互流程,也就是已经了解掌握了DHCP协议,用C来实现而已。 阅读全文
posted @ 2013-07-09 22:02 woainilsr 阅读(1717) 评论(0) 推荐(0)
摘要: udhcp目录下有十几个源文件,一个源文件相对应一个模块,完成一系列相关的功能,例如在static_leases.c主要针对static_lease链表增删查找等操作。dhcpd.c——整个dhcp server运行的主线,server开始运行是从udhcpd_main函数开|始,相当于我们程序的main入口。在dhcpd_main将各个功能模块组合起|来实现我们的dhcp server。|arpping.c——这个文件里只有一个函数arpping,server在给客户机分配IP地址|从IP地址池里找到a Free IP后,会调用arpping函数看网络上是否|主机使用该地址。|common. 阅读全文
posted @ 2013-07-09 21:55 woainilsr 阅读(2232) 评论(0) 推荐(1)
摘要: getsockname和getpeername#include int getsockname(int sockfd, struct sockaddr *localaddr, socklen_t *addrlen);int getpeername(int sockfd, struct sockaddr *peeraddr, socklen_t *addrlen);返回:0—OK,-1—出错。getsockname函数返回与套接口关联的本地协议地址。getpeername函数返回与套接口关联的远程协议地址。addrlen是值-结果参数。使用场合:在不调用bind的TCP客户,当connect成功 阅读全文
posted @ 2013-07-09 15:57 woainilsr 阅读(611) 评论(0) 推荐(0)
摘要: Tips of Linux C programming(转自 http://rdc.taobao.com/blog/cs/?p=1675)1. 优雅地使用链表 链表是编程中经常要用到的数据结构,结构体描述时分为数据域和指针域,本没有什么好讲。但有没有想过教科书上的这种方式有什么问题?通过这种方式定义和使用链表,对于不同的链表类型,都要定义各自的链表结构,繁琐的很。linux kernel中链表的用法才应该是教科书中出现的。 基本思想:在Linux内核链表中,不是在链表结构中包含数据,而是在数据结构中包含链表节点。1) 链表定义:struct list_head { struc... 阅读全文
posted @ 2013-05-02 10:52 woainilsr 阅读(262) 评论(0) 推荐(0)
摘要: 一年没更新博客了,不是不想写,只是公司没有外网,回家之后自由的时间比较少。但是博客还是要继续更新,就当是记录下自己的青春路,留待后日自检自省 阅读全文
posted @ 2013-04-29 14:45 woainilsr 阅读(230) 评论(0) 推荐(0)