--- /dev/null
+/** @file\r
+ Functions declaration related with DHCPv6 for HTTP boot driver.\r
+\r
+Copyright (c) 2015, Intel Corporation. All rights reserved.<BR>\r
+This program and the accompanying materials are licensed and made available under \r
+the terms and conditions of the BSD License that accompanies this distribution. \r
+The full text of the license may be found at\r
+http://opensource.org/licenses/bsd-license.php. \r
+ \r
+THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, \r
+WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
+\r
+**/\r
+\r
+\r
+#ifndef __EFI_HTTP_BOOT_DHCP6_H__\r
+#define __EFI_HTTP_BOOT_DHCP6_H__\r
+\r
+#define HTTP_BOOT_OFFER_MAX_NUM 16\r
+#define HTTP_BOOT_DHCP6_OPTION_MAX_NUM 16\r
+#define HTTP_BOOT_DHCP6_OPTION_MAX_SIZE 312\r
+#define HTTP_BOOT_DHCP6_PACKET_MAX_SIZE 1472\r
+#define HTTP_BOOT_IP6_ROUTE_TABLE_TIMEOUT 10\r
+#define HTTP_BOOT_DEFAULT_HOPLIMIT 64\r
+#define HTTP_BOOT_DEFAULT_LIFETIME 50000\r
+\r
+\r
+#define HTTP_BOOT_DHCP6_OPT_CLIENT_ID 1\r
+#define HTTP_BOOT_DHCP6_OPT_SERVER_ID 2\r
+#define HTTP_BOOT_DHCP6_OPT_IA_NA 3\r
+#define HTTP_BOOT_DHCP6_OPT_IA_TA 4\r
+#define HTTP_BOOT_DHCP6_OPT_IAADDR 5\r
+#define HTTP_BOOT_DHCP6_OPT_ORO 6\r
+#define HTTP_BOOT_DHCP6_OPT_PREFERENCE 7\r
+#define HTTP_BOOT_DHCP6_OPT_ELAPSED_TIME 8\r
+#define HTTP_BOOT_DHCP6_OPT_REPLAY_MSG 9\r
+#define HTTP_BOOT_DHCP6_OPT_AUTH 11\r
+#define HTTP_BOOT_DHCP6_OPT_UNICAST 12\r
+#define HTTP_BOOT_DHCP6_OPT_STATUS_CODE 13\r
+#define HTTP_BOOT_DHCP6_OPT_RAPID_COMMIT 14\r
+#define HTTP_BOOT_DHCP6_OPT_USER_CLASS 15\r
+#define HTTP_BOOT_DHCP6_OPT_VENDOR_CLASS 16\r
+#define HTTP_BOOT_DHCP6_OPT_VENDOR_OPTS 17\r
+#define HTTP_BOOT_DHCP6_OPT_INTERFACE_ID 18\r
+#define HTTP_BOOT_DHCP6_OPT_RECONFIG_MSG 19\r
+#define HTTP_BOOT_DHCP6_OPT_RECONFIG_ACCEPT 20\r
+#define HTTP_BOOT_DHCP6_OPT_DNS_SERVERS 23\r
+#define HTTP_BOOT_DHCP6_OPT_BOOT_FILE_URL 59 // Assigned by IANA, RFC 5970\r
+#define HTTP_BOOT_DHCP6_OPT_BOOT_FILE_PARAM 60 // Assigned by IANA, RFC 5970\r
+#define HTTP_BOOT_DHCP6_OPT_ARCH 61 // Assigned by IANA, RFC 5970\r
+#define HTTP_BOOT_DHCP6_OPT_UNDI 62 // Assigned by IANA, RFC 5970\r
+#define HTTP_BOOT_DHCP6_ENTERPRISE_NUM 343 // TODO: IANA TBD: temporarily using Intel's\r
+#define HTTP_BOOT_DHCP6_MAX_BOOT_FILE_SIZE 65535 // It's a limitation of bit length, 65535*512 bytes.\r
+\r
+#define HTTP_BOOT_DHCP6_IDX_IA_NA 0\r
+#define HTTP_BOOT_DHCP6_IDX_BOOT_FILE_URL 1\r
+#define HTTP_BOOT_DHCP6_IDX_BOOT_FILE_PARAM 2\r
+#define HTTP_BOOT_DHCP6_IDX_VENDOR_CLASS 3\r
+#define HTTP_BOOT_DHCP6_IDX_DNS_SERVER 4\r
+#define HTTP_BOOT_DHCP6_IDX_MAX 5\r
+\r
+#pragma pack(1)\r
+typedef struct {\r
+ UINT16 OpCode[256];\r
+} HTTP_BOOT_DHCP6_OPTION_ORO;\r
+\r
+typedef struct {\r
+ UINT8 Type;\r
+ UINT8 MajorVer;\r
+ UINT8 MinorVer;\r
+} HTTP_BOOT_DHCP6_OPTION_UNDI;\r
+\r
+typedef struct {\r
+ UINT16 Type;\r
+} HTTP_BOOT_DHCP6_OPTION_ARCH;\r
+\r
+typedef struct {\r
+ UINT8 ClassIdentifier[10];\r
+ UINT8 ArchitecturePrefix[5];\r
+ UINT8 ArchitectureType[5];\r
+ UINT8 Lit3[1];\r
+ UINT8 InterfaceName[4];\r
+ UINT8 Lit4[1];\r
+ UINT8 UndiMajor[3];\r
+ UINT8 UndiMinor[3];\r
+} HTTP_BOOT_CLASS_ID;\r
+\r
+typedef struct {\r
+ UINT32 Vendor;\r
+ UINT16 ClassLen;\r
+ HTTP_BOOT_CLASS_ID ClassId;\r
+} HTTP_BOOT_DHCP6_OPTION_VENDOR_CLASS;\r
+\r
+#pragma pack()\r
+\r
+typedef union {\r
+ HTTP_BOOT_DHCP6_OPTION_ORO *Oro;\r
+ HTTP_BOOT_DHCP6_OPTION_UNDI *Undi;\r
+ HTTP_BOOT_DHCP6_OPTION_ARCH *Arch;\r
+ HTTP_BOOT_DHCP6_OPTION_VENDOR_CLASS *VendorClass;\r
+} HTTP_BOOT_DHCP6_OPTION_ENTRY;\r
+\r
+typedef union {\r
+ EFI_DHCP6_PACKET Offer;\r
+ EFI_DHCP6_PACKET Ack;\r
+ UINT8 Buffer[HTTP_BOOT_DHCP6_PACKET_MAX_SIZE];\r
+} HTTP_BOOT_DHCP6_PACKET;\r
+\r
+typedef struct {\r
+ HTTP_BOOT_DHCP6_PACKET Packet;\r
+ HTTP_BOOT_OFFER_TYPE OfferType;\r
+ EFI_DHCP6_PACKET_OPTION *OptList[HTTP_BOOT_DHCP6_IDX_MAX];\r
+ VOID *UriParser;\r
+} HTTP_BOOT_DHCP6_PACKET_CACHE;\r
+\r
+#define GET_NEXT_DHCP6_OPTION(Opt) \\r
+ (EFI_DHCP6_PACKET_OPTION *) ((UINT8 *) (Opt) + \\r
+ sizeof (EFI_DHCP6_PACKET_OPTION) + (NTOHS ((Opt)->OpLen)) - 1)\r
+\r
+#define GET_DHCP6_OPTION_SIZE(Pkt) \\r
+ ((Pkt)->Length - sizeof (EFI_DHCP6_HEADER))\r
+\r
+/**\r
+ Start the S.A.R.R DHCPv6 process to acquire the IPv6 address and other Http boot information.\r
+\r
+ @param[in] Private Pointer to HTTP_BOOT private data.\r
+\r
+ @retval EFI_SUCCESS The S.A.R.R process successfully finished.\r
+ @retval Others Failed to finish the S.A.R.R process.\r
+\r
+**/\r
+EFI_STATUS\r
+HttpBootDhcp6Sarr (\r
+ IN HTTP_BOOT_PRIVATE_DATA *Private\r
+ );\r
+\r
+/**\r
+ Set the IP6 policy to Automatic.\r
+\r
+ @param[in] Private The pointer to HTTP_BOOT_PRIVATE_DATA.\r
+\r
+ @retval EFI_SUCCESS Switch the IP policy succesfully.\r
+ @retval Others Unexpect error happened.\r
+\r
+**/\r
+EFI_STATUS\r
+HttpBootSetIp6Policy (\r
+ IN HTTP_BOOT_PRIVATE_DATA *Private\r
+ );\r
+\r
+/**\r
+ This function will register the default DNS addresses to the network device.\r
+ \r
+ @param[in] Private The pointer to HTTP_BOOT_PRIVATE_DATA.\r
+ @param[in] DataLength Size of the buffer pointed to by DnsServerData in bytes.\r
+ @param[in] DnsServerData Point a list of DNS server address in an array\r
+ of EFI_IPv6_ADDRESS instances.\r
+\r
+ @retval EFI_SUCCESS The DNS configuration has been configured successfully.\r
+ @retval Others Failed to configure the address.\r
+\r
+**/\r
+EFI_STATUS\r
+HttpBootSetIp6Dns (\r
+ IN HTTP_BOOT_PRIVATE_DATA *Private,\r
+ IN UINTN DataLength,\r
+ IN VOID *DnsServerData\r
+ );\r
+\r
+/**\r
+ This function will register the IPv6 gateway address to the network device.\r
+ \r
+ @param[in] Private The pointer to HTTP_BOOT_PRIVATE_DATA.\r
+\r
+ @retval EFI_SUCCESS The new IP configuration has been configured successfully.\r
+ @retval Others Failed to configure the address.\r
+\r
+**/\r
+EFI_STATUS\r
+HttpBootSetIp6Gateway (\r
+ IN HTTP_BOOT_PRIVATE_DATA *Private\r
+ );\r
+\r
+/**\r
+ This function will register the station IP address.\r
+ \r
+ @param[in] Private The pointer to HTTP_BOOT_PRIVATE_DATA.\r
+\r
+ @retval EFI_SUCCESS The new IP address has been configured successfully.\r
+ @retval Others Failed to configure the address.\r
+\r
+**/\r
+EFI_STATUS\r
+HttpBootSetIp6Address (\r
+ IN HTTP_BOOT_PRIVATE_DATA *Private\r
+ );\r
+\r
+#endif\r