]> git.proxmox.com Git - mirror_edk2.git/blobdiff - NetworkPkg/UefiPxeBcDxe/PxeBcDhcp6.h
NetworkPkg/UefiPxeBcDxe: Configure the ARP Instance/RouteTable with new address
[mirror_edk2.git] / NetworkPkg / UefiPxeBcDxe / PxeBcDhcp6.h
index bb8ad65b6300e2788dd11a789f515df1eee9b9a6..39efcfaa778830c13a0c686c768d341baa9b64a6 100644 (file)
@@ -1,7 +1,7 @@
 /** @file\r
   Functions declaration related with DHCPv6 for UefiPxeBc Driver.\r
 \r
 /** @file\r
   Functions declaration related with DHCPv6 for UefiPxeBc Driver.\r
 \r
-  Copyright (c) 2009 - 2012, Intel Corporation. All rights reserved.<BR>\r
+  Copyright (c) 2009 - 2016, 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
 \r
   This program and the accompanying materials\r
   are licensed and made available under the terms and conditions of the BSD License\r
 \r
 #define PXEBC_DHCP6_OPTION_MAX_NUM        16\r
 #define PXEBC_DHCP6_OPTION_MAX_SIZE       312\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_PACKET_MAX_SIZE       (sizeof (EFI_PXE_BASE_CODE_PACKET))\r
 #define PXEBC_IP6_POLICY_MAX              0xff\r
 #define PXEBC_IP6_POLICY_MAX              0xff\r
+#define PXEBC_IP6_ROUTE_TABLE_TIMEOUT     10\r
 \r
 #define PXEBC_DHCP6_S_PORT                547\r
 #define PXEBC_DHCP6_C_PORT                546\r
 \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
 #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
@@ -55,7 +33,8 @@
 #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_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
+#define PXEBC_DHCP6_IDX_DNS_SERVER        4\r
+#define PXEBC_DHCP6_IDX_MAX               5\r
 \r
 #define PXEBC_DHCP6_BOOT_FILE_URL_PREFIX  "tftp://"\r
 #define PXEBC_TFTP_URL_SEPARATOR          '/'\r
 \r
 #define PXEBC_DHCP6_BOOT_FILE_URL_PREFIX  "tftp://"\r
 #define PXEBC_TFTP_URL_SEPARATOR          '/'\r
@@ -122,10 +101,12 @@ typedef struct {
   UINT8                   Precedence;\r
 } PXEBC_DHCP6_OPTION_NODE;\r
 \r
   UINT8                   Precedence;\r
 } PXEBC_DHCP6_OPTION_NODE;\r
 \r
+#define PXEBC_CACHED_DHCP6_PACKET_MAX_SIZE  (OFFSET_OF (EFI_DHCP6_PACKET, Dhcp6) + PXEBC_DHCP6_PACKET_MAX_SIZE)\r
+\r
 typedef union {\r
   EFI_DHCP6_PACKET        Offer;\r
   EFI_DHCP6_PACKET        Ack;\r
 typedef union {\r
   EFI_DHCP6_PACKET        Offer;\r
   EFI_DHCP6_PACKET        Ack;\r
-  UINT8                   Buffer[PXEBC_DHCP6_PACKET_MAX_SIZE];\r
+  UINT8                   Buffer[PXEBC_CACHED_DHCP6_PACKET_MAX_SIZE];\r
 } PXEBC_DHCP6_PACKET;\r
 \r
 typedef struct {\r
 } PXEBC_DHCP6_PACKET;\r
 \r
 typedef struct {\r
@@ -150,6 +131,7 @@ PxeBcFreeBootFileOption (
 /**\r
   Parse the Boot File URL option.\r
 \r
 /**\r
   Parse the Boot File URL option.\r
 \r
+  @param[in]      Private             Pointer to PxeBc private data.\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[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
@@ -162,6 +144,7 @@ PxeBcFreeBootFileOption (
 **/\r
 EFI_STATUS\r
 PxeBcExtractBootFileUrl (\r
 **/\r
 EFI_STATUS\r
 PxeBcExtractBootFileUrl (\r
+  IN PXEBC_PRIVATE_DATA      *Private,\r
      OUT UINT8               **FileName,\r
   IN OUT EFI_IPv6_ADDRESS    *SrvAddr,\r
   IN     CHAR8               *BootFile,\r
      OUT UINT8               **FileName,\r
   IN OUT EFI_IPv6_ADDRESS    *SrvAddr,\r
   IN     CHAR8               *BootFile,\r
@@ -254,6 +237,33 @@ PxeBcDhcp6Discover (
   IN  EFI_IP_ADDRESS                *DestIp\r
   );\r
 \r
   IN  EFI_IP_ADDRESS                *DestIp\r
   );\r
 \r
+/**\r
+  Set the IP6 policy to Automatic.\r
+\r
+  @param[in]  Private             The pointer to PXEBC_PRIVATE_DATA.\r
+\r
+  @retval     EFI_SUCCESS         Switch the IP policy succesfully.\r
+  @retval     Others              Unexpect error happened.\r
+\r
+**/\r
+EFI_STATUS\r
+PxeBcSetIp6Policy (\r
+  IN PXEBC_PRIVATE_DATA            *Private\r
+  );\r
+\r
+/**\r
+  This function will register the station IP address and flush IP instance to start using the new IP address.\r
+  \r
+  @param[in]  Private             The pointer to PXEBC_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
+PxeBcSetIp6Address (\r
+  IN  PXEBC_PRIVATE_DATA              *Private\r
+  );\r
 \r
 /**\r
   Start the DHCPv6 S.A.R.R. process to acquire the IPv6 address and other PXE boot information.\r
 \r
 /**\r
   Start the DHCPv6 S.A.R.R. process to acquire the IPv6 address and other PXE boot information.\r