4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/** @file
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Dhcp and Discover routines for PxeBc.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncCopyright (c) 2007 - 2011, Intel Corporation. All rights reserved.<BR>
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncThis program and the accompanying materials
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncare licensed and made available under the terms and conditions of the BSD License
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncwhich accompanies this distribution. The full text of the license may be found at
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsynchttp://opensource.org/licenses/bsd-license.php
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncTHE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncWITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync**/
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#ifndef __EFI_PXEBC_DHCP_H__
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define __EFI_PXEBC_DHCP_H__
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define PXEBC_DHCP4_MAX_OPTION_NUM 16
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define PXEBC_DHCP4_MAX_OPTION_SIZE 312
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define PXEBC_DHCP4_MAX_PACKET_SIZE 1472
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define PXEBC_DHCP4_S_PORT 67
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define PXEBC_DHCP4_C_PORT 68
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define PXEBC_BS_DOWNLOAD_PORT 69
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define PXEBC_BS_DISCOVER_PORT 4011
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define PXEBC_DHCP4_OPCODE_REQUEST 1
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define PXEBC_DHCP4_OPCODE_REPLY 2
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define PXEBC_DHCP4_MSG_TYPE_REQUEST 3
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define PXEBC_DHCP4_MAGIC 0x63538263 // network byte order
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync//
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync// Dhcp Options
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync//
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define PXEBC_DHCP4_TAG_PAD 0 // Pad Option
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define PXEBC_DHCP4_TAG_EOP 255 // End Option
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define PXEBC_DHCP4_TAG_NETMASK 1 // Subnet Mask
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define PXEBC_DHCP4_TAG_TIME_OFFSET 2 // Time Offset from UTC
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define PXEBC_DHCP4_TAG_ROUTER 3 // Router option,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define PXEBC_DHCP4_TAG_TIME_SERVER 4 // Time Server
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define PXEBC_DHCP4_TAG_NAME_SERVER 5 // Name Server
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define PXEBC_DHCP4_TAG_DNS_SERVER 6 // Domain Name Server
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define PXEBC_DHCP4_TAG_HOSTNAME 12 // Host Name
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define PXEBC_DHCP4_TAG_BOOTFILE_LEN 13 // Boot File Size
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define PXEBC_DHCP4_TAG_DUMP 14 // Merit Dump File
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define PXEBC_DHCP4_TAG_DOMAINNAME 15 // Domain Name
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define PXEBC_DHCP4_TAG_ROOTPATH 17 // Root path
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define PXEBC_DHCP4_TAG_EXTEND_PATH 18 // Extensions Path
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define PXEBC_DHCP4_TAG_EMTU 22 // Maximum Datagram Reassembly Size
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define PXEBC_DHCP4_TAG_TTL 23 // Default IP Time-to-live
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define PXEBC_DHCP4_TAG_BROADCAST 28 // Broadcast Address
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define PXEBC_DHCP4_TAG_NIS_DOMAIN 40 // Network Information Service Domain
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define PXEBC_DHCP4_TAG_NIS_SERVER 41 // Network Information Servers
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define PXEBC_DHCP4_TAG_NTP_SERVER 42 // Network Time Protocol Servers
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define PXEBC_DHCP4_TAG_VENDOR 43 // Vendor Specific Information
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define PXEBC_DHCP4_TAG_REQUEST_IP 50 // Requested IP Address
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define PXEBC_DHCP4_TAG_LEASE 51 // IP Address Lease Time
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define PXEBC_DHCP4_TAG_OVERLOAD 52 // Option Overload
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define PXEBC_DHCP4_TAG_MSG_TYPE 53 // DHCP Message Type
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define PXEBC_DHCP4_TAG_SERVER_ID 54 // Server Identifier
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define PXEBC_DHCP4_TAG_PARA_LIST 55 // Parameter Request List
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define PXEBC_DHCP4_TAG_MAXMSG 57 // Maximum DHCP Message Size
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define PXEBC_DHCP4_TAG_T1 58 // Renewal (T1) Time Value
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define PXEBC_DHCP4_TAG_T2 59 // Rebinding (T2) Time Value
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define PXEBC_DHCP4_TAG_CLASS_ID 60 // Vendor class identifier
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define PXEBC_DHCP4_TAG_CLIENT_ID 61 // Client-identifier
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define PXEBC_DHCP4_TAG_TFTP 66 // TFTP server name
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define PXEBC_DHCP4_TAG_BOOTFILE 67 // Bootfile name
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define PXEBC_PXE_DHCP4_TAG_ARCH 93
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define PXEBC_PXE_DHCP4_TAG_UNDI 94
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define PXEBC_PXE_DHCP4_TAG_UUID 97
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync//
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync// Sub-Options in Dhcp Vendor Option
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync//
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define PXEBC_VENDOR_TAG_MTFTP_IP 1
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define PXEBC_VENDOR_TAG_MTFTP_CPORT 2
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define PXEBC_VENDOR_TAG_MTFTP_SPORT 3
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define PXEBC_VENDOR_TAG_MTFTP_TIMEOUT 4
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define PXEBC_VENDOR_TAG_MTFTP_DELAY 5
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define PXEBC_VENDOR_TAG_DISCOVER_CTRL 6
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define PXEBC_VENDOR_TAG_DISCOVER_MCAST 7
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define PXEBC_VENDOR_TAG_BOOT_SERVERS 8
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define PXEBC_VENDOR_TAG_BOOT_MENU 9
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define PXEBC_VENDOR_TAG_MENU_PROMPT 10
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define PXEBC_VENDOR_TAG_MCAST_ALLOC 11
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define PXEBC_VENDOR_TAG_CREDENTIAL_TYPES 12
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define PXEBC_VENDOR_TAG_BOOT_ITEM 71
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define PXEBC_DHCP4_DISCOVER_INIT_TIMEOUT 4
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define PXEBC_DHCP4_DISCOVER_RETRIES 4
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define PXEBC_MAX_MENU_NUM 24
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define PXEBC_MAX_OFFER_NUM 16
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define PXEBC_BOOT_REQUEST_TIMEOUT 1
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define PXEBC_BOOT_REQUEST_RETRIES 4
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define PXEBC_DHCP4_OVERLOAD_FILE 1
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define PXEBC_DHCP4_OVERLOAD_SERVER_NAME 2
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync//
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync// The array index of the DHCP4 option tag interested
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync//
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define PXEBC_DHCP4_TAG_INDEX_BOOTFILE_LEN 0
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define PXEBC_DHCP4_TAG_INDEX_VENDOR 1
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define PXEBC_DHCP4_TAG_INDEX_OVERLOAD 2
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define PXEBC_DHCP4_TAG_INDEX_MSG_TYPE 3
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define PXEBC_DHCP4_TAG_INDEX_SERVER_ID 4
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define PXEBC_DHCP4_TAG_INDEX_CLASS_ID 5
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define PXEBC_DHCP4_TAG_INDEX_BOOTFILE 6
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define PXEBC_DHCP4_TAG_INDEX_MAX 7
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync//
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync// The type of DHCP OFFER, arranged by priority, PXE10 has the highest priority.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync//
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define DHCP4_PACKET_TYPE_PXE10 0
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define DHCP4_PACKET_TYPE_WFM11A 1
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define DHCP4_PACKET_TYPE_BINL 2
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define DHCP4_PACKET_TYPE_DHCP_ONLY 3
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define DHCP4_PACKET_TYPE_BOOTP 4
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define DHCP4_PACKET_TYPE_MAX 5
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define BIT(x) (1 << x)
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define CTRL(x) (0x1F & (x))
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync//
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync// WfM11a options
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync//
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define MTFTP_VENDOR_OPTION_BIT_MAP (BIT (PXEBC_VENDOR_TAG_MTFTP_IP) | \
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync BIT (PXEBC_VENDOR_TAG_MTFTP_CPORT) | \
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync BIT (PXEBC_VENDOR_TAG_MTFTP_SPORT) | \
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync BIT (PXEBC_VENDOR_TAG_MTFTP_TIMEOUT) | \
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync BIT (PXEBC_VENDOR_TAG_MTFTP_DELAY))
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync//
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync// Discoverty options
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync//
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define DISCOVER_VENDOR_OPTION_BIT_MAP (BIT (PXEBC_VENDOR_TAG_DISCOVER_CTRL) | \
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync BIT (PXEBC_VENDOR_TAG_DISCOVER_MCAST) | \
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync BIT (PXEBC_VENDOR_TAG_BOOT_SERVERS) | \
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync BIT (PXEBC_VENDOR_TAG_BOOT_MENU) | \
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync BIT (PXEBC_VENDOR_TAG_MENU_PROMPT))
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define IS_VALID_BOOT_PROMPT(x) \
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ((((x)[0]) & BIT (PXEBC_VENDOR_TAG_MENU_PROMPT)) == BIT (PXEBC_VENDOR_TAG_MENU_PROMPT))
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define IS_VALID_BOOT_MENU(x) \
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ((((x)[0]) & BIT (PXEBC_VENDOR_TAG_BOOT_MENU)) == BIT (PXEBC_VENDOR_TAG_BOOT_MENU))
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define IS_VALID_MTFTP_VENDOR_OPTION(x) \
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync (((UINT32) ((x)[0]) & MTFTP_VENDOR_OPTION_BIT_MAP) == MTFTP_VENDOR_OPTION_BIT_MAP)
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define IS_VALID_DISCOVER_VENDOR_OPTION(x) (((UINT32) ((x)[0]) & DISCOVER_VENDOR_OPTION_BIT_MAP) != 0)
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define IS_VALID_CREDENTIAL_VENDOR_OPTION(x) \
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync (((UINT32) ((x)[0]) & BIT (PXEBC_VENDOR_TAG_CREDENTIAL_TYPES)) == BIT (PXEBC_VENDOR_TAG_CREDENTIAL_TYPES))
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define IS_VALID_BOOTITEM_VENDOR_OPTION(x) \
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync (((UINT32) ((x)[PXEBC_VENDOR_TAG_BOOT_ITEM / 32]) & BIT (PXEBC_VENDOR_TAG_BOOT_ITEM % 32)) \
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync == BIT (PXEBC_VENDOR_TAG_BOOT_ITEM % 32))
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define IS_DISABLE_BCAST_DISCOVER(x) (((x) & BIT (0)) == BIT (0))
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define IS_DISABLE_MCAST_DISCOVER(x) (((x) & BIT (1)) == BIT (1))
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define IS_ENABLE_USE_SERVER_LIST(x) (((x) & BIT (2)) == BIT (2))
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define IS_ENABLE_BOOT_FILE_NAME(x) (((x) & BIT (3)) == BIT (3))
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define SET_VENDOR_OPTION_BIT_MAP(x, y) (((x)[(y) / 32]) = (UINT32) ((x)[(y) / 32]) | BIT ((y) % 32))
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#pragma pack(1)
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsynctypedef struct {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT8 ParaList[135];
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync} PXEBC_DHCP4_OPTION_PARA;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsynctypedef struct {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT16 Size;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync} PXEBC_DHCP4_OPTION_MAX_MESG_SIZE;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsynctypedef struct {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT8 Type;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT8 MajorVer;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT8 MinorVer;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync} PXEBC_DHCP4_OPTION_UNDI;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsynctypedef struct {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT8 Type;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync} PXEBC_DHCP4_OPTION_MESG;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsynctypedef struct {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT16 Type;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync} PXEBC_DHCP4_OPTION_ARCH;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define DEFAULT_CLASS_ID_DATA "PXEClient:Arch:xxxxx:UNDI:003000"
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define DEFAULT_UNDI_TYPE 1
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define DEFAULT_UNDI_MAJOR 3
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define DEFAULT_UNDI_MINOR 0
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsynctypedef struct {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT8 ClassIdentifier[10];
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT8 ArchitecturePrefix[5];
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT8 ArchitectureType[5];
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT8 Lit3[1];
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT8 InterfaceName[4];
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT8 Lit4[1];
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT8 UndiMajor[3];
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT8 UndiMinor[3];
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync} PXEBC_DHCP4_OPTION_CLID;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsynctypedef struct {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT8 Type;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT8 Guid[16];
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync} PXEBC_DHCP4_OPTION_UUID;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsynctypedef struct {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT16 Type;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT16 Layer;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync} PXEBC_OPTION_BOOT_ITEM;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#pragma pack()
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsynctypedef union {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync PXEBC_DHCP4_OPTION_PARA *Para;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync PXEBC_DHCP4_OPTION_UNDI *Undi;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync PXEBC_DHCP4_OPTION_ARCH *Arch;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync PXEBC_DHCP4_OPTION_CLID *Clid;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync PXEBC_DHCP4_OPTION_UUID *Uuid;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync PXEBC_DHCP4_OPTION_MESG *Mesg;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync PXEBC_DHCP4_OPTION_MAX_MESG_SIZE *MaxMesgSize;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync} PXEBC_DHCP4_OPTION_ENTRY;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsynctypedef struct {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT16 Type;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT8 IpCnt;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync EFI_IPv4_ADDRESS IpAddr[1];
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync} PXEBC_BOOT_SVR_ENTRY;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsynctypedef struct {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT16 Type;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT8 DescLen;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT8 DescStr[1];
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync} PXEBC_BOOT_MENU_ENTRY;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsynctypedef struct {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT8 Timeout;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT8 Prompt[1];
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync} PXEBC_MENU_PROMPT;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsynctypedef struct {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 BitMap[8];
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync EFI_IPv4_ADDRESS MtftpIp;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT16 MtftpCPort;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT16 MtftpSPort;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT8 MtftpTimeout;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT8 MtftpDelay;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT8 DiscoverCtrl;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync EFI_IPv4_ADDRESS DiscoverMcastIp;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync EFI_IPv4_ADDRESS McastIpBase;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT16 McastIpBlock;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT16 McastIpRange;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT16 BootSrvType;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT16 BootSrvLayer;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync PXEBC_BOOT_SVR_ENTRY *BootSvr;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT8 BootSvrLen;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync PXEBC_BOOT_MENU_ENTRY *BootMenu;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT8 BootMenuLen;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync PXEBC_MENU_PROMPT *MenuPrompt;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT8 MenuPromptLen;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 *CredType;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT8 CredTypeLen;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync} PXEBC_VENDOR_OPTION;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define PXEBC_CACHED_DHCP4_PACKET_MAX_SIZE (OFFSET_OF (EFI_DHCP4_PACKET, Dhcp4) + PXEBC_DHCP4_MAX_PACKET_SIZE)
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsynctypedef union {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync EFI_DHCP4_PACKET Offer;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync EFI_DHCP4_PACKET Ack;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT8 Buffer[PXEBC_CACHED_DHCP4_PACKET_MAX_SIZE];
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync} PXEBC_DHCP4_PACKET;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsynctypedef struct {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync PXEBC_DHCP4_PACKET Packet;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync BOOLEAN IsPxeOffer;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT8 OfferType;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync EFI_DHCP4_PACKET_OPTION *Dhcp4Option[PXEBC_DHCP4_TAG_INDEX_MAX];
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync PXEBC_VENDOR_OPTION PxeVendorOption;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync} PXEBC_CACHED_DHCP4_PACKET;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define GET_NEXT_DHCP_OPTION(Opt) \
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync (EFI_DHCP4_PACKET_OPTION *) ((UINT8 *) (Opt) + sizeof (EFI_DHCP4_PACKET_OPTION) + (Opt)->Length - 1)
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define GET_OPTION_BUFFER_LEN(Pkt) ((Pkt)->Length - sizeof (EFI_DHCP4_HEADER) - 4)
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define IS_PROXY_DHCP_OFFER(Offer) EFI_IP4_EQUAL (&((Offer)->Dhcp4.Header.YourAddr), &mZeroIp4Addr)
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define GET_NEXT_BOOT_SVR_ENTRY(Ent) \
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync (PXEBC_BOOT_SVR_ENTRY *) ((UINT8 *) Ent + sizeof (*(Ent)) + ((Ent)->IpCnt - 1) * sizeof (EFI_IPv4_ADDRESS))
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/**
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync This function initialize the DHCP4 message instance.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync This function will pad each item of dhcp4 message packet.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param Seed Pointer to the message instance of the DHCP4 packet.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param Udp4 Pointer to the EFI_UDP4_PROTOCOL instance.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync**/
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncVOID
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncPxeBcInitSeedPacket (
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN EFI_DHCP4_PACKET *Seed,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN EFI_UDP4_PROTOCOL *Udp4
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync );
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/**
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Parse the cached dhcp packet.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param CachedPacket Pointer to cached dhcp packet.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval TRUE Succeed to parse and validation.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval FALSE Fail to parse or validation.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync**/
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncBOOLEAN
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncPxeBcParseCachedDhcpPacket (
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN PXEBC_CACHED_DHCP4_PACKET *CachedPacket
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync );
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/**
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync This function is to check the selected proxy offer (include BINL dhcp offer and
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync DHCP_ONLY offer ) and set the flag and copy the DHCP packets to the Pxe base code
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync mode structure.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param Private Pointer to PxeBc private data.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval EFI_SUCCESS Operational successful.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval EFI_NO_RESPONSE Offer dhcp service failed.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync**/
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncEFI_STATUS
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncPxeBcCheckSelectedOffer (
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN PXEBC_PRIVATE_DATA *Private
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync );
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/**
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Callback routine.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync EFI_DHCP4_CALLBACK is provided by the consumer of the EFI DHCPv4 Protocol driver
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync to intercept events that occurred in the configuration process. This structure
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync provides advanced control of each state transition of the DHCP process. The
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync returned status code determines the behavior of the EFI DHCPv4 Protocol driver.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync There are three possible returned values, which are described in the following
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync table.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param This Pointer to the EFI DHCPv4 Protocol instance that is used to
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync configure this callback function.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param Context Pointer to the context that is initialized by
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync EFI_DHCP4_PROTOCOL.Configure().
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param CurrentState The current operational state of the EFI DHCPv4 Protocol
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync driver.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param Dhcp4Event The event that occurs in the current state, which usually means a
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync state transition.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param Packet The DHCP packet that is going to be sent or already received.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param NewPacket The packet that is used to replace the above Packet.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval EFI_SUCCESS Tells the EFI DHCPv4 Protocol driver to continue the DHCP process.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval EFI_NOT_READY Only used in the Dhcp4Selecting state. The EFI DHCPv4 Protocol
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync driver will continue to wait for more DHCPOFFER packets until the retry
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync timeout expires.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval EFI_ABORTED Tells the EFI DHCPv4 Protocol driver to abort the current process and
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync return to the Dhcp4Init or Dhcp4InitReboot state.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync**/
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncEFI_STATUS
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncEFIAPI
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncPxeBcDhcpCallBack (
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN EFI_DHCP4_PROTOCOL * This,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN VOID *Context,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN EFI_DHCP4_STATE CurrentState,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN EFI_DHCP4_EVENT Dhcp4Event,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN EFI_DHCP4_PACKET * Packet OPTIONAL,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync OUT EFI_DHCP4_PACKET **NewPacket OPTIONAL
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync );
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/**
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Discover the boot of service and initialize the vendor option if exists.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param Private Pointer to PxeBc private data.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param Type PxeBc option boot item type
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param Layer PxeBc option boot item layer
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param UseBis Use BIS or not
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param DestIp Ip address for server
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param IpCount The total count of the server ip address
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param SrvList Server list
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param IsDiscv Discover the vendor or not
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param Reply The dhcp4 packet of Pxe reply
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval EFI_SUCCESS Operation succeeds.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval EFI_OUT_OF_RESOURCES Allocate memory pool failed.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval EFI_NOT_FOUND There is no vendor option exists.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval EFI_TIMEOUT Send Pxe Discover time out.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync**/
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncEFI_STATUS
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncPxeBcDiscvBootService (
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN PXEBC_PRIVATE_DATA * Private,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN UINT16 Type,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN UINT16 *Layer,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN BOOLEAN UseBis,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN EFI_IP_ADDRESS * DestIp,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN UINT16 IpCount,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN EFI_PXE_BASE_CODE_SRVLIST * SrvList,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN BOOLEAN IsDiscv,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync OUT EFI_DHCP4_PACKET * Reply OPTIONAL
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync );
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/**
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Initialize the DHCP options and build the option list.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param Private Pointer to PxeBc private data.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param OptList Pointer to a DHCP option list.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param IsDhcpDiscover Discover dhcp option or not.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @return The index item number of the option list.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync**/
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncUINT32
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncPxeBcBuildDhcpOptions (
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN PXEBC_PRIVATE_DATA *Private,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN EFI_DHCP4_PACKET_OPTION **OptList,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN BOOLEAN IsDhcpDiscover
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync );
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/**
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Create the boot options.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param OptList Pointer to the list of the options
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param Type the type of option
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param Layer the layer of the boot options
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param OptLen length of opotion
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync**/
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncVOID
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncPxeBcCreateBootOptions (
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN EFI_DHCP4_PACKET_OPTION *OptList,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN UINT16 Type,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN UINT16 *Layer,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync OUT UINT32 *OptLen
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync );
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/**
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Parse interested dhcp options.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param Buffer Pointer to the dhcp options packet.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param Length The length of the dhcp options.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param OptTag The option OpCode.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @return NULL if the buffer length is 0 and OpCode is not
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync PXEBC_DHCP4_TAG_EOP, or the pointer to the buffer.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync**/
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncEFI_DHCP4_PACKET_OPTION *
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncPxeBcParseExtendOptions (
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN UINT8 *Buffer,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN UINT32 Length,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN UINT8 OptTag
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync );
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/**
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync This function is to parse and check vendor options.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param Dhcp4Option Pointer to dhcp options
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param VendorOption Pointer to vendor options
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @return TRUE if valid for vendor options, or FALSE.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync**/
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncBOOLEAN
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncPxeBcParseVendorOptions (
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN EFI_DHCP4_PACKET_OPTION *Dhcp4Option,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN PXEBC_VENDOR_OPTION *VendorOption
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync );
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/**
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Choose the boot prompt.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param Private Pointer to PxeBc private data.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval EFI_SUCCESS Select boot prompt done.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval EFI_TIMEOUT Select boot prompt time out.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval EFI_NOT_FOUND The proxy offer is not Pxe10.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval EFI_ABORTED User cancel the operation.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval EFI_NOT_READY Read the input key from the keybroad has not finish.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync**/
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncEFI_STATUS
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncPxeBcSelectBootPrompt (
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN PXEBC_PRIVATE_DATA *Private
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync );
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/**
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Select the boot menu.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param Private Pointer to PxeBc private data.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param Type The type of the menu.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param UseDefaultItem Use default item or not.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval EFI_ABORTED User cancel operation.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval EFI_SUCCESS Select the boot menu success.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval EFI_NOT_READY Read the input key from the keybroad has not finish.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync**/
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncEFI_STATUS
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncPxeBcSelectBootMenu (
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN PXEBC_PRIVATE_DATA *Private,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync OUT UINT16 *Type,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN BOOLEAN UseDefaultItem
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync );
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#endif
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync