00001
00002
00003
00035
00036
00037
00038
00039
00040
00041
00042
00043
00044
00045
00046
00047
00048
00049
00050
00051
00052
00053
00054
00055
00056
00057
00058
00059
00060
00061
00062
00063
00064
00065
00066
00067
00068
00069
00070
00071
00072 #ifndef __DHCP_H
00073 #define __DHCP_H
00074
00075
00076 #define DHCP_CLIENT_PORT (68u)
00077
00078 #define DHCP_SERVER_PORT (67u)
00079
00080 #define BOOT_REQUEST (1u) // BOOT_REQUEST DHCP type
00081 #define BOOT_REPLY (2u) // BOOT_REPLY DHCP type
00082 #define BOOT_HW_TYPE (1u) // BOOT_HW_TYPE DHCP type
00083 #define BOOT_LEN_OF_HW_TYPE (6u) // BOOT_LEN_OF_HW_TYPE DHCP type
00084
00085 #define DHCP_MESSAGE_TYPE (53u) // DHCP Message Type constant
00086 #define DHCP_MESSAGE_TYPE_LEN (1u) // Length of DHCP Message Type
00087
00088 #define DHCP_UNKNOWN_MESSAGE (0u) // Code for unknown DHCP message
00089
00090 #define DHCP_DISCOVER_MESSAGE (1u) // DCHP Discover Message
00091 #define DHCP_OFFER_MESSAGE (2u) // DHCP Offer Message
00092 #define DHCP_REQUEST_MESSAGE (3u) // DHCP Request message
00093 #define DHCP_DECLINE_MESSAGE (4u) // DHCP Decline Message
00094 #define DHCP_ACK_MESSAGE (5u) // DHCP ACK Message
00095 #define DHCP_NAK_MESSAGE (6u) // DHCP NAK Message
00096 #define DHCP_RELEASE_MESSAGE (7u) // DCHP Release message
00097
00098 #define DHCP_SERVER_IDENTIFIER (54u) // DHCP Server Identifier
00099 #define DHCP_SERVER_IDENTIFIER_LEN (4u) // DHCP Server Identifier length
00100
00101 #define DHCP_OPTION_ACK_MESSAGE (53u) // DHCP_OPTION_ACK_MESSAGE Type
00102 #define DHCP_PARAM_REQUEST_LIST (55u) // DHCP_PARAM_REQUEST_LIST Type
00103 #define DHCP_PARAM_REQUEST_LIST_LEN (4u) // DHCP_PARAM_REQUEST_LIST_LEN Type
00104 #define DHCP_PARAM_REQUEST_IP_ADDRESS (50u) // DHCP_PARAM_REQUEST_IP_ADDRESS Type
00105 #define DHCP_PARAM_REQUEST_IP_ADDRESS_LEN (4u) // DHCP_PARAM_REQUEST_IP_ADDRESS_LEN Type
00106 #define DHCP_SUBNET_MASK (1u) // DHCP_SUBNET_MASK Type
00107 #define DHCP_ROUTER (3u) // DHCP_ROUTER Type
00108 #define DHCP_DNS (6u) // DHCP_DNS Type
00109 #define DHCP_HOST_NAME (12u) // DHCP_HOST_NAME Type
00110 #define DHCP_IP_LEASE_TIME (51u) // DHCP_IP_LEASE_TIME Type
00111 #define DHCP_END_OPTION (255u) // DHCP_END_OPTION Type
00112
00113
00114 typedef struct __attribute__((aligned(2), packed))
00115 {
00116 BYTE MessageType;
00117 BYTE HardwareType;
00118 BYTE HardwareLen;
00119 BYTE Hops;
00120 DWORD TransactionID;
00121 WORD SecondsElapsed;
00122 WORD BootpFlags;
00123 IP_ADDR ClientIP;
00124 IP_ADDR YourIP;
00125 IP_ADDR NextServerIP;
00126 IP_ADDR RelayAgentIP;
00127 MAC_ADDR ClientMAC;
00128 } BOOTP_HEADER;
00129
00130
00131 typedef enum _SM_DHCP
00132 {
00133 SM_DHCP_DISABLED = 0,
00134 SM_DHCP_GET_SOCKET,
00135 SM_DHCP_AUTOIP,
00136 SM_DHCP_SEND_DISCOVERY,
00137 SM_DHCP_GET_OFFER,
00138 SM_DHCP_SEND_REQUEST,
00139 SM_DHCP_GET_REQUEST_ACK,
00140 SM_DHCP_BOUND,
00141 SM_DHCP_SEND_RENEW,
00142 SM_DHCP_GET_RENEW_ACK,
00143 SM_DHCP_SEND_RENEW2,
00144 SM_DHCP_GET_RENEW_ACK2,
00145 SM_DHCP_SEND_RENEW3,
00146 SM_DHCP_GET_RENEW_ACK3
00147 } SM_DHCP;
00148
00149
00150
00151 typedef union _DHCP_CLIENT_FLAGS
00152 {
00153 struct
00154 {
00155 unsigned char bIsBound : 1;
00156 unsigned char bOfferReceived : 1;
00157 unsigned char bDHCPServerDetected : 1;
00158 } bits;
00159 BYTE Val;
00160 } DHCP_CLIENT_FLAGS;
00161
00163 #if !defined(__DHCP_C)
00164 extern DHCP_CLIENT_FLAGS DHCPFlags;
00165 extern SM_DHCP smDHCPState;
00166 extern BYTE DHCPBindCount;
00167 #endif
00168
00170
00186 void DHCPReset( BOOL bNoAutoIP );
00187
00188
00190
00208 void DHCPTask(void);
00209
00210
00211
00212
00214
00234 void DHCPDisable(void);
00235
00236
00238
00250 void DHCPEnable(void);
00251
00252
00254
00265 IP_ADDR GenerateAutoIP( IP_ADDR * lastIP );
00266
00267
00269
00279 #define DHCPIsBound() (DHCPFlags.bits.bIsBound)
00280
00281 #endif