[syslinux] [PATCH 2/4] efi/udp: Add retry disabling UseDefaultAddress in core_udp_connect and core_udp_sendto

Julien Viard de Galbert jviarddegalbert at online.net
Wed May 31 00:56:36 PDT 2017


Signed-off-by: Julien Viard de Galbert <jviarddegalbert at online.net>
---
 efi/udp.c | 14 +++++++++++++-
 1 file changed, 13 insertions(+), 1 deletion(-)

diff --git a/efi/udp.c b/efi/udp.c
index b0f13ad..8f4d7dc 100644
--- a/efi/udp.c
+++ b/efi/udp.c
@@ -52,7 +52,7 @@ EFI_STATUS core_udp_configure(EFI_UDP4 *udp, EFI_UDP4_CONFIG_DATA *udata,
 	    }
 	} else {
 	    if (status != EFI_SUCCESS) {
-		Print(L"%s: udp->Configure() unsuccessful (%d)", f, status);
+		Print(L"%s: udp->Configure() unsuccessful (%d)\n", f, status);
 		if (!efi_net_def_addr && (status == EFI_INVALID_PARAMETER))
 		    efi_net_def_addr = 2;
 	    }
@@ -158,6 +158,7 @@ void core_udp_connect(struct pxe_pvt_inode *socket, uint32_t ip,
     /* Re-use the existing local port number */
     udata.StationPort = socket->net.efi.localport;
 
+retry:
     if (efi_net_def_addr) {
 	udata.UseDefaultAddress = TRUE;
     } else {
@@ -170,6 +171,11 @@ void core_udp_connect(struct pxe_pvt_inode *socket, uint32_t ip,
     udata.TimeToLive = 64;
 
     status = core_udp_configure(udp, &udata, L"core_udp_connect");
+    if (efi_net_def_addr && (status == EFI_NO_MAPPING)) {
+	efi_net_def_addr = 0;
+	Print(L"disable UseDefaultAddress\n");
+	goto retry;
+    }
     if (status != EFI_SUCCESS) {
 	Print(L"Failed to configure UDP: %d\n", status);
 	return;
@@ -392,6 +398,7 @@ void core_udp_sendto(struct pxe_pvt_inode *socket, const void *data,
     /* Re-use the existing local port number */
     udata.StationPort = socket->net.efi.localport;
 
+retry:
     if (efi_net_def_addr) {
 	udata.UseDefaultAddress = TRUE;
     } else {
@@ -404,6 +411,11 @@ void core_udp_sendto(struct pxe_pvt_inode *socket, const void *data,
     udata.TimeToLive = 64;
 
     status = core_udp_configure(udp, &udata, L"core_udp_sendto");
+    if (efi_net_def_addr && (status == EFI_NO_MAPPING)) {
+	efi_net_def_addr = 0;
+	Print(L"disable UseDefaultAddress\n");
+	goto retry;
+    }
     if (status != EFI_SUCCESS)
 	goto bail;
 
-- 
2.9.3



More information about the Syslinux mailing list