]> git.proxmox.com Git - mirror_edk2.git/blobdiff - NetworkPkg/UefiPxeBcDxe/PxeBcDhcp6.h
Add NetworkPkg (P.UDK2010.UP3.Network.P1)
[mirror_edk2.git] / NetworkPkg / UefiPxeBcDxe / PxeBcDhcp6.h
diff --git a/NetworkPkg/UefiPxeBcDxe/PxeBcDhcp6.h b/NetworkPkg/UefiPxeBcDxe/PxeBcDhcp6.h
new file mode 100644 (file)
index 0000000..0eccacb
--- /dev/null
@@ -0,0 +1,277 @@
+/** @file\r
+  Functions declaration related with DHCPv6 for UefiPxeBc Driver.\r
+\r
+  Copyright (c) 2009 - 2010, Intel Corporation. All rights reserved.<BR>\r
+\r
+  This program and the accompanying materials\r
+  are licensed and made available under the terms and conditions of the BSD License\r
+  which accompanies this distribution.  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
+#ifndef __EFI_PXEBC_DHCP6_H__\r
+#define __EFI_PXEBC_DHCP6_H__\r
+\r
+#define PXEBC_DHCP6_OPTION_MAX_NUM        16\r
+#define PXEBC_DHCP6_OPTION_MAX_SIZE       312\r
+#define PXEBC_DHCP6_PACKET_MAX_SIZE       1472\r
+#define PXEBC_DHCP6_MAPPING_TIMEOUT       50000000   // 5 seconds, unit is 10nanosecond.\r
+#define PXEBC_IP6_POLICY_MAX              0xff\r
+\r
+#define PXEBC_DHCP6_S_PORT                547\r
+#define PXEBC_DHCP6_C_PORT                546\r
+\r
+#define PXEBC_DHCP6_OPT_CLIENT_ID         1\r
+#define PXEBC_DHCP6_OPT_SERVER_ID         2\r
+#define PXEBC_DHCP6_OPT_IA_NA             3\r
+#define PXEBC_DHCP6_OPT_IA_TA             4\r
+#define PXEBC_DHCP6_OPT_IAADDR            5\r
+#define PXEBC_DHCP6_OPT_ORO               6\r
+#define PXEBC_DHCP6_OPT_PREFERENCE        7\r
+#define PXEBC_DHCP6_OPT_ELAPSED_TIME      8\r
+#define PXEBC_DHCP6_OPT_REPLAY_MSG        9\r
+#define PXEBC_DHCP6_OPT_AUTH              11\r
+#define PXEBC_DHCP6_OPT_UNICAST           12\r
+#define PXEBC_DHCP6_OPT_STATUS_CODE       13\r
+#define PXEBC_DHCP6_OPT_RAPID_COMMIT      14\r
+#define PXEBC_DHCP6_OPT_USER_CLASS        15\r
+#define PXEBC_DHCP6_OPT_VENDOR_CLASS      16\r
+#define PXEBC_DHCP6_OPT_VENDOR_OPTS       17\r
+#define PXEBC_DHCP6_OPT_INTERFACE_ID      18\r
+#define PXEBC_DHCP6_OPT_RECONFIG_MSG      19\r
+#define PXEBC_DHCP6_OPT_RECONFIG_ACCEPT   20\r
+#define PXEBC_DHCP6_OPT_BOOT_FILE_URL     59    // Assigned by IANA, RFC 5970\r
+#define PXEBC_DHCP6_OPT_BOOT_FILE_PARAM   60    // Assigned by IANA, RFC 5970\r
+#define PXEBC_DHCP6_OPT_ARCH              61    // Assigned by IANA, RFC 5970\r
+#define PXEBC_DHCP6_OPT_UNDI              62    // Assigned by IANA, RFC 5970\r
+#define PXEBC_DHCP6_ENTERPRISE_NUM        343   // TODO: IANA TBD: temporarily using Intel's\r
+#define PXEBC_DHCP6_MAX_BOOT_FILE_SIZE    65535 //   It's a limitation of bit length, 65535*512 bytes.\r
+\r
+\r
+#define PXEBC_DHCP6_IDX_IA_NA             0\r
+#define PXEBC_DHCP6_IDX_BOOT_FILE_URL     1\r
+#define PXEBC_DHCP6_IDX_BOOT_FILE_PARAM   2\r
+#define PXEBC_DHCP6_IDX_VENDOR_CLASS      3\r
+#define PXEBC_DHCP6_IDX_MAX               4\r
+\r
+#define PXEBC_DHCP6_BOOT_FILE_URL_PREFIX  "tftp://"\r
+#define PXEBC_TFTP_URL_SEPARATOR          '/'\r
+#define PXEBC_ADDR_START_DELIMITER        '['\r
+#define PXEBC_ADDR_END_DELIMITER          ']'\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
+#define IS_PROXY_OFFER(Type) \\r
+  ((Type) == PxeOfferTypeProxyBinl || \\r
+   (Type) == PxeOfferTypeProxyPxe10 || \\r
+   (Type) == PxeOfferTypeProxyWfm11a)\r
+\r
+\r
+#pragma pack(1)\r
+typedef struct {\r
+  UINT16 OpCode[256];\r
+} PXEBC_DHCP6_OPTION_ORO;\r
+\r
+typedef struct {\r
+  UINT8 Type;\r
+  UINT8 MajorVer;\r
+  UINT8 MinorVer;\r
+  UINT8 Reserved;\r
+} PXEBC_DHCP6_OPTION_UNDI;\r
+\r
+typedef struct {\r
+  UINT16 Type;\r
+} PXEBC_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
+} PXEBC_CLASS_ID;\r
+\r
+typedef struct {\r
+  UINT32         Vendor;\r
+  UINT16         ClassLen;\r
+  PXEBC_CLASS_ID ClassId;\r
+} PXEBC_DHCP6_OPTION_VENDOR_CLASS;\r
+\r
+#pragma pack()\r
+\r
+typedef union {\r
+  PXEBC_DHCP6_OPTION_ORO            *Oro;\r
+  PXEBC_DHCP6_OPTION_UNDI           *Undi;\r
+  PXEBC_DHCP6_OPTION_ARCH           *Arch;\r
+  PXEBC_DHCP6_OPTION_VENDOR_CLASS   *VendorClass;\r
+} PXEBC_DHCP6_OPTION_ENTRY;\r
+\r
+typedef struct {\r
+  LIST_ENTRY              Link;\r
+  EFI_DHCP6_PACKET_OPTION *Option;\r
+  UINT8                   Precedence;\r
+} PXEBC_DHCP6_OPTION_NODE;\r
+\r
+typedef union {\r
+  EFI_DHCP6_PACKET        Offer;\r
+  EFI_DHCP6_PACKET        Ack;\r
+  UINT8                   Buffer[PXEBC_DHCP6_PACKET_MAX_SIZE];\r
+} PXEBC_DHCP6_PACKET;\r
+\r
+typedef struct {\r
+  PXEBC_DHCP6_PACKET      Packet;\r
+  PXEBC_OFFER_TYPE        OfferType;\r
+  EFI_DHCP6_PACKET_OPTION *OptList[PXEBC_DHCP6_IDX_MAX];\r
+} PXEBC_DHCP6_PACKET_CACHE;\r
+\r
+\r
+/**\r
+  Free all the nodes in the boot file list.\r
+\r
+  @param[in]  Head            The pointer to the head of the list.\r
+\r
+**/\r
+VOID\r
+PxeBcFreeBootFileOption (\r
+  IN LIST_ENTRY               *Head\r
+  );\r
+\r
+\r
+/**\r
+  Parse the Boot File URL option.\r
+\r
+  @param[out]     FileName     The pointer to the boot file name.\r
+  @param[in, out] SrvAddr      The pointer to the boot server address.\r
+  @param[in]      BootFile     The pointer to the boot file URL option data.\r
+  @param[in]      Length       Length of the boot file URL option data.\r
+\r
+  @retval EFI_ABORTED     User canceled the operation.\r
+  @retval EFI_SUCCESS     Selected the boot menu successfully.\r
+  @retval EFI_NOT_READY   Read the input key from the keybroad has not finish.\r
+\r
+**/\r
+EFI_STATUS\r
+PxeBcExtractBootFileUrl (\r
+     OUT UINT8               **FileName,\r
+  IN OUT EFI_IPv6_ADDRESS    *SrvAddr,\r
+  IN     CHAR8               *BootFile,\r
+  IN     UINT16              Length\r
+  );\r
+\r
+\r
+/**\r
+  Parse the Boot File Parameter option.\r
+\r
+  @param[in]  BootFilePara      The pointer to the boot file parameter option data.\r
+  @param[out] BootFileSize      The pointer to the parsed boot file size.\r
+\r
+  @retval EFI_SUCCESS     Successfully obtained the boot file size from parameter option.\r
+  @retval EFI_NOT_FOUND   Failed to extract the boot file size from parameter option.\r
+\r
+**/\r
+EFI_STATUS\r
+PxeBcExtractBootFileParam (\r
+  IN  CHAR8                  *BootFilePara,\r
+  OUT UINT16                 *BootFileSize\r
+  );\r
+\r
+\r
+/**\r
+  Parse the cached DHCPv6 packet, including all the options.\r
+\r
+  @param[in]  Cache6           The pointer to a cached DHCPv6 packet.\r
+\r
+  @retval     EFI_SUCCESS      Parsed the DHCPv6 packet successfully.\r
+  @retval     EFI_DEVICE_ERROR Failed to parse and invalid packet.\r
+\r
+**/\r
+EFI_STATUS\r
+PxeBcParseDhcp6Packet (\r
+  IN PXEBC_DHCP6_PACKET_CACHE  *Cache6\r
+  );\r
+\r
+\r
+/**\r
+  Register the ready address by Ip6Config protocol.\r
+\r
+  @param[in]  Private             The pointer to the PxeBc private data.\r
+  @param[in]  Address             The pointer to the ready address.\r
+\r
+  @retval     EFI_SUCCESS         Registered the address succesfully.\r
+  @retval     Others              Failed to register the address.\r
+\r
+**/\r
+EFI_STATUS\r
+PxeBcRegisterIp6Address (\r
+  IN PXEBC_PRIVATE_DATA            *Private,\r
+  IN EFI_IPv6_ADDRESS              *Address\r
+  );\r
+\r
+\r
+/**\r
+  Unregister the address by Ip6Config protocol.\r
+\r
+  @param[in]  Private             The pointer to the PxeBc private data.\r
+\r
+**/\r
+VOID\r
+PxeBcUnregisterIp6Address (\r
+  IN PXEBC_PRIVATE_DATA            *Private\r
+  );\r
+\r
+\r
+/**\r
+  Build and send out the request packet for the bootfile, and parse the reply.\r
+\r
+  @param[in]  Private               The pointer to the PxeBc private data.\r
+  @param[in]  Type                  PxeBc option boot item type.\r
+  @param[in]  Layer                 The pointer to the option boot item layer.\r
+  @param[in]  UseBis                Use BIS or not.\r
+  @param[in]  DestIp                The pointer to the server address.\r
+\r
+  @retval     EFI_SUCCESS           Successfully discovered theboot file.\r
+  @retval     EFI_OUT_OF_RESOURCES  Failed to allocate resource.\r
+  @retval     EFI_NOT_FOUND         Can't get the PXE reply packet.\r
+  @retval     Others                Failed to discover boot file.\r
+\r
+**/\r
+EFI_STATUS\r
+PxeBcDhcp6Discover (\r
+  IN  PXEBC_PRIVATE_DATA            *Private,\r
+  IN  UINT16                        Type,\r
+  IN  UINT16                        *Layer,\r
+  IN  BOOLEAN                       UseBis,\r
+  IN  EFI_IP_ADDRESS                *DestIp\r
+  );\r
+\r
+\r
+/**\r
+  Start the DHCPv6 S.A.R.R. process to acquire the IPv6 address and other PXE boot information.\r
+\r
+  @param[in]  Private           The pointer to the PxeBc private data.\r
+  @param[in]  Dhcp6             The pointer to EFI_DHCP6_PROTOCOL.\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
+PxeBcDhcp6Sarr (\r
+  IN PXEBC_PRIVATE_DATA            *Private,\r
+  IN EFI_DHCP6_PROTOCOL            *Dhcp6\r
+  );\r
+\r
+#endif\r
+\r