mirror of https://github.com/acidanthera/audk.git
633 lines
27 KiB
C
633 lines
27 KiB
C
/** @file
|
|
|
|
Copyright (c) 2004, Intel Corporation
|
|
All rights reserved. This program and the accompanying materials
|
|
are licensed and made available under the terms and conditions of the BSD License
|
|
which accompanies this distribution. The full text of the license may be found at
|
|
http://opensource.org/licenses/bsd-license.php
|
|
|
|
THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
|
|
WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
|
|
|
|
|
|
**/
|
|
|
|
#ifndef _DHCP_H
|
|
#define _DHCP_H
|
|
|
|
//
|
|
// Definitions for DHCP version 4 UDP packet.
|
|
// The field names in this structure are defined and described in RFC 2131.
|
|
//
|
|
#pragma pack(1)
|
|
|
|
typedef struct {
|
|
UINT8 op;
|
|
#define BOOTP_REQUEST 1
|
|
#define BOOTP_REPLY 2
|
|
|
|
UINT8 htype;
|
|
UINT8 hlen;
|
|
UINT8 hops;
|
|
UINT32 xid;
|
|
UINT16 secs;
|
|
UINT16 flags;
|
|
#define DHCP_BROADCAST_FLAG 0x8000
|
|
|
|
UINT32 ciaddr;
|
|
UINT32 yiaddr;
|
|
UINT32 siaddr;
|
|
UINT32 giaddr;
|
|
UINT8 chaddr[16];
|
|
UINT8 sname[64];
|
|
UINT8 file[128];
|
|
UINT8 options[312];
|
|
#define OP_PAD 0
|
|
#define OP_END 255
|
|
#define OP_SUBNET_MASK 1
|
|
#define OP_TIME_OFFSET 2
|
|
#define OP_ROUTER_LIST 3
|
|
#define OP_TIME_SERVERS 4
|
|
#define OP_NAME_SERVERS 5
|
|
#define OP_DNS_SERVERS 6
|
|
#define OP_LOG_SERVERS 7
|
|
#define OP_COOKIE_SERVERS 8
|
|
#define OP_LPR_SREVERS 9
|
|
#define OP_IMPRESS_SERVERS 10
|
|
#define OP_RES_LOC_SERVERS 11
|
|
#define OP_HOST_NAME 12
|
|
#define OP_BOOT_FILE_SZ 13
|
|
#define OP_DUMP_FILE 14
|
|
#define OP_DOMAIN_NAME 15
|
|
#define OP_SWAP_SERVER 16
|
|
#define OP_ROOT_PATH 17
|
|
#define OP_EXTENSION_PATH 18
|
|
#define OP_IP_FORWARDING 19
|
|
#define OP_NON_LOCAL_SRC_RTE 20
|
|
#define OP_POLICY_FILTER 21
|
|
#define OP_MAX_DATAGRAM_SZ 22
|
|
#define OP_DEFAULT_TTL 23
|
|
#define OP_MTU_AGING_TIMEOUT 24
|
|
#define OP_MTU_SIZES 25
|
|
#define OP_MTU_TO_USE 26
|
|
#define OP_ALL_SUBNETS_LOCAL 27
|
|
#define OP_BROADCAST_ADD 28
|
|
#define OP_PERFORM_MASK_DISCOVERY 29
|
|
#define OP_RESPOND_TO_MASK_REQ 30
|
|
#define OP_PERFORM_ROUTER_DISCOVERY 31
|
|
#define OP_ROUTER_SOLICIT_ADDRESS 32
|
|
#define OP_STATIC_ROUTER_LIST 33
|
|
#define OP_USE_ARP_TRAILERS 34
|
|
#define OP_ARP_CACHE_TIMEOUT 35
|
|
#define OP_ETHERNET_ENCAPSULATION 36
|
|
#define OP_TCP_DEFAULT_TTL 37
|
|
#define OP_TCP_KEEP_ALIVE_INT 38
|
|
#define OP_KEEP_ALIVE_GARBAGE 39
|
|
#define OP_NIS_DOMAIN_NAME 40
|
|
#define OP_NIS_SERVERS 41
|
|
#define OP_NTP_SERVERS 42
|
|
#define OP_VENDOR_SPECIFIC 43
|
|
#define VEND_PXE_MTFTP_IP 1
|
|
#define VEND_PXE_MTFTP_CPORT 2
|
|
#define VEND_PXE_MTFTP_SPORT 3
|
|
#define VEND_PXE_MTFTP_TMOUT 4
|
|
#define VEND_PXE_MTFTP_DELAY 5
|
|
#define VEND_PXE_DISCOVERY_CONTROL 6
|
|
#define PXE_DISABLE_BROADCAST_DISCOVERY (1 << 0)
|
|
#define PXE_DISABLE_MULTICAST_DISCOVERY (1 << 1)
|
|
#define PXE_ACCEPT_ONLY_PXE_BOOT_SERVERS (1 << 2)
|
|
#define PXE_DO_NOT_PROMPT (1 << 3)
|
|
#define VEND_PXE_DISCOVERY_MCAST_ADDR 7
|
|
#define VEND_PXE_BOOT_SERVERS 8
|
|
#define VEND_PXE_BOOT_MENU 9
|
|
#define VEND_PXE_BOOT_PROMPT 10
|
|
#define VEND_PXE_MCAST_ADDRS_ALLOC 11
|
|
#define VEND_PXE_CREDENTIAL_TYPES 12
|
|
#define VEND_PXE_BOOT_ITEM 71
|
|
#define OP_NBNS_SERVERS 44
|
|
#define OP_NBDD_SERVERS 45
|
|
#define OP_NETBIOS_NODE_TYPE 46
|
|
#define OP_NETBIOS_SCOPE 47
|
|
#define OP_XWINDOW_SYSTEM_FONT_SERVERS 48
|
|
#define OP_XWINDOW_SYSTEM_DISPLAY_MANAGERS 49
|
|
#define OP_DHCP_REQ_IP_ADD 50
|
|
#define OP_DHCP_LEASE_TIME 51
|
|
#define OP_DHCP_OPTION_OVERLOAD 52
|
|
#define OVLD_FILE 1
|
|
#define OVLD_SRVR_NAME 2
|
|
#define OP_DHCP_MESSAGE_TYPE 53
|
|
#define DHCPDISCOVER 1
|
|
#define DHCPOFFER 2
|
|
#define DHCPREQUEST 3
|
|
#define DHCPDECLINE 4
|
|
#define DHCPACK 5
|
|
#define DHCPNAK 6
|
|
#define DHCPRELEASE 7
|
|
#define DHCPINFORM 8
|
|
#define OP_DHCP_SERVER_IP 54
|
|
#define OP_DHCP_PARM_REQ_LIST 55
|
|
#define OP_DHCP_ERROR_MESSAGE 56
|
|
#define OP_DHCP_MAX_MESSAGE_SZ 57
|
|
#define OP_DHCP_RENEWAL_TIME 58
|
|
#define OP_DHCP_REBINDING_TIME 59
|
|
#define OP_DHCP_CLASS_IDENTIFIER 60
|
|
#define OP_DHCP_CLIENT_IDENTIFIER 61
|
|
#define OP_NISPLUS_DOMAIN_NAME 64
|
|
#define OP_NISPLUS_SERVERS 65
|
|
#define OP_DHCP_TFTP_SERVER_NAME 66
|
|
#define OP_DHCP_BOOTFILE 67
|
|
#define OP_MOBILE_IP_HOME_AGENTS 68
|
|
#define OP_SMPT_SERVERS 69
|
|
#define OP_POP3_SERVERS 70
|
|
#define OP_NNTP_SERVERS 71
|
|
#define OP_WWW_SERVERS 72
|
|
#define OP_FINGER_SERVERS 73
|
|
#define OP_IRC_SERVERS 74
|
|
#define OP_STREET_TALK_SERVERS 75
|
|
#define OP_STREET_TALK_DIR_ASSIST_SERVERS 76
|
|
#define OP_NDS_SERVERS 85
|
|
#define OP_NDS_TREE_NAME 86
|
|
#define OP_NDS_CONTEXT 87
|
|
#define OP_DHCP_SYSTEM_ARCH 93
|
|
#define OP_DHCP_NETWORK_ARCH 94
|
|
#define OP_DHCP_PLATFORM_ID 97
|
|
} DHCPV4_STRUCT;
|
|
|
|
//
|
|
// DHCPv4 option header
|
|
//
|
|
typedef struct {
|
|
UINT8 OpCode;
|
|
UINT8 Length;
|
|
//
|
|
// followed by Data[]
|
|
//
|
|
} DHCPV4_OP_HEADER;
|
|
|
|
//
|
|
// Generic DHCPv4 option (header followed by data)
|
|
//
|
|
typedef struct {
|
|
DHCPV4_OP_HEADER Header;
|
|
UINT8 Data[1];
|
|
} DHCPV4_OP_STRUCT;
|
|
|
|
//
|
|
// Maximum DHCP packet size on ethernet
|
|
//
|
|
#define MAX_DHCP_MSG_SZ (MAX_ENET_DATA_SIZE - sizeof (IPV4_HEADER) - sizeof (UDPV4_HEADER))
|
|
|
|
//
|
|
// Macros used in pxe_bc_dhcp.c and pxe_loadfile.c
|
|
//
|
|
#define DHCPV4_TRANSMIT_BUFFER (*(DHCPV4_STRUCT *) (Private->TransmitBuffer))
|
|
#define DHCPV4_OPTIONS_BUFFER (*(struct optionsstr *) DHCPV4_TRANSMIT_BUFFER.options)
|
|
|
|
#define DHCPV4_ACK_INDEX 0
|
|
#define PXE_BINL_INDEX 1
|
|
#define PXE_OFFER_INDEX 1
|
|
#define PXE_ACK_INDEX 2
|
|
#define PXE_BIS_INDEX 3
|
|
|
|
#define DHCPV4_ACK_BUFFER ((struct DhcpReceiveBufferStruct *) Private->DhcpPacketBuffer)[DHCPV4_ACK_INDEX]
|
|
#define PXE_BINL_BUFFER ((struct DhcpReceiveBufferStruct *) Private->DhcpPacketBuffer)[PXE_BINL_INDEX]
|
|
#define PXE_OFFER_BUFFER ((struct DhcpReceiveBufferStruct *) Private->DhcpPacketBuffer)[PXE_OFFER_INDEX]
|
|
#define PXE_ACK_BUFFER ((struct DhcpReceiveBufferStruct *) Private->DhcpPacketBuffer)[PXE_ACK_INDEX]
|
|
#define PXE_BIS_BUFFER ((struct DhcpReceiveBufferStruct *) Private->DhcpPacketBuffer)[PXE_BIS_INDEX]
|
|
|
|
#define DHCPV4_ACK_PACKET DHCPV4_ACK_BUFFER.u.Dhcpv4
|
|
#define PXE_BINL_PACKET PXE_BINL_BUFFER.u.Dhcpv4
|
|
#define PXE_OFFER_PACKET PXE_OFFER_BUFFER.u.Dhcpv4
|
|
#define PXE_ACK_PACKET PXE_ACK_BUFFER.u.Dhcpv4
|
|
#define PXE_BIS_PACKET PXE_BIS_BUFFER.u.Dhcpv4
|
|
|
|
//
|
|
// network structure definitions
|
|
//
|
|
//
|
|
// some option definitions
|
|
//
|
|
#define DHCPV4_OPTION_LENGTH(type) (sizeof (type) - sizeof (DHCPV4_OP_HEADER))
|
|
|
|
typedef struct {
|
|
DHCPV4_OP_HEADER Header;
|
|
UINT8 Type;
|
|
} DHCPV4_OP_MESSAGE_TYPE;
|
|
|
|
typedef struct {
|
|
DHCPV4_OP_HEADER Header;
|
|
UINT8 Overload;
|
|
} DHCPV4_OP_OVERLOAD;
|
|
|
|
//
|
|
// boot server list structure
|
|
// one or more contained in a pxe boot servers structure
|
|
//
|
|
typedef struct {
|
|
UINT8 IpCount;
|
|
EFI_IPv4_ADDRESS IpList[1]; // IP count of IPs
|
|
} PXEV4_SERVER_LIST;
|
|
|
|
typedef struct {
|
|
UINT8 IpCount;
|
|
EFI_IPv6_ADDRESS IpList[1]; // IP count of IPs
|
|
} PXEV6_SERVER_LIST;
|
|
|
|
typedef union {
|
|
PXEV4_SERVER_LIST Ipv4List;
|
|
PXEV6_SERVER_LIST Ipv6List;
|
|
} PXE_SERVER_LISTS;
|
|
|
|
typedef struct {
|
|
UINT16 Type;
|
|
PXE_SERVER_LISTS u;
|
|
} PXE_SERVER_LIST;
|
|
|
|
//
|
|
// pxe boot servers structure
|
|
//
|
|
typedef struct {
|
|
DHCPV4_OP_HEADER Header;
|
|
PXE_SERVER_LIST ServerList[1]; // one or more
|
|
} PXE_OP_SERVER_LIST;
|
|
|
|
//
|
|
// pxe boot item structure
|
|
//
|
|
typedef struct {
|
|
DHCPV4_OP_HEADER Header;
|
|
UINT16 Type;
|
|
UINT16 Layer;
|
|
} PXE_OP_BOOT_ITEM;
|
|
|
|
//
|
|
// pxe boot menu item structure
|
|
//
|
|
typedef struct {
|
|
UINT16 Type;
|
|
UINT8 DataLen;
|
|
UINT8 Data[1];
|
|
} PXE_BOOT_MENU_ENTRY;
|
|
|
|
//
|
|
// pxe boot menu structure
|
|
//
|
|
typedef struct {
|
|
DHCPV4_OP_HEADER Header;
|
|
PXE_BOOT_MENU_ENTRY MenuItem[1];
|
|
} PXE_OP_BOOT_MENU;
|
|
|
|
//
|
|
// pxe boot prompt structure
|
|
//
|
|
typedef struct {
|
|
DHCPV4_OP_HEADER Header;
|
|
UINT8 Timeout;
|
|
UINT8 Prompt[1];
|
|
} PXE_OP_BOOT_PROMPT;
|
|
|
|
#define PXE_BOOT_PROMPT_AUTO_SELECT 0
|
|
#define PXE_BOOT_PROMPT_NO_TIMEOUT 255
|
|
|
|
typedef struct {
|
|
DHCPV4_OP_HEADER Header;
|
|
UINT8 Class[1];
|
|
} DHCPV4_OP_CLASS;
|
|
|
|
typedef struct {
|
|
DHCPV4_OP_HEADER Header;
|
|
UINT8 File[1];
|
|
} DHCPV4_OP_BOOTFILE;
|
|
|
|
typedef struct {
|
|
DHCPV4_OP_HEADER Header;
|
|
UINT8 VendorOptions[1];
|
|
} DHCPV4_OP_VENDOR_OPTIONS;
|
|
|
|
typedef struct {
|
|
DHCPV4_OP_HEADER Header;
|
|
UINT8 MaxSize[2];
|
|
} DHCPV4_OP_MAX_MESSAGE_SIZE;
|
|
|
|
typedef struct {
|
|
UINT8 _OP_SUBNET_MASK; /* 1 */
|
|
UINT8 _OP_TIME_OFFSET; /* 2 */
|
|
UINT8 _OP_ROUTER_LIST; /* 3 */
|
|
UINT8 _OP_TIME_SERVERS; /* 4 */
|
|
UINT8 _OP_NAME_SERVERS; /* 5 */
|
|
UINT8 _OP_DNS_SERVERS; /* 6 */
|
|
UINT8 _OP_HOST_NAME; /* 12 */
|
|
UINT8 _OP_BOOT_FILE_SZ; /* 13 */
|
|
UINT8 _OP_DOMAIN_NAME; /* 15 */
|
|
UINT8 _OP_ROOT_PATH; /* 17 */
|
|
UINT8 _OP_EXTENSION_PATH; /* 18 */
|
|
UINT8 _OP_MAX_DATAGRAM_SZ; /* 22 */
|
|
UINT8 _OP_DEFAULT_TTL; /* 23 */
|
|
UINT8 _OP_BROADCAST_ADD; /* 28 */
|
|
UINT8 _OP_NIS_DOMAIN_NAME; /* 40 */
|
|
UINT8 _OP_NIS_SERVERS; /* 41 */
|
|
UINT8 _OP_NTP_SERVERS; /* 42 */
|
|
UINT8 _OP_VENDOR_SPECIFIC; /* 43 */
|
|
UINT8 _OP_DHCP_REQ_IP_ADD; /* 50 */
|
|
UINT8 _OP_DHCP_LEASE_TIME; /* 51 */
|
|
UINT8 _OP_DHCP_SERVER_IP; /* 54 */
|
|
UINT8 _OP_DHCP_RENEWAL_TIME; /* 58 */
|
|
UINT8 _OP_DHCP_REBINDING_TIME; /* 59 */
|
|
UINT8 _OP_DHCP_CLASS_IDENTIFIER; /* 60 */
|
|
UINT8 _OP_DHCP_TFTP_SERVER_NAME; /* 66 */
|
|
UINT8 _OP_DHCP_BOOTFILE; /* 67 */
|
|
UINT8 _OP_DHCP_PLATFORM_ID; /* 97 */
|
|
UINT8 VendorOption128; // vendor option 128
|
|
UINT8 VendorOption129; // vendor option 129
|
|
UINT8 VendorOption130; // vendor option 130
|
|
UINT8 VendorOption131; // vendor option 131
|
|
UINT8 VendorOption132; // vendor option 132
|
|
UINT8 VendorOption133; // vendor option 133
|
|
UINT8 VendorOption134; // vendor option 134
|
|
UINT8 VendorOption135; // vendor option 135
|
|
} DHCPV4_REQUESTED_OPTIONS_DATA;
|
|
|
|
typedef struct {
|
|
DHCPV4_OP_HEADER Header;
|
|
DHCPV4_REQUESTED_OPTIONS_DATA Data;
|
|
} DHCPV4_OP_REQUESTED_OPTIONS;
|
|
|
|
typedef struct opipstr {
|
|
DHCPV4_OP_HEADER Header;
|
|
EFI_IPv4_ADDRESS Ip;
|
|
} DHCPV4_OP_IP_ADDRESS;
|
|
|
|
//
|
|
// ip list structure - e.g. router list
|
|
//
|
|
typedef struct {
|
|
DHCPV4_OP_HEADER Header;
|
|
EFI_IPv4_ADDRESS IpList[1];
|
|
} DHCPV4_OP_IP_LIST;
|
|
|
|
typedef struct {
|
|
DHCPV4_OP_HEADER Header;
|
|
UINT8 Type;
|
|
UINT8 Guid[sizeof (EFI_GUID)];
|
|
} DHCPV4_OP_CLIENT_ID;
|
|
|
|
//
|
|
// special options start - someday obsolete ???
|
|
//
|
|
#define DHCPV4_OP_PLATFORM_ID DHCPV4_OP_CLIENT_ID
|
|
|
|
typedef struct {
|
|
DHCPV4_OP_HEADER Header;
|
|
UINT8 Type; // SNP = 2
|
|
UINT8 MajorVersion;
|
|
UINT8 MinorVersion;
|
|
} DHCPV4_OP_NETWORK_INTERFACE;
|
|
|
|
#define UNDI_TYPE 1
|
|
#define SNP_TYPE 2
|
|
|
|
typedef struct {
|
|
DHCPV4_OP_HEADER Header;
|
|
UINT16 Type;
|
|
} DHCPV4_OP_ARCHITECTURE_TYPE;
|
|
//
|
|
// special options end - someday obsolete ???
|
|
//
|
|
typedef struct {
|
|
UINT8 ClassIdentifier[10]; // PXEClient:
|
|
UINT8 Lit2[5]; // Arch:
|
|
UINT8 ArchitectureType[5]; // 00000 - 65536
|
|
UINT8 Lit3[1]; // :
|
|
UINT8 InterfaceName[4]; // e.g. UNDI
|
|
UINT8 Lit4[1]; // :
|
|
UINT8 UndiMajor[3]; // 000 - 255
|
|
UINT8 UndiMinor[3]; // 000 - 255
|
|
} DHCPV4_CLASS_ID_DATA;
|
|
|
|
typedef struct {
|
|
DHCPV4_OP_HEADER Header;
|
|
DHCPV4_CLASS_ID_DATA Data;
|
|
} DHCPV4_OP_CLASS_ID;
|
|
|
|
typedef struct {
|
|
DHCPV4_OP_HEADER Header;
|
|
EFI_IPv4_ADDRESS Ip;
|
|
} DHCPV4_OP_REQUESTED_IP;
|
|
|
|
typedef struct {
|
|
DHCPV4_OP_HEADER Header;
|
|
EFI_IPv4_ADDRESS Ip;
|
|
} DHCPV4_OP_SERVER_IP;
|
|
|
|
typedef struct {
|
|
DHCPV4_OP_HEADER Header;
|
|
EFI_IPv4_ADDRESS Ip;
|
|
} DHCPV4_OP_SUBNET_MASK;
|
|
|
|
typedef struct { // oppxedisctlstr {
|
|
DHCPV4_OP_HEADER Header;
|
|
UINT8 ControlBits;
|
|
} PXE_OP_DISCOVERY_CONTROL;
|
|
|
|
#define DISABLE_BCAST (1 << 0)
|
|
#define DISABLE_MCAST (1 << 1)
|
|
#define USE_ACCEPT_LIST (1 << 2)
|
|
#define USE_BOOTFILE (1 << 3)
|
|
|
|
#pragma pack()
|
|
//
|
|
// definitions of indices to populate option interest array
|
|
//
|
|
#define VEND_PXE_MTFTP_IP_IX 1 // multicast IP address of bootfile for MTFTP listen
|
|
#define VEND_PXE_MTFTP_CPORT_IX 2 // UDP Port to monitor for MTFTP responses - Intel order
|
|
#define VEND_PXE_MTFTP_SPORT_IX 3 // Server UDP Port for MTFTP open - Intel order
|
|
#define VEND_PXE_MTFTP_TMOUT_IX 4 // Listen timeout - secs
|
|
#define VEND_PXE_MTFTP_DELAY_IX 5 // Transmission timeout - secs
|
|
#define VEND_PXE_DISCOVERY_CONTROL_IX 6 // bit field
|
|
#define VEND_PXE_DISCOVERY_MCAST_ADDR_IX 7 // boot server discovery multicast address
|
|
#define VEND_PXE_BOOT_SERVERS_IX 8 // list of boot servers of form tp(2) cnt(1) ips[cnt]
|
|
#define VEND_PXE_BOOT_MENU_IX 9
|
|
#define VEND_PXE_BOOT_PROMPT_IX 10
|
|
#define VEND_PXE_MCAST_ADDRS_ALLOC_IX 0 // not used by PXE client
|
|
#define VEND_PXE_CREDENTIAL_TYPES_IX 11
|
|
#define VEND_13_IX 0 // not used by PXE client
|
|
#define VEND_14_IX 0 // not used by PXE client
|
|
#define VEND_15_IX 0 // not used by PXE client
|
|
#define VEND_16_IX 0 // not used by PXE client
|
|
#define VEND_17_IX 0 // not used by PXE client
|
|
#define VEND_18_IX 0 // not used by PXE client
|
|
#define VEND_19_IX 0 // not used by PXE client
|
|
#define VEND_20_IX 0 // not used by PXE client
|
|
#define VEND_21_IX 0 // not used by PXE client
|
|
#define VEND_22_IX 0 // not used by PXE client
|
|
#define VEND_23_IX 0 // not used by PXE client
|
|
#define VEND_24_IX 0 // not used by PXE client
|
|
#define VEND_25_IX 0 // not used by PXE client
|
|
#define VEND_26_IX 0 // not used by PXE client
|
|
#define VEND_27_IX 0 // not used by PXE client
|
|
#define VEND_28_IX 0 // not used by PXE client
|
|
#define VEND_29_IX 0 // not used by PXE client
|
|
#define VEND_30_IX 0 // not used by PXE client
|
|
#define VEND_31_IX 0 // not used by PXE client
|
|
#define VEND_32_IX 0 // not used by PXE client
|
|
#define VEND_33_IX 0 // not used by PXE client
|
|
#define VEND_34_IX 0 // not used by PXE client
|
|
#define VEND_35_IX 0 // not used by PXE client
|
|
#define VEND_36_IX 0 // not used by PXE client
|
|
#define VEND_37_IX 0 // not used by PXE client
|
|
#define VEND_38_IX 0 // not used by PXE client
|
|
#define VEND_39_IX 0 // not used by PXE client
|
|
#define VEND_40_IX 0 // not used by PXE client
|
|
#define VEND_41_IX 0 // not used by PXE client
|
|
#define VEND_42_IX 0 // not used by PXE client
|
|
#define VEND_43_IX 0 // not used by PXE client
|
|
#define VEND_44_IX 0 // not used by PXE client
|
|
#define VEND_45_IX 0 // not used by PXE client
|
|
#define VEND_46_IX 0 // not used by PXE client
|
|
#define VEND_47_IX 0 // not used by PXE client
|
|
#define VEND_48_IX 0 // not used by PXE client
|
|
#define VEND_49_IX 0 // not used by PXE client
|
|
#define VEND_50_IX 0 // not used by PXE client
|
|
#define VEND_51_IX 0 // not used by PXE client
|
|
#define VEND_52_IX 0 // not used by PXE client
|
|
#define VEND_53_IX 0 // not used by PXE client
|
|
#define VEND_54_IX 0 // not used by PXE client
|
|
#define VEND_55_IX 0 // not used by PXE client
|
|
#define VEND_56_IX 0 // not used by PXE client
|
|
#define VEND_57_IX 0 // not used by PXE client
|
|
#define VEND_58_IX 0 // not used by PXE client
|
|
#define VEND_59_IX 0 // not used by PXE client
|
|
#define VEND_60_IX 0 // not used by PXE client
|
|
#define VEND_61_IX 0 // not used by PXE client
|
|
#define VEND_62_IX 0 // not used by PXE client
|
|
#define VEND_63_IX 0 // not used by PXE client
|
|
#define VEND_64_IX 0 // not used by PXE client
|
|
#define VEND_65_IX 0 // not used by PXE client
|
|
#define VEND_66_IX 0 // not used by PXE client
|
|
#define VEND_67_IX 0 // not used by PXE client
|
|
#define VEND_68_IX 0 // not used by PXE client
|
|
#define VEND_69_IX 0 // not used by PXE client
|
|
#define VEND_70_IX 0 // not used by PXE client
|
|
#define VEND_PXE_BOOT_ITEM_IX 12
|
|
|
|
#define MAX_OUR_PXE_OPT VEND_PXE_BOOT_ITEM // largest PXE option in which we are interested
|
|
#define MAX_OUR_PXE_IX VEND_PXE_BOOT_ITEM_IX // largest PXE option index
|
|
//
|
|
// define various types by options that are sent
|
|
//
|
|
#define WfM11a_OPTS ((1<<VEND_PXE_MTFTP_IP_IX) | \
|
|
(1<<VEND_PXE_MTFTP_CPORT_IX) | \
|
|
(1<<VEND_PXE_MTFTP_SPORT_IX) | \
|
|
(1<<VEND_PXE_MTFTP_TMOUT_IX) | \
|
|
(1<<VEND_PXE_MTFTP_DELAY_IX))
|
|
|
|
#define DISCOVER_OPTS ((1<<VEND_PXE_DISCOVERY_CONTROL_IX) | \
|
|
(1<<VEND_PXE_DISCOVERY_MCAST_ADDR_IX) | \
|
|
(1<<VEND_PXE_BOOT_SERVERS_IX) | \
|
|
(1<<VEND_PXE_BOOT_MENU_IX) | \
|
|
(1<<VEND_PXE_BOOT_PROMPT_IX) | \
|
|
(1<<VEND_PXE_BOOT_ITEM_IX))
|
|
|
|
#define CREDENTIALS_OPT (1 << VEND_PXE_CREDENTIAL_TYPES_IX)
|
|
|
|
//
|
|
// definitions of indices to populate option interest array
|
|
//
|
|
#define OP_SUBNET_MASK_IX 1
|
|
#define OP_TIME_OFFSET_IX 0 // not used by PXE client
|
|
#define OP_ROUTER_LIST_IX 2
|
|
#define OP_TIME_SERVERS_IX 0 // not used by PXE client
|
|
#define OP_NAME_SERVERS_IX 0 // not used by PXE client
|
|
#define OP_DNS_SERVERS_IX 0 // not used by PXE client
|
|
#define OP_LOG_SERVERS_IX 0 // not used by PXE client
|
|
#define OP_COOKIE_SERVERS_IX 0 // not used by PXE client
|
|
#define OP_LPR_SREVERS_IX 0 // not used by PXE client
|
|
#define OP_IMPRESS_SERVERS_IX 0 // not used by PXE client
|
|
#define OP_RES_LOC_SERVERS_IX 0 // not used by PXE client
|
|
#define OP_HOST_NAME_IX 0 // not used by PXE client
|
|
#define OP_BOOT_FILE_SZ_IX 9
|
|
#define OP_DUMP_FILE_IX 0 // not used by PXE client
|
|
#define OP_DOMAIN_NAME_IX 0 // not used by PXE client
|
|
#define OP_SWAP_SERVER_IX 0 // not used by PXE client
|
|
#define OP_ROOT_PATH_IX 0 // not used by PXE client
|
|
#define OP_EXTENSION_PATH_IX 0 // not used by PXE client
|
|
#define OP_IP_FORWARDING_IX 0 // not used by PXE client
|
|
#define OP_NON_LOCAL_SRC_RTE_IX 0 // not used by PXE client
|
|
#define OP_POLICY_FILTER_IX 0 // not used by PXE client
|
|
#define OP_MAX_DATAGRAM_SZ_IX 0 // not used by PXE client
|
|
#define OP_DEFAULT_TTL_IX 0 // not used by PXE client
|
|
#define OP_MTU_AGING_TIMEOUT_IX 0 // not used by PXE client
|
|
#define OP_MTU_SIZES_IX 0 // not used by PXE client
|
|
#define OP_MTU_TO_USE_IX 0 // not used by PXE client
|
|
#define OP_ALL_SUBNETS_LOCAL_IX 0 // not used by PXE client
|
|
#define OP_BROADCAST_ADD_IX 0 // not used by PXE client
|
|
#define OP_PERFORM_MASK_DISCOVERY_IX 0 // not used by PXE client
|
|
#define OP_RESPOND_TO_MASK_REQ_IX 0 // not used by PXE client
|
|
#define OP_PERFORM_ROUTER_DISCOVERY_IX 0 // not used by PXE client
|
|
#define OP_ROUTER_SOLICIT_ADDRESS_IX 0 // not used by PXE client
|
|
#define OP_STATIC_ROUTER_LIST_IX 0 // not used by PXE client
|
|
#define OP_USE_ARP_TRAILERS_IX 0 // not used by PXE client
|
|
#define OP_ARP_CACHE_TIMEOUT_IX 0 // not used by PXE client
|
|
#define OP_ETHERNET_ENCAPSULATION_IX 0 // not used by PXE client
|
|
#define OP_TCP_DEFAULT_TTL_IX 0 // not used by PXE client
|
|
#define OP_TCP_KEEP_ALIVE_INT_IX 0 // not used by PXE client
|
|
#define OP_KEEP_ALIVE_GARBAGE_IX 0 // not used by PXE client
|
|
#define OP_NIS_DOMAIN_NAME_IX 0 // not used by PXE client
|
|
#define OP_NIS_SERVERS_IX 0 // not used by PXE client
|
|
#define OP_NTP_SERVERS_IX 0 // not used by PXE client
|
|
#define OP_VENDOR_SPECIFIC_IX 3
|
|
#define OP_NBNS_SERVERS_IX 0 // not used by PXE client
|
|
#define OP_NBDD_SERVERS_IX 0 // not used by PXE client
|
|
#define OP_NETBIOS_NODE_TYPE_IX 0 // not used by PXE client
|
|
#define OP_NETBIOS_SCOPE_IX 0 // not used by PXE client
|
|
#define OP_XWINDOW_SYSTEM_FONT_SERVERS_IX 0 // not used by PXE client
|
|
#define OP_XWINDOW_SYSTEM_DISPLAY_MANAGERS_IX 0 // not used by PXE client
|
|
// DHCP option indices
|
|
//
|
|
#define OP_DHCP_REQ_IP_ADD_IX 0 // not used by PXE client
|
|
#define OP_DHCP_LEASE_TIME_IX 0 // not used by PXE client
|
|
#define OP_DHCP_OPTION_OVERLOAD_IX 4
|
|
#define OP_DHCP_MESSAGE_TYPE_IX 5
|
|
#define OP_DHCP_SERVER_IP_IX 6
|
|
#define OP_DHCP_PARM_REQ_LIST_IX 0 // not used by PXE client
|
|
#define OP_DHCP_ERROR_MESSAGE_IX 0 // not used by PXE client
|
|
#define OP_DHCP_MAX_MESSAGE_SZ_IX 0 // not used by PXE client
|
|
#define OP_DHCP_RENEWAL_TIME_IX 0 // not used by PXE client
|
|
#define OP_DHCP_REBINDING_TIME_IX 0 // not used by PXE client
|
|
#define OP_DHCP_CLASS_IDENTIFIER_IX 7
|
|
#define OP_DHCP_CLIENT_IDENTIFIER_IX 0 // not used by PXE client
|
|
#define OP_RESERVED62_IX 0 // not used by PXE client
|
|
#define OP_RESERVED63_IX 0 // not used by PXE client
|
|
#define OP_NISPLUS_DOMAIN_NAME_IX 0 // not used by PXE client
|
|
#define OP_NISPLUS_SERVERS_IX 0 // not used by PXE client
|
|
#define OP_DHCP_TFTP_SERVER_NAME_IX 0 // not used by PXE client
|
|
#define OP_DHCP_BOOTFILE_IX 8
|
|
|
|
#define MAX_OUR_OPT OP_DHCP_BOOTFILE // largest option in which we are interested
|
|
#define MAX_OUR_IX OP_BOOT_FILE_SZ_IX
|
|
|
|
typedef struct {
|
|
DHCPV4_OP_STRUCT *PktOptAdds[MAX_OUR_IX];
|
|
DHCPV4_OP_STRUCT *PxeOptAdds[MAX_OUR_PXE_IX];
|
|
UINT8 Status;
|
|
} OPTION_POINTERS;
|
|
|
|
typedef struct DhcpReceiveBufferStruct {
|
|
union {
|
|
UINT8 ReceiveBuffer[MAX_DHCP_MSG_SZ];
|
|
DHCPV4_STRUCT Dhcpv4;
|
|
} u;
|
|
|
|
OPTION_POINTERS OpAdds;
|
|
} DHCP_RECEIVE_BUFFER;
|
|
|
|
#define PXE_TYPE (1 << 0)
|
|
#define WfM11a_TYPE (1 << 1)
|
|
#define DISCOVER_TYPE (1 << 2)
|
|
#define CREDENTIALS_TYPE (1 << 3)
|
|
#define USE_THREE_BYTE (1 << 4)
|
|
|
|
#endif // _DHCP_H
|
|
|
|
/* EOF - dhcp.h */
|