Leaked source code of windows server 2003
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

408 lines
10 KiB

  1. /*++
  2. Copyright (c) 1994 Microsoft Corporation
  3. Module Name:
  4. dhcp.h
  5. Abstract:
  6. This module defines the DHCP server service definitions and structures.
  7. Author:
  8. Manny Weiser (mannyw) 11-Aug-1992
  9. Revision History:
  10. Madan Appiah (madana) 10-Oct-1993
  11. --*/
  12. #ifndef _DHCP_
  13. #define _DHCP_
  14. #define WS_VERSION_REQUIRED MAKEWORD( 1, 1)
  15. //
  16. // update dhcpapi.h also if you modify the following three typedefs.
  17. //
  18. typedef DWORD DHCP_IP_ADDRESS, *PDHCP_IP_ADDRESS, *LPDHCP_IP_ADDRESS;
  19. typedef DWORD DHCP_OPTION_ID;
  20. typedef struct _DATE_TIME {
  21. DWORD dwLowDateTime;
  22. DWORD dwHighDateTime;
  23. } DATE_TIME, *LPDATE_TIME;
  24. #define DHCP_DATE_TIME_ZERO_HIGH 0
  25. #define DHCP_DATE_TIME_ZERO_LOW 0
  26. #define DHCP_DATE_TIME_INFINIT_HIGH 0x7FFFFFFF
  27. #define DHCP_DATE_TIME_INFINIT_LOW 0xFFFFFFFF
  28. #define DOT_IP_ADDR_SIZE 16 // XXX.XXX.XXX.XXX + '\0'
  29. #define NO_DHCP_IP_ADDRESS ((DHCP_IP_ADDRESS)-1)
  30. #define DHCP_IP_KEY_LEN 32 //arbitary size.
  31. #define INFINIT_TIME 0x7FFFFFFF // time_t is int
  32. #define INFINIT_LEASE 0xFFFFFFFF // in secs. (unsigned int.)
  33. #define MDHCP_SERVER_IP_ADDRESS 0x0100efef // 239.239.0.1
  34. //
  35. // hardware types.
  36. //
  37. #define HARDWARE_TYPE_NONE 0 // used for non-hardware type client id
  38. #define HARDWARE_TYPE_10MB_EITHERNET 1
  39. #define HARDWARE_TYPE_IEEE_802 6
  40. #define HARDWARE_ARCNET 7
  41. #define HARDWARE_PPP 8
  42. #define HARDWARE_IEEE1394 24
  43. //
  44. // Client-server protoocol reserved ports
  45. //
  46. #define DHCP_CLIENT_PORT 68
  47. #define DHCP_SERVR_PORT 67
  48. //
  49. // DHCP BROADCAST flag.
  50. //
  51. #define DHCP_BROADCAST 0x8000
  52. #define DHCP_NO_BROADCAST 0x0000
  53. // MDHCP flag
  54. #define DHCP_MBIT 0x4000
  55. #define IS_MDHCP_MESSAGE( _msg ) ( _I_ntohs((_msg)->Reserved) & DHCP_MBIT ? TRUE : FALSE )
  56. #define MDHCP_MESSAGE( _msg ) ( (_msg)->Reserved |= htons(DHCP_MBIT) )
  57. #define CLASSD_NET_ADDR(a) ( (a & 0xf0) == 0xe0)
  58. #define CLASSD_HOST_ADDR(a) ((a & 0xf0000000) == 0xe0000000)
  59. #define DHCP_MESSAGE_SIZE 576
  60. #define DHCP_SEND_MESSAGE_SIZE 548
  61. #define BOOTP_MESSAGE_SIZE 300 // the options field for bootp is 64 bytes.
  62. //
  63. // The amount of time to wait for a DHCP response after a request
  64. // has been sent.
  65. //
  66. #if !DBG
  67. #define WAIT_FOR_RESPONSE_TIME 5
  68. #else
  69. #define WAIT_FOR_RESPONSE_TIME 10
  70. #endif
  71. //
  72. // DHCP Operations
  73. //
  74. #define BOOT_REQUEST 1
  75. #define BOOT_REPLY 2
  76. //
  77. // DHCP Standard Options.
  78. //
  79. #define OPTION_PAD 0
  80. #define OPTION_SUBNET_MASK 1
  81. #define OPTION_TIME_OFFSET 2
  82. #define OPTION_ROUTER_ADDRESS 3
  83. #define OPTION_TIME_SERVERS 4
  84. #define OPTION_IEN116_NAME_SERVERS 5
  85. #define OPTION_DOMAIN_NAME_SERVERS 6
  86. #define OPTION_LOG_SERVERS 7
  87. #define OPTION_COOKIE_SERVERS 8
  88. #define OPTION_LPR_SERVERS 9
  89. #define OPTION_IMPRESS_SERVERS 10
  90. #define OPTION_RLP_SERVERS 11
  91. #define OPTION_HOST_NAME 12
  92. #define OPTION_BOOT_FILE_SIZE 13
  93. #define OPTION_MERIT_DUMP_FILE 14
  94. #define OPTION_DOMAIN_NAME 15
  95. #define OPTION_SWAP_SERVER 16
  96. #define OPTION_ROOT_DISK 17
  97. #define OPTION_EXTENSIONS_PATH 18
  98. //
  99. // IP layer parameters - per host
  100. //
  101. #define OPTION_BE_A_ROUTER 19
  102. #define OPTION_NON_LOCAL_SOURCE_ROUTING 20
  103. #define OPTION_POLICY_FILTER_FOR_NLSR 21
  104. #define OPTION_MAX_REASSEMBLY_SIZE 22
  105. #define OPTION_DEFAULT_TTL 23
  106. #define OPTION_PMTU_AGING_TIMEOUT 24
  107. #define OPTION_PMTU_PLATEAU_TABLE 25
  108. //
  109. // Link layer parameters - per interface.
  110. //
  111. #define OPTION_MTU 26
  112. #define OPTION_ALL_SUBNETS_MTU 27
  113. #define OPTION_BROADCAST_ADDRESS 28
  114. #define OPTION_PERFORM_MASK_DISCOVERY 29
  115. #define OPTION_BE_A_MASK_SUPPLIER 30
  116. #define OPTION_PERFORM_ROUTER_DISCOVERY 31
  117. #define OPTION_ROUTER_SOLICITATION_ADDR 32
  118. #define OPTION_STATIC_ROUTES 33
  119. #define OPTION_TRAILERS 34
  120. #define OPTION_ARP_CACHE_TIMEOUT 35
  121. #define OPTION_ETHERNET_ENCAPSULATION 36
  122. //
  123. // TCP Paramters - per host
  124. //
  125. #define OPTION_TTL 37
  126. #define OPTION_KEEP_ALIVE_INTERVAL 38
  127. #define OPTION_KEEP_ALIVE_DATA_SIZE 39
  128. //
  129. // Application Layer Parameters
  130. //
  131. #define OPTION_NETWORK_INFO_SERVICE_DOM 40
  132. #define OPTION_NETWORK_INFO_SERVERS 41
  133. #define OPTION_NETWORK_TIME_SERVERS 42
  134. //
  135. // Vender specific information option
  136. //
  137. #define OPTION_VENDOR_SPEC_INFO 43
  138. //
  139. // NetBIOS over TCP/IP Name server option
  140. //
  141. #define OPTION_NETBIOS_NAME_SERVER 44
  142. #define OPTION_NETBIOS_DATAGRAM_SERVER 45
  143. #define OPTION_NETBIOS_NODE_TYPE 46
  144. #define OPTION_NETBIOS_SCOPE_OPTION 47
  145. //
  146. // X Window System Options.
  147. //
  148. #define OPTION_XWINDOW_FONT_SERVER 48
  149. #define OPTION_XWINDOW_DISPLAY_MANAGER 49
  150. //
  151. // Other extensions
  152. //
  153. #define OPTION_REQUESTED_ADDRESS 50
  154. #define OPTION_LEASE_TIME 51
  155. #define OPTION_OK_TO_OVERLAY 52
  156. #define OPTION_MESSAGE_TYPE 53
  157. #define OPTION_SERVER_IDENTIFIER 54
  158. #define OPTION_PARAMETER_REQUEST_LIST 55
  159. #define OPTION_MESSAGE 56
  160. #define OPTION_MESSAGE_LENGTH 57
  161. #define OPTION_RENEWAL_TIME 58 // T1
  162. #define OPTION_REBIND_TIME 59 // T2
  163. #define OPTION_CLIENT_CLASS_INFO 60
  164. #define OPTION_CLIENT_ID 61
  165. #define OPTION_TFTP_SERVER_NAME 66
  166. #define OPTION_BOOTFILE_NAME 67
  167. //
  168. // user class id
  169. //
  170. #define OPTION_USER_CLASS 77
  171. //
  172. // Dynamic DNS Stuff. Tells if we should do both A+PTR updates?
  173. //
  174. #define OPTION_DYNDNS_BOTH 81
  175. // Multicast options.
  176. #define OPTION_MCAST_SCOPE_ID 101
  177. #define OPTION_MCAST_LEASE_START 102
  178. #define OPTION_MCAST_TTL 103
  179. #define OPTION_CLIENT_PORT 105
  180. #define OPTION_MCAST_SCOPE_LIST 107
  181. // special option to extend options
  182. #define OPTION_LARGE_OPTION 127
  183. #define OPTION_WPAD_URL 252
  184. #define OPTION_END 255
  185. // default mcast_ttl value.
  186. #define DEFAULT_MCAST_TTL 32
  187. //
  188. // Different option values for the DYNDNS_BOTH option ...
  189. //
  190. #define DYNDNS_REGISTER_AT_CLIENT 0 // Client will do both registrations
  191. #define DYNDNS_REGISTER_AT_SERVER 1 // Server will do registrations
  192. #define DYNDNS_DOWNLEVEL_CLIENT 3 // arbitraty # diff from above
  193. //
  194. // Microsoft-specific options
  195. //
  196. #define OPTION_MSFT_DSDOMAINNAME_REQ 94 // send me your DS Domain name
  197. #define OPTION_MSFT_DSDOMAINNAME_RESP 95 // sending my DS Domain name
  198. #define OPTION_MSFT_CONTINUED 250 // the previous option is being continued..
  199. //
  200. // DHCP Message types
  201. //
  202. #define DHCP_DISCOVER_MESSAGE 1
  203. #define DHCP_OFFER_MESSAGE 2
  204. #define DHCP_REQUEST_MESSAGE 3
  205. #define DHCP_DECLINE_MESSAGE 4
  206. #define DHCP_ACK_MESSAGE 5
  207. #define DHCP_NACK_MESSAGE 6
  208. #define DHCP_RELEASE_MESSAGE 7
  209. #define DHCP_INFORM_MESSAGE 8
  210. #define DHCP_MAGIC_COOKIE_BYTE1 99
  211. #define DHCP_MAGIC_COOKIE_BYTE2 130
  212. #define DHCP_MAGIC_COOKIE_BYTE3 83
  213. #define DHCP_MAGIC_COOKIE_BYTE4 99
  214. #define BOOT_FILE_SIZE 128
  215. #define BOOT_SERVER_SIZE 64
  216. #define BOOT_FILE_SIZE_W ( BOOT_FILE_SIZE * sizeof( WCHAR ))
  217. #define BOOT_SERVER_SIZE_W ( BOOT_SERVER_SIZE * sizeof( WCHAR ))
  218. //
  219. // DHCP APP names - used to indentify to the eventlogger.
  220. //
  221. #define DHCP_EVENT_CLIENT TEXT("Dhcp")
  222. #define DHCP_EVENT_SERVER TEXT("DhcpServer")
  223. typedef struct _OPTION {
  224. BYTE OptionType;
  225. BYTE OptionLength;
  226. BYTE OptionValue[1];
  227. } OPTION, *POPTION, *LPOPTION;
  228. //
  229. // A DHCP message buffer
  230. //
  231. #pragma pack(1) /* Assume byte packing */
  232. typedef struct _DHCP_MESSAGE {
  233. BYTE Operation;
  234. BYTE HardwareAddressType;
  235. BYTE HardwareAddressLength;
  236. BYTE HopCount;
  237. DWORD TransactionID;
  238. WORD SecondsSinceBoot;
  239. WORD Reserved;
  240. DHCP_IP_ADDRESS ClientIpAddress;
  241. DHCP_IP_ADDRESS YourIpAddress;
  242. DHCP_IP_ADDRESS BootstrapServerAddress;
  243. DHCP_IP_ADDRESS RelayAgentIpAddress;
  244. BYTE HardwareAddress[16];
  245. BYTE HostName[ BOOT_SERVER_SIZE ];
  246. BYTE BootFileName[BOOT_FILE_SIZE];
  247. OPTION Option;
  248. } DHCP_MESSAGE, *PDHCP_MESSAGE, *LPDHCP_MESSAGE;
  249. #pragma pack()
  250. #define DHCP_MESSAGE_FIXED_PART_SIZE \
  251. (sizeof(DHCP_MESSAGE) - sizeof(OPTION))
  252. #define DHCP_MIN_SEND_RECV_PK_SIZE \
  253. (DHCP_MESSAGE_FIXED_PART_SIZE + 64)
  254. //
  255. // JET - DHCP database constants.
  256. //
  257. #define DB_TABLE_SIZE 10 // table size in 4K pages.
  258. #define DB_TABLE_DENSITY 80 // page density
  259. #define DB_LANGID 0x0409 // language id
  260. #define DB_CP 1252 // code page
  261. #if DBG
  262. //
  263. // debug functions.
  264. //
  265. #ifdef CHICAGO // No Tracing available on CHICAGO
  266. #define DhcpPrintTrace
  267. #endif
  268. //#define IF_DEBUG(flag) if (DhcpGlobalDebugFlag & (DEBUG_ ## flag))
  269. #define DhcpPrint(_x_) DEBUG_PRINT(UTIL,INFO,_x_)
  270. #define Trace DhcpPrintTrace
  271. #ifndef CHICAGO
  272. VOID
  273. DhcpPrintTrace(
  274. IN LPSTR Format,
  275. ...
  276. );
  277. #endif
  278. #if DBG
  279. /*
  280. VOID
  281. //extern "C"
  282. DhcpPrintRoutine(
  283. IN DWORD DebugFlag,
  284. IN LPSTR Format,
  285. ...
  286. )
  287. {
  288. #define MAX_PRINTF_LEN 1024 // Arbitrary.
  289. va_list arglist;
  290. char OutputBuffer[MAX_PRINTF_LEN];
  291. ULONG length = 0;
  292. //
  293. // Put a the information requested by the caller onto the line
  294. //
  295. va_start(arglist, Format);
  296. length += (ULONG) vsprintf(&OutputBuffer[length], Format, arglist);
  297. va_end(arglist);
  298. //DhcpAssert(length <= MAX_PRINTF_LEN);
  299. //
  300. // Output to the debug terminal,
  301. //
  302. printf( "%s", OutputBuffer);
  303. }
  304. */
  305. #endif // DBG
  306. #else
  307. //#define IF_DEBUG(flag) if (FALSE)
  308. #define DhcpPrint(_x_)
  309. #define Trace (void)
  310. #endif // DBG
  311. #define OpenDriver DhcpOpenDriver
  312. #endif // _DHCP_