+/**\r
+ Display host addresses, route table, DNS addresses and gateway addresses in\r
+ "IPv6 Current Setting" page.\r
+\r
+ @param[in] Instance The IP6 config instance data.\r
+\r
+ @retval EFI_SUCCESS The operation finished successfully.\r
+ @retval Others Other errors as indicated.\r
+\r
+**/\r
+EFI_STATUS\r
+Ip6GetCurrentSetting (\r
+ IN IP6_CONFIG_INSTANCE *Instance\r
+ )\r
+{\r
+ EFI_IP6_CONFIG_PROTOCOL *Ip6Config;\r
+ EFI_HII_HANDLE HiiHandle;\r
+ EFI_IP6_CONFIG_INTERFACE_INFO *Data;\r
+ UINTN DataSize;\r
+ EFI_STATUS Status;\r
+ CHAR16 PortString[ADDRESS_STR_MAX_SIZE];\r
+ EFI_IP6_CONFIG_INTERFACE_INFO *IfInfo;\r
+ \r
+\r
+ Ip6Config = &Instance->Ip6Config;\r
+ HiiHandle = Instance->CallbackInfo.RegisteredHandle;\r
+ Data = NULL;\r
+\r
+ //\r
+ // Get current interface info.\r
+ //\r
+ Status = Ip6ConfigNvGetData (\r
+ Ip6Config,\r
+ Ip6ConfigDataTypeInterfaceInfo,\r
+ &DataSize,\r
+ (VOID **) &Data\r
+ );\r
+ if (EFI_ERROR (Status)) {\r
+ return Status;\r
+ }\r
+\r
+ //\r
+ // Generate dynamic text opcode for host address and draw it.\r
+ //\r
+ IfInfo = (EFI_IP6_CONFIG_INTERFACE_INFO *) Data;\r
+ Status = Ip6ConvertAddressListToString (\r
+ PortString,\r
+ HiiHandle,\r
+ Ip6ConfigNvHostAddress,\r
+ IfInfo->AddressInfo,\r
+ IfInfo->AddressInfoCount\r
+ );\r
+ if (EFI_ERROR (Status)) {\r
+ FreePool (Data);\r
+ return Status;\r
+ }\r
+\r
+ //\r
+ // Generate the dynamic text opcode for route table and draw it.\r
+ //\r
+ Status = Ip6ConvertAddressListToString (\r
+ PortString,\r
+ HiiHandle,\r
+ Ip6ConfigNvRouteTable,\r
+ IfInfo->RouteTable,\r
+ IfInfo->RouteCount\r
+ );\r
+ if (EFI_ERROR (Status)) {\r
+ FreePool (Data);\r
+ return Status;\r
+ }\r
+\r
+ //\r
+ // Get DNS server list.\r
+ //\r
+ FreePool (Data);\r
+ DataSize = 0;\r
+ Data = NULL;\r
+ Status = Ip6ConfigNvGetData (\r
+ Ip6Config,\r
+ Ip6ConfigDataTypeDnsServer,\r
+ &DataSize,\r
+ (VOID **) &Data\r
+ );\r
+ if (EFI_ERROR (Status) && (Status != EFI_NOT_FOUND)) {\r
+ if (Data != NULL) {\r
+ FreePool (Data);\r
+ }\r
+ return Status;\r
+ }\r
+\r
+ if (DataSize > 0) {\r
+ //\r
+ // Generate the dynamic text opcode for DNS server and draw it.\r
+ //\r
+ Status = Ip6ConvertAddressListToString (\r
+ PortString,\r
+ HiiHandle,\r
+ Ip6ConfigNvDnsAddress,\r
+ Data,\r
+ DataSize / sizeof (EFI_IPv6_ADDRESS)\r
+ );\r
+ if (EFI_ERROR (Status)) {\r
+ FreePool (Data);\r
+ return Status;\r
+ }\r
+ }\r
+\r
+ //\r
+ // Get gateway adderss list.\r
+ //\r
+ if (Data != NULL) {\r
+ FreePool (Data);\r
+ }\r
+\r
+ DataSize = 0;\r
+ Data = NULL;\r
+ Status = Ip6ConfigNvGetData (\r
+ Ip6Config,\r
+ Ip6ConfigDataTypeGateway,\r
+ &DataSize,\r
+ (VOID **) &Data\r
+ );\r
+ if (EFI_ERROR (Status) && (Status != EFI_NOT_FOUND)) {\r
+ if (Data != NULL) {\r
+ FreePool (Data);\r
+ }\r
+ return Status;\r
+ }\r
+\r
+ if (DataSize > 0) {\r
+ //\r
+ // Generate the dynamic text opcode for gateway and draw it.\r
+ //\r
+ Status = Ip6ConvertAddressListToString (\r
+ PortString,\r
+ HiiHandle,\r
+ Ip6ConfigNvGatewayAddress,\r
+ Data,\r
+ DataSize / sizeof (EFI_IPv6_ADDRESS)\r
+ );\r
+ if (EFI_ERROR (Status)) {\r
+ FreePool (Data);\r
+ return Status;\r
+ }\r
+ }\r
+\r
+ if (Data != NULL) {\r
+ FreePool (Data);\r
+ }\r
+\r
+ return EFI_SUCCESS;\r
+}\r
+\r