[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