dhcp.h

来自「EFI BIOS是Intel提出的下一代的BIOS标准。这里上传的Edk源代码是」· C头文件 代码 · 共 632 行 · 第 1/2 页

H
632
字号
/*++

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

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?