LIST_ENTRY *Entry;\r
LIST_ENTRY *Next;\r
\r
+ CHAR8 *QueryName;\r
+ \r
DNS4_TOKEN_ENTRY *TokenEntry;\r
NET_BUF *Packet;\r
\r
\r
Status = EFI_SUCCESS;\r
Item = NULL;\r
+ QueryName = NULL;\r
TokenEntry = NULL;\r
Packet = NULL;\r
\r
TokenEntry->QueryHostName = HostName;\r
TokenEntry->Token = Token;\r
\r
+ //\r
+ // Construct QName.\r
+ //\r
+ QueryName = DnsFillinQNameForQueryIp (TokenEntry->QueryHostName);\r
+ if (QueryName == NULL) {\r
+ Status = EFI_OUT_OF_RESOURCES;\r
+ goto ON_EXIT;\r
+ }\r
+ \r
//\r
// Construct DNS Query Packet.\r
//\r
- Status = ConstructDNSQueryIp (Instance, TokenEntry->QueryHostName, DNS_TYPE_A, &Packet);\r
+ Status = ConstructDNSQuery (Instance, QueryName, DNS_TYPE_A, DNS_CLASS_INET, &Packet);\r
if (EFI_ERROR (Status)) {\r
if (TokenEntry != NULL) {\r
FreePool (TokenEntry);\r
goto ON_EXIT;\r
}\r
\r
+ ASSERT (Packet != NULL);\r
+\r
//\r
// Save the token into the Dns4TxTokens map.\r
//\r
}\r
\r
ON_EXIT:\r
+ if (QueryName != NULL) {\r
+ FreePool (QueryName);\r
+ }\r
+ \r
gBS->RestoreTPL (OldTpl);\r
return Status;\r
}\r
IN EFI_DNS4_COMPLETION_TOKEN *Token\r
)\r
{\r
- return EFI_UNSUPPORTED;\r
+ EFI_STATUS Status;\r
+ \r
+ DNS_INSTANCE *Instance;\r
+ \r
+ EFI_DNS4_CONFIG_DATA *ConfigData;\r
+ \r
+ DNS4_TOKEN_ENTRY *TokenEntry;\r
+ NET_BUF *Packet;\r
+ \r
+ EFI_TPL OldTpl;\r
+ \r
+ Status = EFI_SUCCESS;\r
+ TokenEntry = NULL;\r
+ Packet = NULL;\r
+ \r
+ //\r
+ // Validate the parameters\r
+ //\r
+ if ((This == NULL) || (QName == NULL) || Token == NULL) {\r
+ return EFI_INVALID_PARAMETER;\r
+ }\r
+ \r
+ OldTpl = gBS->RaiseTPL (TPL_CALLBACK);\r
+ \r
+ Instance = DNS_INSTANCE_FROM_THIS_PROTOCOL4 (This);\r
+ \r
+ ConfigData = &(Instance->Dns4CfgData);\r
+ \r
+ Instance->MaxRetry = ConfigData->RetryCount;\r
+ \r
+ Token->Status = EFI_NOT_READY;\r
+ Token->RetryCount = 0;\r
+ Token->RetryInterval = ConfigData->RetryInterval;\r
+\r
+ if (Instance->State != DNS_STATE_CONFIGED) {\r
+ Status = EFI_NOT_STARTED;\r
+ goto ON_EXIT;\r
+ }\r
+\r
+ //\r
+ // Check the MaxRetry and RetryInterval values.\r
+ //\r
+ if (Instance->MaxRetry == 0) {\r
+ Instance->MaxRetry = DNS_DEFAULT_RETRY;\r
+ }\r
+\r
+ if (Token->RetryInterval < DNS_DEFAULT_TIMEOUT) {\r
+ Token->RetryInterval = DNS_DEFAULT_TIMEOUT;\r
+ }\r
+\r
+ //\r
+ // Construct DNS TokenEntry.\r
+ //\r
+ TokenEntry = AllocateZeroPool (sizeof(DNS4_TOKEN_ENTRY));\r
+ if (TokenEntry == NULL) {\r
+ Status = EFI_OUT_OF_RESOURCES;\r
+ goto ON_EXIT;\r
+ }\r
+ \r
+ TokenEntry->PacketToLive = Token->RetryInterval;\r
+ TokenEntry->GeneralLookUp = TRUE;\r
+ TokenEntry->Token = Token;\r
+\r
+ //\r
+ // Construct DNS Query Packet.\r
+ //\r
+ Status = ConstructDNSQuery (Instance, QName, QType, QClass, &Packet);\r
+ if (EFI_ERROR (Status)) {\r
+ if (TokenEntry != NULL) {\r
+ FreePool (TokenEntry);\r
+ }\r
+ \r
+ goto ON_EXIT;\r
+ }\r
+\r
+ ASSERT (Packet != NULL);\r
+\r
+ //\r
+ // Save the token into the Dns4TxTokens map.\r
+ //\r
+ Status = NetMapInsertTail (&Instance->Dns4TxTokens, TokenEntry, Packet);\r
+ if (EFI_ERROR (Status)) {\r
+ if (TokenEntry != NULL) {\r
+ FreePool (TokenEntry);\r
+ }\r
+ \r
+ NetbufFree (Packet);\r
+ \r
+ goto ON_EXIT;\r
+ }\r
+ \r
+ //\r
+ // Dns Query Ip\r
+ //\r
+ Status = DoDnsQuery (Instance, Packet);\r
+ if (EFI_ERROR (Status)) {\r
+ if (TokenEntry != NULL) {\r
+ FreePool (TokenEntry);\r
+ }\r
+ \r
+ NetbufFree (Packet);\r
+ }\r
+ \r
+ON_EXIT:\r
+ gBS->RestoreTPL (OldTpl);\r
+ return Status;\r
}\r
\r
/**\r
//\r
// Configure the parameters for new operation.\r
//\r
- if (!NetIp6IsValidUnicast (&DnsConfigData->StationIp)) {\r
+ if (!NetIp6IsUnspecifiedAddr (&DnsConfigData->StationIp) && !NetIp6IsValidUnicast (&DnsConfigData->StationIp)) {\r
Status = EFI_INVALID_PARAMETER;\r
goto ON_EXIT;\r
}\r
LIST_ENTRY *Entry;\r
LIST_ENTRY *Next;\r
\r
+ CHAR8 *QueryName;\r
+ \r
DNS6_TOKEN_ENTRY *TokenEntry;\r
NET_BUF *Packet;\r
\r
\r
Status = EFI_SUCCESS;\r
Item = NULL;\r
+ QueryName = NULL;\r
TokenEntry = NULL;\r
Packet = NULL;\r
\r
TokenEntry->QueryHostName = HostName;\r
TokenEntry->Token = Token;\r
\r
+\r
+ //\r
+ // Construct QName.\r
+ //\r
+ QueryName = DnsFillinQNameForQueryIp (TokenEntry->QueryHostName);\r
+ if (QueryName == NULL) {\r
+ Status = EFI_OUT_OF_RESOURCES;\r
+ goto ON_EXIT;\r
+ }\r
+ \r
//\r
// Construct DNS Query Packet.\r
//\r
- Status = ConstructDNSQueryIp (Instance, TokenEntry->QueryHostName, DNS_TYPE_AAAA, &Packet);\r
+ Status = ConstructDNSQuery (Instance, QueryName, DNS_TYPE_AAAA, DNS_CLASS_INET, &Packet);\r
if (EFI_ERROR (Status)) {\r
if (TokenEntry != NULL) {\r
FreePool (TokenEntry);\r
goto ON_EXIT;\r
}\r
\r
+ ASSERT (Packet != NULL);\r
+\r
//\r
// Save the token into the Dns6TxTokens map.\r
//\r
}\r
\r
ON_EXIT:\r
+ if (QueryName != NULL) {\r
+ FreePool (QueryName);\r
+ }\r
+ \r
gBS->RestoreTPL (OldTpl);\r
return Status;\r
}\r
IN EFI_DNS6_COMPLETION_TOKEN *Token\r
)\r
{\r
- return EFI_UNSUPPORTED;\r
+ EFI_STATUS Status;\r
+ \r
+ DNS_INSTANCE *Instance;\r
+ \r
+ EFI_DNS6_CONFIG_DATA *ConfigData;\r
+ \r
+ DNS6_TOKEN_ENTRY *TokenEntry;\r
+ NET_BUF *Packet;\r
+ \r
+ EFI_TPL OldTpl;\r
+ \r
+ Status = EFI_SUCCESS;\r
+ TokenEntry = NULL;\r
+ Packet = NULL;\r
+ \r
+ //\r
+ // Validate the parameters\r
+ //\r
+ if ((This == NULL) || (QName == NULL) || Token == NULL) {\r
+ return EFI_INVALID_PARAMETER;\r
+ }\r
+ \r
+ OldTpl = gBS->RaiseTPL (TPL_CALLBACK);\r
+ \r
+ Instance = DNS_INSTANCE_FROM_THIS_PROTOCOL6 (This);\r
+ \r
+ ConfigData = &(Instance->Dns6CfgData);\r
+ \r
+ Instance->MaxRetry = ConfigData->RetryCount;\r
+ \r
+ Token->Status = EFI_NOT_READY;\r
+ Token->RetryCount = 0;\r
+ Token->RetryInterval = ConfigData->RetryInterval;\r
+\r
+ if (Instance->State != DNS_STATE_CONFIGED) {\r
+ Status = EFI_NOT_STARTED;\r
+ goto ON_EXIT;\r
+ }\r
+\r
+ //\r
+ // Check the MaxRetry and RetryInterval values.\r
+ //\r
+ if (Instance->MaxRetry == 0) {\r
+ Instance->MaxRetry = DNS_DEFAULT_RETRY;\r
+ }\r
+\r
+ if (Token->RetryInterval < DNS_DEFAULT_TIMEOUT) {\r
+ Token->RetryInterval = DNS_DEFAULT_TIMEOUT;\r
+ }\r
+\r
+ //\r
+ // Construct DNS TokenEntry.\r
+ //\r
+ TokenEntry = AllocateZeroPool (sizeof(DNS6_TOKEN_ENTRY));\r
+ if (TokenEntry == NULL) {\r
+ Status = EFI_OUT_OF_RESOURCES;\r
+ goto ON_EXIT;\r
+ }\r
+ \r
+ TokenEntry->PacketToLive = Token->RetryInterval;\r
+ TokenEntry->GeneralLookUp = TRUE;\r
+ TokenEntry->Token = Token;\r
+\r
+ //\r
+ // Construct DNS Query Packet.\r
+ //\r
+ Status = ConstructDNSQuery (Instance, QName, QType, QClass, &Packet);\r
+ if (EFI_ERROR (Status)) {\r
+ if (TokenEntry != NULL) {\r
+ FreePool (TokenEntry);\r
+ }\r
+ \r
+ goto ON_EXIT;\r
+ }\r
+\r
+ ASSERT (Packet != NULL);\r
+\r
+ //\r
+ // Save the token into the Dns6TxTokens map.\r
+ //\r
+ Status = NetMapInsertTail (&Instance->Dns6TxTokens, TokenEntry, Packet);\r
+ if (EFI_ERROR (Status)) {\r
+ if (TokenEntry != NULL) {\r
+ FreePool (TokenEntry);\r
+ }\r
+ \r
+ NetbufFree (Packet);\r
+ \r
+ goto ON_EXIT;\r
+ }\r
+ \r
+ //\r
+ // Dns Query Ip\r
+ //\r
+ Status = DoDnsQuery (Instance, Packet);\r
+ if (EFI_ERROR (Status)) {\r
+ if (TokenEntry != NULL) {\r
+ FreePool (TokenEntry);\r
+ }\r
+ \r
+ NetbufFree (Packet);\r
+ }\r
+ \r
+ON_EXIT:\r
+ gBS->RestoreTPL (OldTpl);\r
+ return Status;\r
}\r
\r
/**\r