/*++ Copyright (c) 1998, Microsoft Corporation Module Name: dhcpmsg.h Abstract: This module contains declarations related to the DHCP allocator's message-processing. Author: Abolade Gbadegesin (aboladeg) 6-Mar-1998 Revision History: --*/ #ifndef _NATHLP_DHCPMSG_H_ #define _NATHLP_DHCPMSG_H_ // // CONSTANT DECLARATIONS // #define DHCP_MAXIMUM_RENEWAL_TIME (5 * 60) #define DHCP_NBT_NODE_TYPE_B 1 #define DHCP_NBT_NODE_TYPE_P 2 #define DHCP_NBT_NODE_TYPE_M 4 #define DHCP_NBT_NODE_TYPE_H 8 // // DHCP message format // #include // // Disable "zero-sized array in struct/union" warning // #pragma warning(push) #pragma warning(disable : 4200) typedef struct _DHCP_OPTION { UCHAR Tag; UCHAR Length; UCHAR Option[]; } DHCP_OPTION, *PDHCP_OPTION; typedef struct _DHCP_FOOTER { UCHAR Cookie[4]; } DHCP_FOOTER, *PDHCP_FOOTER; typedef struct _DHCP_HEADER { UCHAR Operation; UCHAR HardwareAddressType; UCHAR HardwareAddressLength; UCHAR HopCount; ULONG TransactionId; USHORT SecondsSinceBoot; USHORT Flags; ULONG ClientAddress; ULONG AssignedAddress; ULONG BootstrapServerAddress; ULONG RelayAgentAddress; UCHAR HardwareAddress[16]; UCHAR ServerHostName[64]; UCHAR BootFile[128]; DHCP_FOOTER Footer[]; } DHCP_HEADER, *PDHCP_HEADER; #pragma warning(pop) #include // // MACRO DECLARATIONS // // // BOOTP operation codes // #define BOOTP_OPERATION_REQUEST 1 #define BOOTP_OPERATION_REPLY 2 // // BOOTP flags // #define BOOTP_FLAG_BROADCAST 0x0080 // // BOOTP maximum option-area size // #define BOOTP_VENDOR_LENGTH 64 // // Internal transaction ID for DHCP server detection // #define DHCP_DETECTION_TRANSACTION_ID 'MSFT' // // DHCP magic cookie // #define DHCP_MAGIC_COOKIE ((99 << 24) | (83 << 16) | (130 << 8) | (99)) #define DHCP_MAGIC_COOKIE_SIZE 4 // // DHCP option tag values // #define DHCP_TAG_PAD 0 #define DHCP_TAG_SUBNET_MASK 1 #define DHCP_TAG_ROUTER 3 #define DHCP_TAG_DNS_SERVER 6 #define DHCP_TAG_HOST_NAME 12 #define DHCP_TAG_DOMAIN_NAME 15 #define DHCP_TAG_STATIC_ROUTE 33 #define DHCP_TAG_WINS_SERVER 44 #define DHCP_TAG_NBT_NODE_TYPE 46 #define DHCP_TAG_NBT_SCOPE 47 #define DHCP_TAG_REQUESTED_ADDRESS 50 #define DHCP_TAG_LEASE_TIME 51 #define DHCP_TAG_OPTION_OVERLOAD 52 #define DHCP_TAG_MESSAGE_TYPE 53 #define DHCP_TAG_SERVER_IDENTIFIER 54 #define DHCP_TAG_PARAMETER_REQUEST_LIST 55 #define DHCP_TAG_ERROR_MESSAGE 56 #define DHCP_TAG_MAXIMUM_MESSAGE_SIZE 57 #define DHCP_TAG_RENEWAL_TIME 58 #define DHCP_TAG_REBINDING_TIME 59 #define DHCP_TAG_VENDOR_CLASS 60 #define DHCP_TAG_CLIENT_IDENTIFIER 61 #define DHCP_TAG_DYNAMIC_DNS 81 #define DHCP_TAG_END 255 // // Enumeration: DHCP_OPTION_INDEX // // The following enumerates the options of interest to the DHCP allocator. // The enumeration aids in the processing of the options. // (See 'DhcpExtractOptionsFromMessage'). // typedef enum { DhcpOptionClientIdentifier, DhcpOptionMessageType, DhcpOptionRequestedAddress, DhcpOptionParameterRequestList, DhcpOptionErrorMessage, DhcpOptionDynamicDns, DhcpOptionHostName, DhcpOptionCount } DHCP_OPTION_INDEX; // // DHCP message type values // #define DHCP_MESSAGE_BOOTP 0 #define DHCP_MESSAGE_DISCOVER 1 #define DHCP_MESSAGE_OFFER 2 #define DHCP_MESSAGE_REQUEST 3 #define DHCP_MESSAGE_DECLINE 4 #define DHCP_MESSAGE_ACK 5 #define DHCP_MESSAGE_NAK 6 #define DHCP_MESSAGE_RELEASE 7 #define DHCP_MESSAGE_INFORM 8 // // IP/1394 support (RFC 2855) // #define IP1394_HTYPE 0x18 // // FUNCTION DECLARATIONS // ULONG DhcpExtractOptionsFromMessage( PDHCP_HEADER Headerp, ULONG MessageSize, DHCP_OPTION UNALIGNED* OptionArray[] ); VOID DhcpProcessBootpMessage( PDHCP_INTERFACE Interfacep, PNH_BUFFER Bufferp, DHCP_OPTION UNALIGNED* OptionArray[] ); VOID DhcpProcessDiscoverMessage( PDHCP_INTERFACE Interfacep, PNH_BUFFER Bufferp, DHCP_OPTION UNALIGNED* OptionArray[] ); VOID DhcpProcessInformMessage( PDHCP_INTERFACE Interfacep, PNH_BUFFER Bufferp, DHCP_OPTION UNALIGNED* OptionArray[] ); VOID DhcpProcessMessage( PDHCP_INTERFACE Interfacep, PNH_BUFFER Bufferp ); VOID DhcpProcessRequestMessage( PDHCP_INTERFACE Interfacep, PNH_BUFFER Bufferp, DHCP_OPTION UNALIGNED* OptionArray[] ); ULONG DhcpWriteClientRequestMessage( PDHCP_INTERFACE Interfacep, PDHCP_BINDING Binding ); #endif // _NATHLP_DHCPMSG_H_