不知道是哪个聪明人发明的,使用DHCP协议来做数据的传输…….,该协议使用的可是broadcast的方式去search需要的东西,所以DHCP协议出现了LEASE这种东西,就是防止客户端经常去使用该协议. 回到正文…
网络上关于DHCP协议上自定义option的开发资料很少,我们使用的是UDHCP的开发包,如果要支持自定义的option那就需要在客户端和服务器端分别做开发.
Client:
Clientpacket.c
static void init_packet(struct dhcpMessage *packet, char type)
{
//这里我们需要定义一个结构体,为了增加option字段
//特别str可以写成””,因为该字段是作为option的显示字段
//但如果不是系统保留的option号,那么这里只会显示private
struct usermodule
{
char um,length;
char str[64];
}_usermod={DHCP_USER_DEFINE161,64,""};
_usermod={DHCP_USER_DEFINE161,64,""};
//增加两个option
struct usermodule _usermod1={DHCP_USER_DEFINE162,64,""};
struct usermodule _usermod2={DHCP_USER_DEFINE163,64,""};
//在构造包体时添加字段
add_option_string(packet->options, (unsigned char *) &_usermod);
add_option_string(packet->options, (unsigned char *) &_usermod1);
add_option_string(packet->options, (unsigned char *) &_usermod2);
}
Dhcpd.h
#define DHCP_USER_DEFINE161 0xA1 //这里一定要16位的
#define DHCP_USER_DEFINE162 0xA2
#define DHCP_USER_DEFINE163 0xA3
Server端:
Dhcpd.h
struct server_config_t {
char *opt_161;
char *opt_162;
char *opt_163;
}
Files.c
static struct config_keyword keywords[] = {
{"161",read_str,&(server_config.opt_161), "My Network 161"},
{"162",read_str,&(server_config.opt_162), "My Network 162"},
{"163",read_str,&(server_config.opt_163), "My Network 163"}
}
//这两个部分主要时为了Udhcpd在启动时会读取udhcpd.conf的文件,我们可以提前在该文件中定义好所有的option,所以这就需要程序的支持,
在做通讯时,DHCPD会将自定义的option放在offer包中,client只要解析就可以了.
阅读(1518) | 评论(0) | 转发(0) |