vcpe/srcs/include/service/dhcpd.h

91 lines
5.2 KiB
C
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

//
// Created by xajhuang on 2023/3/16.
//
#ifndef VCPE_DHCPD_H
#define VCPE_DHCPD_H
#include <common.h>
#ifdef __cplusplus
extern "C" {
#endif
#pragma pack(push)
#pragma pack(1)
/*
0 1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| op (1) | htype (1) | hlen (1) | hops (1) |
+---------------+---------------+---------------+---------------+
| xid (4) |
+-------------------------------+-------------------------------+
| secs (2) | flags (2) |
+-------------------------------+-------------------------------+
| ciaddr (4) |
+---------------------------------------------------------------+
| yiaddr (4) |
+---------------------------------------------------------------+
| siaddr (4) |
+---------------------------------------------------------------+
| giaddr (4) |
+---------------------------------------------------------------+
| |
| chaddr (16) |
| |
| |
+---------------------------------------------------------------+
| |
| sname (64) |
+---------------------------------------------------------------+
| |
| file (128) |
+---------------------------------------------------------------+
| |
| options (variable) |
+---------------------------------------------------------------+
*/
typedef struct {
///< 报文的操作类型。分为请求报文和响应报文。1请求报文2应答报文。即client送给server的封包设为1反之为2
U8 op;
///< DHCP客户端的MAC地址类型。MAC地址类型其实是指明网络类型。htype值为1时表示为最常见的以太网MAC地址类型
U8 htype;
///< DHCP客户端的MAC地址长度。以太网MAC地址长度为6个字节即以太网时hlen值为6
U8 hlen;
///< DHCP报文经过的DHCP中继的数目默认为0。DHCP请求报文每经过一个DHCP中继该字段就会增加1。没有经过DHCP中继时值为0
U8 hops;
///< 客户端通过DHCP Discover报文发起一次IP地址请求时选择的随机数相当于请求标识。用来标识一次IP地址请求过程。在一次请求中所有报文的Xid都是一样的
U32 xid;
///< DHCP客户端从获取到IP地址或者续约过程开始到现在所消耗的时间以秒为单位。
///< 在没有获得IP地址前该字段始终为0(DHCP客户端开始DHCP请求后所经过的时间。目前尚未使用固定为0)
U16 secs;
///< 标志位只使用第0比特位是广播应答标识位用来标识DHCP服务器应答报文是采用单播还是广播发送
///< 0表示采用单播发送方式1表示采用广播发送方式。其余位尚未使用。(即从0-15bits最左1bit为1时表示server将以广播方式传送封包给client。)
U16 flags;
///< DHCP客户端的IP地址。仅在DHCP服务器发送的ACK报文中显示因为在得到DHCP服务器确认前DHCP客户端是还没有分配到IP地址的。
///< 在其他报文中均显示只有客户端是Bound、Renew、Rebinding状态并且能响应ARP请求时才能被填充
U32 ciaddr;
///< DHCP服务器分配给客户端的IP地址。仅在DHCP服务器发送的Offer和ACK报文中显示其他报文中显示为0
U32 yiaddr;
///< 下一个为DHCP客户端分配IP地址等信息的DHCP服务器IP地址。仅在DHCP Offer、DHCP ACK报文中显示其他报文中显示为0
U32 siaddr;
///< DHCP客户端发出请求报文后经过的第一个DHCP中继的IP地址。如果没有经过DHCP中继则显示为0。(转发代理网关IP地址)
U32 giaddr;
///< DHCP客户端的MAC地址。在每个报文中都会显示对应DHCP客户端的MAC地址
U8 chaddr[16];
///< 为DHCP客户端分配IP地址的DHCP服务器名称DNS域名格式。在Offer和ACK报文中显示发送报文的DHCP服务器名称其他报文显示为0
U8 sname[64];
///< DHCP服务器为DHCP客户端指定的启动配置文件名称及路径信息。仅在DHCP Offer报文中显示其他报文中显示为空
U8 file[128];
///< 可选项字段,长度可变,格式为"代码+长度+数据"
U8 options[0];
} DHCP_PROTO, *PDHCP_PROTO;
#pragma pack(pop)
int dhcpd_init();
#ifdef __cplusplus
}
#endif
#endif //VCPE_DHCPD_H