aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJulien Viard de Galbert <jviarddegalbert@online.net>2017-05-31 06:50:53 -0400
committerGene Cumm <gene.cumm@gmail.com>2017-05-31 06:50:58 -0400
commit828a75d005daf87707e883f04909282efb3e764a (patch)
tree995a82d146953bdda7f184170e18fd59538687d3
parent8a0d48421413f20dc400c58c7e4e7b9ec8d9bc78 (diff)
downloadsyslinux-828a75d005daf87707e883f04909282efb3e764a.tar.gz
syslinux-828a75d005daf87707e883f04909282efb3e764a.tar.xz
syslinux-828a75d005daf87707e883f04909282efb3e764a.zip
efi/udp: Add retry disabling UseDefaultAddress
Add retry disabling UseDefaultAddress in core_udp_connect() and core_udp_sendto() Signed-off-by: Julien Viard de Galbert <jviarddegalbert@online.net> Signed-off-by: Gene Cumm <gene.cumm@gmail.com>
-rw-r--r--efi/udp.c12
1 files changed, 12 insertions, 0 deletions
diff --git a/efi/udp.c b/efi/udp.c
index b0f13ad4..1b787e5b 100644
--- a/efi/udp.c
+++ b/efi/udp.c
@@ -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;