]> git.proxmox.com Git - mirror_edk2.git/blobdiff - NetworkPkg/HttpBootDxe/HttpBootDhcp6.h
NetworkPkg:Enable Http Boot over Ipv6 stack
[mirror_edk2.git] / NetworkPkg / HttpBootDxe / HttpBootDhcp6.h
diff --git a/NetworkPkg/HttpBootDxe/HttpBootDhcp6.h b/NetworkPkg/HttpBootDxe/HttpBootDhcp6.h
new file mode 100644 (file)
index 0000000..59ca19e
--- /dev/null
@@ -0,0 +1,198 @@
+/** @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