2 Functions declaration related with DHCPv6 for HTTP boot driver.
4 Copyright (c) 2015 - 2018, Intel Corporation. All rights reserved.<BR>
5 SPDX-License-Identifier: BSD-2-Clause-Patent
9 #ifndef __EFI_HTTP_BOOT_DHCP6_H__
10 #define __EFI_HTTP_BOOT_DHCP6_H__
12 #define HTTP_BOOT_OFFER_MAX_NUM 16
13 #define HTTP_BOOT_DHCP6_OPTION_MAX_NUM 16
14 #define HTTP_BOOT_DHCP6_OPTION_MAX_SIZE 312
15 #define HTTP_BOOT_DHCP6_PACKET_MAX_SIZE 1472
16 #define HTTP_BOOT_IP6_ROUTE_TABLE_TIMEOUT 10
17 #define HTTP_BOOT_DEFAULT_HOPLIMIT 64
18 #define HTTP_BOOT_DEFAULT_LIFETIME 50000
20 #define HTTP_BOOT_DHCP6_ENTERPRISE_NUM 343 // TODO: IANA TBD: temporarily using Intel's
21 #define HTTP_BOOT_DHCP6_MAX_BOOT_FILE_SIZE 65535 // It's a limitation of bit length, 65535*512 bytes.
23 #define HTTP_BOOT_DHCP6_IDX_IA_NA 0
24 #define HTTP_BOOT_DHCP6_IDX_BOOT_FILE_URL 1
25 #define HTTP_BOOT_DHCP6_IDX_BOOT_FILE_PARAM 2
26 #define HTTP_BOOT_DHCP6_IDX_VENDOR_CLASS 3
27 #define HTTP_BOOT_DHCP6_IDX_DNS_SERVER 4
28 #define HTTP_BOOT_DHCP6_IDX_MAX 5
33 } HTTP_BOOT_DHCP6_OPTION_ORO
;
39 } HTTP_BOOT_DHCP6_OPTION_UNDI
;
43 } HTTP_BOOT_DHCP6_OPTION_ARCH
;
46 UINT8 ClassIdentifier
[11];
47 UINT8 ArchitecturePrefix
[5];
48 UINT8 ArchitectureType
[5];
50 UINT8 InterfaceName
[4];
59 HTTP_BOOT_CLASS_ID ClassId
;
60 } HTTP_BOOT_DHCP6_OPTION_VENDOR_CLASS
;
65 HTTP_BOOT_DHCP6_OPTION_ORO
*Oro
;
66 HTTP_BOOT_DHCP6_OPTION_UNDI
*Undi
;
67 HTTP_BOOT_DHCP6_OPTION_ARCH
*Arch
;
68 HTTP_BOOT_DHCP6_OPTION_VENDOR_CLASS
*VendorClass
;
69 } HTTP_BOOT_DHCP6_OPTION_ENTRY
;
71 #define HTTP_CACHED_DHCP6_PACKET_MAX_SIZE (OFFSET_OF (EFI_DHCP6_PACKET, Dhcp6) + HTTP_BOOT_DHCP6_PACKET_MAX_SIZE)
74 EFI_DHCP6_PACKET Offer
;
76 UINT8 Buffer
[HTTP_CACHED_DHCP6_PACKET_MAX_SIZE
];
77 } HTTP_BOOT_DHCP6_PACKET
;
80 HTTP_BOOT_DHCP6_PACKET Packet
;
81 HTTP_BOOT_OFFER_TYPE OfferType
;
82 EFI_DHCP6_PACKET_OPTION
*OptList
[HTTP_BOOT_DHCP6_IDX_MAX
];
84 } HTTP_BOOT_DHCP6_PACKET_CACHE
;
86 #define GET_NEXT_DHCP6_OPTION(Opt) \
87 (EFI_DHCP6_PACKET_OPTION *) ((UINT8 *) (Opt) + \
88 sizeof (EFI_DHCP6_PACKET_OPTION) + (NTOHS ((Opt)->OpLen)) - 1)
90 #define GET_DHCP6_OPTION_SIZE(Pkt) \
91 ((Pkt)->Length - sizeof (EFI_DHCP6_HEADER))
94 Start the S.A.R.R DHCPv6 process to acquire the IPv6 address and other Http boot information.
96 @param[in] Private Pointer to HTTP_BOOT private data.
98 @retval EFI_SUCCESS The S.A.R.R process successfully finished.
99 @retval Others Failed to finish the S.A.R.R process.
104 IN HTTP_BOOT_PRIVATE_DATA
*Private
108 Set the IP6 policy to Automatic.
110 @param[in] Private The pointer to HTTP_BOOT_PRIVATE_DATA.
112 @retval EFI_SUCCESS Switch the IP policy successfully.
113 @retval Others Unexpected error happened.
117 HttpBootSetIp6Policy (
118 IN HTTP_BOOT_PRIVATE_DATA
*Private
122 This function will register the default DNS addresses to the network device.
124 @param[in] Private The pointer to HTTP_BOOT_PRIVATE_DATA.
125 @param[in] DataLength Size of the buffer pointed to by DnsServerData in bytes.
126 @param[in] DnsServerData Point a list of DNS server address in an array
127 of EFI_IPv6_ADDRESS instances.
129 @retval EFI_SUCCESS The DNS configuration has been configured successfully.
130 @retval Others Failed to configure the address.
135 IN HTTP_BOOT_PRIVATE_DATA
*Private
,
137 IN VOID
*DnsServerData
141 This function will register the IPv6 gateway address to the network device.
143 @param[in] Private The pointer to HTTP_BOOT_PRIVATE_DATA.
145 @retval EFI_SUCCESS The new IP configuration has been configured successfully.
146 @retval Others Failed to configure the address.
150 HttpBootSetIp6Gateway (
151 IN HTTP_BOOT_PRIVATE_DATA
*Private
155 This function will register the station IP address.
157 @param[in] Private The pointer to HTTP_BOOT_PRIVATE_DATA.
159 @retval EFI_SUCCESS The new IP address has been configured successfully.
160 @retval Others Failed to configure the address.
164 HttpBootSetIp6Address (
165 IN HTTP_BOOT_PRIVATE_DATA
*Private