dhcp.h

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

H
632
字号
  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 */

⌨️ 快捷键说明

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