summaryrefslogtreecommitdiff
path: root/NetworkPkg/UefiPxeBcDxe
diff options
context:
space:
mode:
authorsfu5 <sfu5@6f19259b-4bc3-4df7-8a09-765794883524>2011-12-16 09:00:47 +0000
committersfu5 <sfu5@6f19259b-4bc3-4df7-8a09-765794883524>2011-12-16 09:00:47 +0000
commit357af28525c3a5be6ca0a201f2533dc0a372dbfb (patch)
treeea50fbf3c8807ddf36c9a69791bcfe32ed151c1a /NetworkPkg/UefiPxeBcDxe
parent9508d0fa4fb2cd2ff03604bc3b1b1abf8f69ccb6 (diff)
downloadedk2-platforms-357af28525c3a5be6ca0a201f2533dc0a372dbfb.tar.xz
Reconfigure the UdpRead instance if an error occurred in Dhcp, Discover and Mtftp process.
Signed-off-by: sfu5 Reviewed-by: qianouyang Reviewed-by: tye git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@12884 6f19259b-4bc3-4df7-8a09-765794883524
Diffstat (limited to 'NetworkPkg/UefiPxeBcDxe')
-rw-r--r--NetworkPkg/UefiPxeBcDxe/PxeBcDhcp6.c12
-rw-r--r--NetworkPkg/UefiPxeBcDxe/PxeBcImpl.c38
2 files changed, 29 insertions, 21 deletions
diff --git a/NetworkPkg/UefiPxeBcDxe/PxeBcDhcp6.c b/NetworkPkg/UefiPxeBcDxe/PxeBcDhcp6.c
index 3e59f3f233..8715675472 100644
--- a/NetworkPkg/UefiPxeBcDxe/PxeBcDhcp6.c
+++ b/NetworkPkg/UefiPxeBcDxe/PxeBcDhcp6.c
@@ -1626,6 +1626,14 @@ PxeBcDhcp6Discover (
}
ReadSize = (UINTN) Reply->Size;
+ //
+ // Start Udp6Read instance
+ //
+ Status = Private->Udp6Read->Configure (Private->Udp6Read, &Private->Udp6CfgData);
+ if (EFI_ERROR (Status)) {
+ return Status;
+ }
+
Status = PxeBc->UdpRead (
PxeBc,
OpFlags,
@@ -1638,6 +1646,10 @@ PxeBcDhcp6Discover (
&ReadSize,
(VOID *) &Reply->Dhcp6
);
+ //
+ // Stop Udp6Read instance
+ //
+ Private->Udp6Read->Configure (Private->Udp6Read, NULL);
if (EFI_ERROR (Status)) {
return Status;
}
diff --git a/NetworkPkg/UefiPxeBcDxe/PxeBcImpl.c b/NetworkPkg/UefiPxeBcDxe/PxeBcImpl.c
index 00f1e4d395..67abd48f4c 100644
--- a/NetworkPkg/UefiPxeBcDxe/PxeBcImpl.c
+++ b/NetworkPkg/UefiPxeBcDxe/PxeBcImpl.c
@@ -430,13 +430,8 @@ EfiPxeBcDhcp (
Status = PxeBcDhcp6Sarr (Private, Private->Dhcp6);
if (EFI_ERROR (Status)) {
- return Status;
+ goto ON_EXIT;
}
-
- //
- // Configure Udp6Read instance
- //
- Status = Private->Udp6Read->Configure (Private->Udp6Read, &Private->Udp6CfgData);
} else {
//
@@ -450,15 +445,16 @@ EfiPxeBcDhcp (
Status = PxeBcDhcp4Dora (Private, Private->Dhcp4);
if (EFI_ERROR (Status)) {
- return Status;
+ goto ON_EXIT;
}
-
- //
- // Configure Udp4Read instance
- //
- Status = Private->Udp4Read->Configure (Private->Udp4Read, &Private->Udp4CfgData);
}
-
+
+ON_EXIT:
+ if (Mode->UsingIpv6) {
+ Private->Udp6Read->Configure (Private->Udp6Read, &Private->Udp6CfgData);
+ } else {
+ Private->Udp4Read->Configure (Private->Udp4Read, &Private->Udp4CfgData);
+ }
//
// Dhcp(), Discover(), and Mtftp() set the IP filter, and return with the IP
// receive filter list emptied and the filter set to EFI_PXE_BASE_CODE_IP_FILTER_STATION_IP.
@@ -692,7 +688,7 @@ EfiPxeBcDiscover (
}
if (EFI_ERROR (Status)) {
- return Status;
+ goto ON_EXIT;
} else {
//
// Parse the cached PXE reply packet, and store it into mode data if valid.
@@ -725,9 +721,9 @@ EfiPxeBcDiscover (
ON_EXIT:
if (Mode->UsingIpv6) {
- Status = Private->Udp6Read->Configure (Private->Udp6Read, &Private->Udp6CfgData);
+ Private->Udp6Read->Configure (Private->Udp6Read, &Private->Udp6CfgData);
} else {
- Status = Private->Udp4Read->Configure (Private->Udp4Read, &Private->Udp4CfgData);
+ Private->Udp4Read->Configure (Private->Udp4Read, &Private->Udp4CfgData);
}
//
@@ -962,15 +958,15 @@ EfiPxeBcMtftp (
}
if (EFI_ERROR (Status)) {
- return Status;
+ goto ON_EXIT;
}
-
+
+ON_EXIT:
if (Mode->UsingIpv6) {
- Status = Private->Udp6Read->Configure (Private->Udp6Read, &Private->Udp6CfgData);
+ Private->Udp6Read->Configure (Private->Udp6Read, &Private->Udp6CfgData);
} else {
- Status = Private->Udp4Read->Configure (Private->Udp4Read, &Private->Udp4CfgData);
+ Private->Udp4Read->Configure (Private->Udp4Read, &Private->Udp4CfgData);
}
-
//
// Dhcp(), Discover(), and Mtftp() set the IP filter, and return with the IP
// receive filter list emptied and the filter set to EFI_PXE_BASE_CODE_IP_FILTER_STATION_IP.