mirror of
				https://git.proxmox.com/git/mirror_edk2
				synced 2025-11-04 07:10:07 +00:00 
			
		
		
		
	git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@3492 6f19259b-4bc3-4df7-8a09-765794883524
		
			
				
	
	
		
			351 lines
		
	
	
		
			11 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			351 lines
		
	
	
		
			11 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
/*++
 | 
						|
 | 
						|
Copyright (c) 2006, 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.
 | 
						|
 | 
						|
Module Name:
 | 
						|
  PxeDhcp4.h
 | 
						|
 | 
						|
Abstract:
 | 
						|
  EFI PXE DHCPv4 protocol definition
 | 
						|
 | 
						|
--*/
 | 
						|
 | 
						|
#ifndef _PXEDHCP4_H_
 | 
						|
#define _PXEDHCP4_H_
 | 
						|
 | 
						|
 | 
						|
/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
 | 
						|
//
 | 
						|
// PXE DHCPv4 GUID definition
 | 
						|
//
 | 
						|
 | 
						|
#define EFI_PXE_DHCP4_PROTOCOL_GUID \
 | 
						|
  { 0x03c4e624, 0xac28, 0x11d3, {0x9a, 0x2d, 0x00, 0x90, 0x29, 0x3f, 0xc1, 0x4d } }
 | 
						|
 | 
						|
/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
 | 
						|
//
 | 
						|
// Interface definition
 | 
						|
//
 | 
						|
 | 
						|
typedef struct _EFI_PXE_DHCP4_PROTOCOL EFI_PXE_DHCP4_PROTOCOL;
 | 
						|
 | 
						|
/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
 | 
						|
//
 | 
						|
// Descriptions of the DHCP version 4 header and options can be found
 | 
						|
// in RFC-2131 and RFC-2132 at www.ietf.org
 | 
						|
//
 | 
						|
 | 
						|
#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;
 | 
						|
#define DHCP4_INITIAL_SECONDS 4
 | 
						|
 | 
						|
  UINT16 flags;
 | 
						|
#define DHCP4_BROADCAST_FLAG  0x8000
 | 
						|
 | 
						|
  UINT32 ciaddr;
 | 
						|
 | 
						|
  UINT32 yiaddr;
 | 
						|
 | 
						|
  UINT32 siaddr;
 | 
						|
 | 
						|
  UINT32 giaddr;
 | 
						|
 | 
						|
  UINT8 chaddr[16];
 | 
						|
 | 
						|
  UINT8 sname[64];
 | 
						|
 | 
						|
  UINT8 fname[128];
 | 
						|
 | 
						|
//
 | 
						|
// This is the minimum option length as specified in RFC-2131.
 | 
						|
// The packet must be padded out this far with DHCP4_PAD.
 | 
						|
// DHCPv4 packets are usually 576 bytes in length.  This length
 | 
						|
// includes the IPv4 and UDPv4 headers but not the media header.
 | 
						|
// Note: Not all DHCP relay agents will forward DHCPv4 packets
 | 
						|
// if they are less than 384 bytes or exceed 576 bytes.  Even if
 | 
						|
// the underlying hardware can handle smaller and larger packets,
 | 
						|
// many older relay agents will not accept them.
 | 
						|
//
 | 
						|
  UINT32 magik;
 | 
						|
#define DHCP4_MAGIK_NUMBER  0x63825363
 | 
						|
 | 
						|
  UINT8 options[308];
 | 
						|
 | 
						|
} DHCP4_HEADER;
 | 
						|
#pragma pack()
 | 
						|
 | 
						|
/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
 | 
						|
//
 | 
						|
// DHCPv4 packet definition.  Room for 576 bytes including IP and
 | 
						|
// UDP header.
 | 
						|
//
 | 
						|
 | 
						|
#define DHCP4_MAX_PACKET_SIZE     576
 | 
						|
#define DHCP4_UDP_HEADER_SIZE     8
 | 
						|
#define DHCP4_IP_HEADER_SIZE      20
 | 
						|
 | 
						|
#pragma pack(1)
 | 
						|
typedef union _DHCP4_PACKET {
 | 
						|
  UINT32 _force_data_alignment;
 | 
						|
 | 
						|
  UINT8 raw[1500];
 | 
						|
 | 
						|
  DHCP4_HEADER dhcp4;
 | 
						|
} DHCP4_PACKET;
 | 
						|
#pragma pack()
 | 
						|
 | 
						|
#define DHCP4_SERVER_PORT 67
 | 
						|
#define DHCP4_CLIENT_PORT 68
 | 
						|
 | 
						|
/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
 | 
						|
//
 | 
						|
// DHCPv4 and PXE option numbers.
 | 
						|
//
 | 
						|
 | 
						|
#define DHCP4_PAD                             0
 | 
						|
#define DHCP4_END                             255
 | 
						|
#define DHCP4_SUBNET_MASK                     1
 | 
						|
#define DHCP4_TIME_OFFSET                     2
 | 
						|
#define DHCP4_ROUTER_LIST                     3
 | 
						|
#define DHCP4_TIME_SERVERS                    4
 | 
						|
#define DHCP4_NAME_SERVERS                    5
 | 
						|
#define DHCP4_DNS_SERVERS                     6
 | 
						|
#define DHCP4_LOG_SERVERS                     7
 | 
						|
#define DHCP4_COOKIE_SERVERS                  8
 | 
						|
#define DHCP4_LPR_SREVERS                     9
 | 
						|
#define DHCP4_IMPRESS_SERVERS                 10
 | 
						|
#define DHCP4_RESOURCE_LOCATION_SERVERS       11
 | 
						|
#define DHCP4_HOST_NAME                       12
 | 
						|
#define DHCP4_BOOT_FILE_SIZE                  13
 | 
						|
#define DHCP4_DUMP_FILE                       14
 | 
						|
#define DHCP4_DOMAIN_NAME                     15
 | 
						|
#define DHCP4_SWAP_SERVER                     16
 | 
						|
#define DHCP4_ROOT_PATH                       17
 | 
						|
#define DHCP4_EXTENSION_PATH                  18
 | 
						|
#define DHCP4_IP_FORWARDING                   19
 | 
						|
#define DHCP4_NON_LOCAL_SOURCE_ROUTE          20
 | 
						|
#define DHCP4_POLICY_FILTER                   21
 | 
						|
#define DHCP4_MAX_DATAGRAM_SIZE               22
 | 
						|
#define DHCP4_DEFAULT_TTL                     23
 | 
						|
#define DHCP4_MTU_AGING_TIMEOUT               24
 | 
						|
#define DHCP4_MTU_SIZES                       25
 | 
						|
#define DHCP4_MTU_TO_USE                      26
 | 
						|
#define DHCP4_ALL_SUBNETS_LOCAL               27
 | 
						|
#define DHCP4_BROADCAST_ADDRESS               28
 | 
						|
#define DHCP4_PERFORM_MASK_DISCOVERY          29
 | 
						|
#define DHCP4_RESPOND_TO_MASK_REQ             30
 | 
						|
#define DHCP4_PERFORM_ROUTER_DISCOVERY        31
 | 
						|
#define DHCP4_ROUTER_SOLICIT_ADDRESS          32
 | 
						|
#define DHCP4_STATIC_ROUTER_LIST              33
 | 
						|
#define DHCP4_USE_ARP_TRAILERS                34
 | 
						|
#define DHCP4_ARP_CACHE_TIMEOUT               35
 | 
						|
#define DHCP4_ETHERNET_ENCAPSULATION          36
 | 
						|
#define DHCP4_TCP_DEFAULT_TTL                 37
 | 
						|
#define DHCP4_TCP_KEEP_ALIVE_INT              38
 | 
						|
#define DHCP4_KEEP_ALIVE_GARBAGE              39
 | 
						|
#define DHCP4_NIS_DOMAIN_NAME                 40
 | 
						|
#define DHCP4_NIS_SERVERS                     41
 | 
						|
#define DHCP4_NTP_SERVERS                     42
 | 
						|
#define DHCP4_VENDOR_SPECIFIC                 43
 | 
						|
# define PXE_MTFTP_IP                         1
 | 
						|
# define PXE_MTFTP_CPORT                      2
 | 
						|
# define PXE_MTFTP_SPORT                      3
 | 
						|
# define PXE_MTFTP_TMOUT                      4
 | 
						|
# define PXE_MTFTP_DELAY                      5
 | 
						|
# define PXE_DISCOVERY_CONTROL                6
 | 
						|
#  define PXE_DISABLE_BROADCAST_DISCOVERY     0x01
 | 
						|
#  define PXE_DISABLE_MULTICAST_DISCOVERY     0x02
 | 
						|
#  define PXE_ACCEPT_ONLY_PXE_BOOT_SERVERS    0x04
 | 
						|
#  define PXE_DO_NOT_PROMPT                   0x08
 | 
						|
# define PXE_DISCOVERY_MCAST_ADDR             7
 | 
						|
# define PXE_BOOT_SERVERS                     8
 | 
						|
# define PXE_BOOT_MENU                        9
 | 
						|
# define PXE_BOOT_PROMPT                      10
 | 
						|
# define PXE_MCAST_ADDRS_ALLOC                11
 | 
						|
# define PXE_CREDENTIAL_TYPES                 12
 | 
						|
# define PXE_BOOT_ITEM                        71
 | 
						|
#define DHCP4_NBNS_SERVERS                    44
 | 
						|
#define DHCP4_NBDD_SERVERS                    45
 | 
						|
#define DHCP4_NETBIOS_NODE_TYPE               46
 | 
						|
#define DHCP4_NETBIOS_SCOPE                   47
 | 
						|
#define DHCP4_XWINDOW_SYSTEM_FONT_SERVERS     48
 | 
						|
#define DHCP4_XWINDOW_SYSTEM_DISPLAY_MANAGERS 49
 | 
						|
#define DHCP4_REQUESTED_IP_ADDRESS            50
 | 
						|
#define DHCP4_LEASE_TIME                      51
 | 
						|
#define DHCP4_OPTION_OVERLOAD                 52
 | 
						|
# define DHCP4_OVERLOAD_FNAME                 1
 | 
						|
# define DHCP4_OVERLOAD_SNAME                 2
 | 
						|
# define DHCP4_OVERLOAD_FNAME_AND_SNAME       3
 | 
						|
#define DHCP4_MESSAGE_TYPE                    53
 | 
						|
# define DHCP4_MESSAGE_TYPE_DISCOVER          1
 | 
						|
# define DHCP4_MESSAGE_TYPE_OFFER             2
 | 
						|
# define DHCP4_MESSAGE_TYPE_REQUEST           3
 | 
						|
# define DHCP4_MESSAGE_TYPE_DECLINE           4
 | 
						|
# define DHCP4_MESSAGE_TYPE_ACK               5
 | 
						|
# define DHCP4_MESSAGE_TYPE_NAK               6
 | 
						|
# define DHCP4_MESSAGE_TYPE_RELEASE           7
 | 
						|
# define DHCP4_MESSAGE_TYPE_INFORM            8
 | 
						|
#define DHCP4_SERVER_IDENTIFIER               54
 | 
						|
#define DHCP4_PARAMETER_REQUEST_LIST          55
 | 
						|
#define DHCP4_ERROR_MESSAGE                   56
 | 
						|
#define DHCP4_MAX_MESSAGE_SIZE                57
 | 
						|
# define DHCP4_DEFAULT_MAX_MESSAGE_SIZE       576
 | 
						|
#define DHCP4_RENEWAL_TIME                    58
 | 
						|
#define DHCP4_REBINDING_TIME                  59
 | 
						|
#define DHCP4_CLASS_IDENTIFIER                60
 | 
						|
#define DHCP4_CLIENT_IDENTIFIER               61
 | 
						|
#define DHCP4_NISPLUS_DOMAIN_NAME             64
 | 
						|
#define DHCP4_NISPLUS_SERVERS                 65
 | 
						|
#define DHCP4_TFTP_SERVER_NAME                66
 | 
						|
#define DHCP4_BOOTFILE                        67
 | 
						|
#define DHCP4_MOBILE_IP_HOME_AGENTS           68
 | 
						|
#define DHCP4_SMPT_SERVERS                    69
 | 
						|
#define DHCP4_POP3_SERVERS                    70
 | 
						|
#define DHCP4_NNTP_SERVERS                    71
 | 
						|
#define DHCP4_WWW_SERVERS                     72
 | 
						|
#define DHCP4_FINGER_SERVERS                  73
 | 
						|
#define DHCP4_IRC_SERVERS                     74
 | 
						|
#define DHCP4_STREET_TALK_SERVERS             75
 | 
						|
#define DHCP4_STREET_TALK_DIR_ASSIST_SERVERS  76
 | 
						|
#define DHCP4_NDS_SERVERS                     85
 | 
						|
#define DHCP4_NDS_TREE_NAME                   86
 | 
						|
#define DHCP4_NDS_CONTEXT                     87
 | 
						|
#define DHCP4_SYSTEM_ARCHITECTURE             93
 | 
						|
#define DHCP4_NETWORK_ARCHITECTURE            94
 | 
						|
#define DHCP4_PLATFORM_ID                     97
 | 
						|
 | 
						|
/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
 | 
						|
//
 | 
						|
// DHCP4 option format.
 | 
						|
//
 | 
						|
 | 
						|
#pragma pack(1)
 | 
						|
typedef struct {
 | 
						|
  UINT8 op;
 | 
						|
  UINT8 len;
 | 
						|
  UINT8 data[1];
 | 
						|
} DHCP4_OP;
 | 
						|
#pragma pack()
 | 
						|
 | 
						|
/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
 | 
						|
 | 
						|
typedef struct {
 | 
						|
  DHCP4_PACKET Discover;
 | 
						|
  DHCP4_PACKET Offer;
 | 
						|
  DHCP4_PACKET Request;
 | 
						|
  DHCP4_PACKET AckNak;
 | 
						|
  BOOLEAN SetupCompleted;
 | 
						|
  BOOLEAN InitCompleted;
 | 
						|
  BOOLEAN SelectCompleted;
 | 
						|
  BOOLEAN IsBootp;
 | 
						|
  BOOLEAN IsAck;
 | 
						|
} EFI_PXE_DHCP4_DATA;
 | 
						|
 | 
						|
/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
 | 
						|
typedef
 | 
						|
EFI_STATUS
 | 
						|
(EFIAPI *EFI_PXE_DHCP4_RUN) (
 | 
						|
  IN EFI_PXE_DHCP4_PROTOCOL *This,
 | 
						|
  IN OPTIONAL UINTN         OpLen,
 | 
						|
  IN OPTIONAL VOID          *OpList
 | 
						|
  );
 | 
						|
 | 
						|
/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
 | 
						|
typedef
 | 
						|
EFI_STATUS
 | 
						|
(EFIAPI *EFI_PXE_DHCP4_SETUP) (
 | 
						|
  IN EFI_PXE_DHCP4_PROTOCOL          *This,
 | 
						|
  IN OPTIONAL EFI_PXE_DHCP4_DATA     * NewData
 | 
						|
  );
 | 
						|
 | 
						|
/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
 | 
						|
typedef
 | 
						|
EFI_STATUS
 | 
						|
(EFIAPI *EFI_PXE_DHCP4_INIT) (
 | 
						|
  IN EFI_PXE_DHCP4_PROTOCOL *This,
 | 
						|
  IN UINTN                  SecondsTimeout,
 | 
						|
  OUT UINTN                 *Offers,
 | 
						|
  OUT DHCP4_PACKET          **OfferList
 | 
						|
  );
 | 
						|
 | 
						|
#define DHCP4_MIN_SECONDS   1
 | 
						|
#define DHCP4_MAX_SECONDS   60
 | 
						|
 | 
						|
/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
 | 
						|
typedef
 | 
						|
EFI_STATUS
 | 
						|
(EFIAPI *EFI_PXE_DHCP4_SELECT) (
 | 
						|
  IN EFI_PXE_DHCP4_PROTOCOL *This,
 | 
						|
  IN UINTN                  SecondsTimeout,
 | 
						|
  IN DHCP4_PACKET           * offer
 | 
						|
  );
 | 
						|
 | 
						|
/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
 | 
						|
typedef
 | 
						|
EFI_STATUS
 | 
						|
(EFIAPI *EFI_PXE_DHCP4_RENEW) (
 | 
						|
  IN EFI_PXE_DHCP4_PROTOCOL *This,
 | 
						|
  UINTN                     seconds_timeout
 | 
						|
  );
 | 
						|
 | 
						|
/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
 | 
						|
typedef
 | 
						|
EFI_STATUS
 | 
						|
(EFIAPI *EFI_PXE_DHCP4_REBIND) (
 | 
						|
  IN EFI_PXE_DHCP4_PROTOCOL *This,
 | 
						|
  UINTN                     seconds_timeout
 | 
						|
  );
 | 
						|
 | 
						|
/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
 | 
						|
typedef
 | 
						|
EFI_STATUS
 | 
						|
(EFIAPI *EFI_PXE_DHCP4_RELEASE) (
 | 
						|
  IN EFI_PXE_DHCP4_PROTOCOL * This
 | 
						|
  );
 | 
						|
 | 
						|
/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
 | 
						|
 | 
						|
#define EFI_PXE_DHCP4_PROTOCOL_REVISION    0x00010000
 | 
						|
 | 
						|
struct _EFI_PXE_DHCP4_PROTOCOL {
 | 
						|
  UINT64 Revision;
 | 
						|
  EFI_PXE_DHCP4_RUN Run;
 | 
						|
  EFI_PXE_DHCP4_SETUP Setup;
 | 
						|
  EFI_PXE_DHCP4_INIT Init;
 | 
						|
  EFI_PXE_DHCP4_SELECT Select;
 | 
						|
  EFI_PXE_DHCP4_RENEW Renew;
 | 
						|
  EFI_PXE_DHCP4_REBIND Rebind;
 | 
						|
  EFI_PXE_DHCP4_RELEASE Release;
 | 
						|
  EFI_PXE_DHCP4_DATA *Data;
 | 
						|
};
 | 
						|
 | 
						|
//
 | 
						|
//
 | 
						|
//
 | 
						|
 | 
						|
extern EFI_GUID gEfiPxeDhcp4ProtocolGuid;
 | 
						|
 | 
						|
#endif /* _PXEDHCP4_H_ */
 | 
						|
/* EOF - PxeDhcp4.h */
 |