summaryrefslogtreecommitdiffstats
path: root/NetworkPkg/DnsDxe
diff options
context:
space:
mode:
authorJiaxin Wu <jiaxin.wu@intel.com>2017-11-16 14:28:33 +0800
committerJiaxin Wu <jiaxin.wu@intel.com>2017-12-12 19:08:48 +0800
commitcd2a6240714749be3cb788a915684533540913ca (patch)
treee1e1c0cb6495a15bd0d324c46b884d5fed757293 /NetworkPkg/DnsDxe
parent1b59de8444ac70ec1d4876ec8d6e7d957d5b6ed1 (diff)
downloadedk2-cd2a6240714749be3cb788a915684533540913ca.tar.gz
edk2-cd2a6240714749be3cb788a915684533540913ca.tar.bz2
edk2-cd2a6240714749be3cb788a915684533540913ca.zip
NetworkPkg/DnsDxe: Update RetryCount/RetryInterval to comply with UEFI spec.
According to UEFI spec: "Retry number if no response received after RetryInterval. If zero, use the parameter configured through Dns.Configure() interface." "Minimum interval of retry is 2 second. If the retry interval is less than 2 second, then use the 2 second. If zero, use the parameter configured through Dns.Configure() interface." For both DNS.HostNameToIp and DNS.GeneralLookUp, the value of RetryCount / RetryInterval need to be updated to comply with UEFI spec. Cc: Ye Ting <ting.ye@intel.com> Cc: Fu Siyuan <siyuan.fu@intel.com> Cc: Wang Fan <fan.wang@intel.com> Contributed-under: TianoCore Contribution Agreement 1.0 Signed-off-by: Wu Jiaxin <jiaxin.wu@intel.com> Reviewed-by: Fu Siyuan <siyuan.fu@intel.com>
Diffstat (limited to 'NetworkPkg/DnsDxe')
-rw-r--r--NetworkPkg/DnsDxe/DnsDriver.h4
-rw-r--r--NetworkPkg/DnsDxe/DnsImpl.c4
-rw-r--r--NetworkPkg/DnsDxe/DnsImpl.h5
-rw-r--r--NetworkPkg/DnsDxe/DnsProtocol.c102
4 files changed, 67 insertions, 48 deletions
diff --git a/NetworkPkg/DnsDxe/DnsDriver.h b/NetworkPkg/DnsDxe/DnsDriver.h
index 6632bb2198..49f6a1d8a3 100644
--- a/NetworkPkg/DnsDxe/DnsDriver.h
+++ b/NetworkPkg/DnsDxe/DnsDriver.h
@@ -1,7 +1,7 @@
/** @file
The header files of the driver binding and service binding protocol for DnsDxe driver.
-Copyright (c) 2015 - 2016, Intel Corporation. All rights reserved.<BR>
+Copyright (c) 2015 - 2017, Intel Corporation. All rights reserved.<BR>
This program and the accompanying materials
are licensed and made available under the terms and conditions of the BSD License
which accompanies this distribution. The full text of the license may be found at
@@ -89,8 +89,6 @@ struct _DNS_INSTANCE {
NET_MAP Dns4TxTokens;
NET_MAP Dns6TxTokens;
- UINT32 MaxRetry;
-
UDP_IO *UdpIo;
};
diff --git a/NetworkPkg/DnsDxe/DnsImpl.c b/NetworkPkg/DnsDxe/DnsImpl.c
index ea3d27da52..7c236a0015 100644
--- a/NetworkPkg/DnsDxe/DnsImpl.c
+++ b/NetworkPkg/DnsDxe/DnsImpl.c
@@ -1948,7 +1948,7 @@ DnsOnTimerRetransmit (
// Retransmit the packet if haven't reach the maxmium retry count,
// otherwise exit the transfer.
//
- if (++Dns4TokenEntry->Token->RetryCount < Instance->MaxRetry) {
+ if (++Dns4TokenEntry->RetryCounting <= Dns4TokenEntry->Token->RetryCount) {
DnsRetransmit (Instance, (NET_BUF *)ItemNetMap->Value);
EntryNetMap = EntryNetMap->ForwardLink;
} else {
@@ -1992,7 +1992,7 @@ DnsOnTimerRetransmit (
// Retransmit the packet if haven't reach the maxmium retry count,
// otherwise exit the transfer.
//
- if (++Dns6TokenEntry->Token->RetryCount < Instance->MaxRetry) {
+ if (++Dns6TokenEntry->RetryCounting <= Dns6TokenEntry->Token->RetryCount) {
DnsRetransmit (Instance, (NET_BUF *) ItemNetMap->Value);
EntryNetMap = EntryNetMap->ForwardLink;
} else {
diff --git a/NetworkPkg/DnsDxe/DnsImpl.h b/NetworkPkg/DnsDxe/DnsImpl.h
index 5fa7f244c2..3c6296cb65 100644
--- a/NetworkPkg/DnsDxe/DnsImpl.h
+++ b/NetworkPkg/DnsDxe/DnsImpl.h
@@ -1,7 +1,7 @@
/** @file
DnsDxe support functions implementation.
-Copyright (c) 2015 - 2016, Intel Corporation. All rights reserved.<BR>
+Copyright (c) 2015 - 2017, Intel Corporation. All rights reserved.<BR>
This program and the accompanying materials
are licensed and made available under the terms and conditions of the BSD License
which accompanies this distribution. The full text of the license may be found at
@@ -86,7 +86,6 @@ extern EFI_DNS6_PROTOCOL mDns6Protocol;
#define DNS_STATE_DESTROY 2
#define DNS_DEFAULT_TIMEOUT 2
-#define DNS_DEFAULT_RETRY 3
#define DNS_TIME_TO_GETMAP 5
@@ -115,6 +114,7 @@ typedef struct {
} DNS6_SERVER_IP;
typedef struct {
+ UINT32 RetryCounting;
UINT32 PacketToLive;
CHAR16 *QueryHostName;
EFI_IPv4_ADDRESS QueryIpAddress;
@@ -123,6 +123,7 @@ typedef struct {
} DNS4_TOKEN_ENTRY;
typedef struct {
+ UINT32 RetryCounting;
UINT32 PacketToLive;
CHAR16 *QueryHostName;
EFI_IPv6_ADDRESS QueryIpAddress;
diff --git a/NetworkPkg/DnsDxe/DnsProtocol.c b/NetworkPkg/DnsDxe/DnsProtocol.c
index 7435607028..df737dcbeb 100644
--- a/NetworkPkg/DnsDxe/DnsProtocol.c
+++ b/NetworkPkg/DnsDxe/DnsProtocol.c
@@ -223,8 +223,6 @@ Dns4Configure (
Dns4InstanceCancelToken(Instance, NULL);
}
- Instance->MaxRetry = 0;
-
if (Instance->UdpIo != NULL){
UdpIoCleanIo (Instance->UdpIo);
}
@@ -377,24 +375,30 @@ Dns4HostNameToIp (
ConfigData = &(Instance->Dns4CfgData);
- Instance->MaxRetry = ConfigData->RetryCount;
-
- Token->Status = EFI_NOT_READY;
- Token->RetryCount = 0;
- Token->RetryInterval = ConfigData->RetryInterval;
-
if (Instance->State != DNS_STATE_CONFIGED) {
Status = EFI_NOT_STARTED;
goto ON_EXIT;
}
+ Token->Status = EFI_NOT_READY;
+
//
- // Check the MaxRetry and RetryInterval values.
+ // If zero, use the parameter configured through Dns.Configure() interface.
//
- if (Instance->MaxRetry == 0) {
- Instance->MaxRetry = DNS_DEFAULT_RETRY;
+ if (Token->RetryCount == 0) {
+ Token->RetryCount = ConfigData->RetryCount;
}
+ //
+ // If zero, use the parameter configured through Dns.Configure() interface.
+ //
+ if (Token->RetryInterval == 0) {
+ Token->RetryInterval = ConfigData->RetryInterval;
+ }
+
+ //
+ // Minimum interval of retry is 2 second. If the retry interval is less than 2 second, then use the 2 second.
+ //
if (Token->RetryInterval < DNS_DEFAULT_TIMEOUT) {
Token->RetryInterval = DNS_DEFAULT_TIMEOUT;
}
@@ -620,25 +624,31 @@ Dns4GeneralLookUp (
Instance = DNS_INSTANCE_FROM_THIS_PROTOCOL4 (This);
ConfigData = &(Instance->Dns4CfgData);
-
- Instance->MaxRetry = ConfigData->RetryCount;
-
- Token->Status = EFI_NOT_READY;
- Token->RetryCount = 0;
- Token->RetryInterval = ConfigData->RetryInterval;
if (Instance->State != DNS_STATE_CONFIGED) {
Status = EFI_NOT_STARTED;
goto ON_EXIT;
}
+ Token->Status = EFI_NOT_READY;
+
+ //
+ // If zero, use the parameter configured through Dns.Configure() interface.
//
- // Check the MaxRetry and RetryInterval values.
+ if (Token->RetryCount == 0) {
+ Token->RetryCount = ConfigData->RetryCount;
+ }
+
+ //
+ // If zero, use the parameter configured through Dns.Configure() interface.
//
- if (Instance->MaxRetry == 0) {
- Instance->MaxRetry = DNS_DEFAULT_RETRY;
+ if (Token->RetryInterval == 0) {
+ Token->RetryInterval = ConfigData->RetryInterval;
}
+ //
+ // Minimum interval of retry is 2 second. If the retry interval is less than 2 second, then use the 2 second.
+ //
if (Token->RetryInterval < DNS_DEFAULT_TIMEOUT) {
Token->RetryInterval = DNS_DEFAULT_TIMEOUT;
}
@@ -1052,8 +1062,6 @@ Dns6Configure (
Dns6InstanceCancelToken(Instance, NULL);
}
- Instance->MaxRetry = 0;
-
if (Instance->UdpIo != NULL){
UdpIoCleanIo (Instance->UdpIo);
}
@@ -1203,28 +1211,34 @@ Dns6HostNameToIp (
Instance = DNS_INSTANCE_FROM_THIS_PROTOCOL6 (This);
ConfigData = &(Instance->Dns6CfgData);
-
- Instance->MaxRetry = ConfigData->RetryCount;
-
- Token->Status = EFI_NOT_READY;
- Token->RetryCount = 0;
- Token->RetryInterval = ConfigData->RetryInterval;
if (Instance->State != DNS_STATE_CONFIGED) {
Status = EFI_NOT_STARTED;
goto ON_EXIT;
}
+ Token->Status = EFI_NOT_READY;
+
//
- // Check the MaxRetry and RetryInterval values.
+ // If zero, use the parameter configured through Dns.Configure() interface.
//
- if (Instance->MaxRetry == 0) {
- Instance->MaxRetry = DNS_DEFAULT_RETRY;
+ if (Token->RetryCount == 0) {
+ Token->RetryCount = ConfigData->RetryCount;
}
+ //
+ // If zero, use the parameter configured through Dns.Configure() interface.
+ //
+ if (Token->RetryInterval == 0) {
+ Token->RetryInterval = ConfigData->RetryInterval;
+ }
+
+ //
+ // Minimum interval of retry is 2 second. If the retry interval is less than 2 second, then use the 2 second.
+ //
if (Token->RetryInterval < DNS_DEFAULT_TIMEOUT) {
Token->RetryInterval = DNS_DEFAULT_TIMEOUT;
- }
+ }
//
// Check cache
@@ -1451,25 +1465,31 @@ Dns6GeneralLookUp (
Instance = DNS_INSTANCE_FROM_THIS_PROTOCOL6 (This);
ConfigData = &(Instance->Dns6CfgData);
-
- Instance->MaxRetry = ConfigData->RetryCount;
-
- Token->Status = EFI_NOT_READY;
- Token->RetryCount = 0;
- Token->RetryInterval = ConfigData->RetryInterval;
if (Instance->State != DNS_STATE_CONFIGED) {
Status = EFI_NOT_STARTED;
goto ON_EXIT;
}
+ Token->Status = EFI_NOT_READY;
+
//
- // Check the MaxRetry and RetryInterval values.
+ // If zero, use the parameter configured through Dns.Configure() interface.
//
- if (Instance->MaxRetry == 0) {
- Instance->MaxRetry = DNS_DEFAULT_RETRY;
+ if (Token->RetryCount == 0) {
+ Token->RetryCount = ConfigData->RetryCount;
+ }
+
+ //
+ // If zero, use the parameter configured through Dns.Configure() interface.
+ //
+ if (Token->RetryInterval == 0) {
+ Token->RetryInterval = ConfigData->RetryInterval;
}
+ //
+ // Minimum interval of retry is 2 second. If the retry interval is less than 2 second, then use the 2 second.
+ //
if (Token->RetryInterval < DNS_DEFAULT_TIMEOUT) {
Token->RetryInterval = DNS_DEFAULT_TIMEOUT;
}