123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168 |
- /** @file
- Functions declaration related with DHCPv6 for HTTP boot driver.
- Copyright (c) 2015 - 2018, Intel Corporation. All rights reserved.<BR>
- SPDX-License-Identifier: BSD-2-Clause-Patent
- **/
- #ifndef __EFI_HTTP_BOOT_DHCP6_H__
- #define __EFI_HTTP_BOOT_DHCP6_H__
- #define HTTP_BOOT_OFFER_MAX_NUM 16
- #define HTTP_BOOT_DHCP6_OPTION_MAX_NUM 16
- #define HTTP_BOOT_DHCP6_OPTION_MAX_SIZE 312
- #define HTTP_BOOT_DHCP6_PACKET_MAX_SIZE 1472
- #define HTTP_BOOT_IP6_ROUTE_TABLE_TIMEOUT 10
- #define HTTP_BOOT_DEFAULT_HOPLIMIT 64
- #define HTTP_BOOT_DEFAULT_LIFETIME 50000
- #define HTTP_BOOT_DHCP6_ENTERPRISE_NUM 343 // TODO: IANA TBD: temporarily using Intel's
- #define HTTP_BOOT_DHCP6_MAX_BOOT_FILE_SIZE 65535 // It's a limitation of bit length, 65535*512 bytes.
- #define HTTP_BOOT_DHCP6_IDX_IA_NA 0
- #define HTTP_BOOT_DHCP6_IDX_BOOT_FILE_URL 1
- #define HTTP_BOOT_DHCP6_IDX_BOOT_FILE_PARAM 2
- #define HTTP_BOOT_DHCP6_IDX_VENDOR_CLASS 3
- #define HTTP_BOOT_DHCP6_IDX_DNS_SERVER 4
- #define HTTP_BOOT_DHCP6_IDX_MAX 5
- #pragma pack(1)
- typedef struct {
- UINT16 OpCode[256];
- } HTTP_BOOT_DHCP6_OPTION_ORO;
- typedef struct {
- UINT8 Type;
- UINT8 MajorVer;
- UINT8 MinorVer;
- } HTTP_BOOT_DHCP6_OPTION_UNDI;
- typedef struct {
- UINT16 Type;
- } HTTP_BOOT_DHCP6_OPTION_ARCH;
- typedef struct {
- UINT8 ClassIdentifier[11];
- UINT8 ArchitecturePrefix[5];
- UINT8 ArchitectureType[5];
- UINT8 Lit3[1];
- UINT8 InterfaceName[4];
- UINT8 Lit4[1];
- UINT8 UndiMajor[3];
- UINT8 UndiMinor[3];
- } HTTP_BOOT_CLASS_ID;
- typedef struct {
- UINT32 Vendor;
- UINT16 ClassLen;
- HTTP_BOOT_CLASS_ID ClassId;
- } HTTP_BOOT_DHCP6_OPTION_VENDOR_CLASS;
- #pragma pack()
- typedef union {
- HTTP_BOOT_DHCP6_OPTION_ORO *Oro;
- HTTP_BOOT_DHCP6_OPTION_UNDI *Undi;
- HTTP_BOOT_DHCP6_OPTION_ARCH *Arch;
- HTTP_BOOT_DHCP6_OPTION_VENDOR_CLASS *VendorClass;
- } HTTP_BOOT_DHCP6_OPTION_ENTRY;
- #define HTTP_CACHED_DHCP6_PACKET_MAX_SIZE (OFFSET_OF (EFI_DHCP6_PACKET, Dhcp6) + HTTP_BOOT_DHCP6_PACKET_MAX_SIZE)
- typedef union {
- EFI_DHCP6_PACKET Offer;
- EFI_DHCP6_PACKET Ack;
- UINT8 Buffer[HTTP_CACHED_DHCP6_PACKET_MAX_SIZE];
- } HTTP_BOOT_DHCP6_PACKET;
- typedef struct {
- HTTP_BOOT_DHCP6_PACKET Packet;
- HTTP_BOOT_OFFER_TYPE OfferType;
- EFI_DHCP6_PACKET_OPTION *OptList[HTTP_BOOT_DHCP6_IDX_MAX];
- VOID *UriParser;
- } HTTP_BOOT_DHCP6_PACKET_CACHE;
- #define GET_NEXT_DHCP6_OPTION(Opt) \
- (EFI_DHCP6_PACKET_OPTION *) ((UINT8 *) (Opt) + \
- sizeof (EFI_DHCP6_PACKET_OPTION) + (NTOHS ((Opt)->OpLen)) - 1)
- #define GET_DHCP6_OPTION_SIZE(Pkt) \
- ((Pkt)->Length - sizeof (EFI_DHCP6_HEADER))
- /**
- Start the S.A.R.R DHCPv6 process to acquire the IPv6 address and other Http boot information.
- @param[in] Private Pointer to HTTP_BOOT private data.
- @retval EFI_SUCCESS The S.A.R.R process successfully finished.
- @retval Others Failed to finish the S.A.R.R process.
- **/
- EFI_STATUS
- HttpBootDhcp6Sarr (
- IN HTTP_BOOT_PRIVATE_DATA *Private
- );
- /**
- Set the IP6 policy to Automatic.
- @param[in] Private The pointer to HTTP_BOOT_PRIVATE_DATA.
- @retval EFI_SUCCESS Switch the IP policy successfully.
- @retval Others Unexpected error happened.
- **/
- EFI_STATUS
- HttpBootSetIp6Policy (
- IN HTTP_BOOT_PRIVATE_DATA *Private
- );
- /**
- This function will register the default DNS addresses to the network device.
- @param[in] Private The pointer to HTTP_BOOT_PRIVATE_DATA.
- @param[in] DataLength Size of the buffer pointed to by DnsServerData in bytes.
- @param[in] DnsServerData Point a list of DNS server address in an array
- of EFI_IPv6_ADDRESS instances.
- @retval EFI_SUCCESS The DNS configuration has been configured successfully.
- @retval Others Failed to configure the address.
- **/
- EFI_STATUS
- HttpBootSetIp6Dns (
- IN HTTP_BOOT_PRIVATE_DATA *Private,
- IN UINTN DataLength,
- IN VOID *DnsServerData
- );
- /**
- This function will register the IPv6 gateway address to the network device.
- @param[in] Private The pointer to HTTP_BOOT_PRIVATE_DATA.
- @retval EFI_SUCCESS The new IP configuration has been configured successfully.
- @retval Others Failed to configure the address.
- **/
- EFI_STATUS
- HttpBootSetIp6Gateway (
- IN HTTP_BOOT_PRIVATE_DATA *Private
- );
- /**
- This function will register the station IP address.
- @param[in] Private The pointer to HTTP_BOOT_PRIVATE_DATA.
- @retval EFI_SUCCESS The new IP address has been configured successfully.
- @retval Others Failed to configure the address.
- **/
- EFI_STATUS
- HttpBootSetIp6Address (
- IN HTTP_BOOT_PRIVATE_DATA *Private
- );
- #endif
|