| /*++ | |
| 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 */ |