From 691557281f6dfa5d5e614dc3e9cd69823839ae12 Mon Sep 17 00:00:00 2001 From: Michael Brown Date: Wed, 9 Aug 2006 01:57:02 +0000 Subject: [PATCH] Add a couple of small but vital parts to PXENV_UDP_WRITE. --- src/interface/pxe/pxe_udp.c | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/src/interface/pxe/pxe_udp.c b/src/interface/pxe/pxe_udp.c index 8dced9e8..5f94e8c0 100644 --- a/src/interface/pxe/pxe_udp.c +++ b/src/interface/pxe/pxe_udp.c @@ -285,6 +285,7 @@ PXENV_EXIT_t pxenv_udp_write ( struct s_PXENV_UDP_WRITE *pxenv_udp_write ) { struct sockaddr_in sin; struct sockaddr_tcpip st; } dest; + int rc; DBG ( "PXENV_UDP_WRITE" ); @@ -299,6 +300,7 @@ PXENV_EXIT_t pxenv_udp_write ( struct s_PXENV_UDP_WRITE *pxenv_udp_write ) { dest.sin.sin_family = AF_INET; dest.sin.sin_addr.s_addr = pxenv_udp_write->ip; dest.sin.sin_port = pxenv_udp_write->dst_port; + udp_connect ( &pxe_udp.udp, &dest.st ); /* Set local (source) port. PXE spec says source port is 2069 * if not specified. Really, this ought to be set at UDP open @@ -312,9 +314,18 @@ PXENV_EXIT_t pxenv_udp_write ( struct s_PXENV_UDP_WRITE *pxenv_udp_write ) { * confident of being able to do our own routing. We should * probably allow for multiple gateways. */ + + DBG ( " %04x:%04x+%x %d->%s:%d", pxenv_udp_write->buffer.segment, + pxenv_udp_write->buffer.offset, pxenv_udp_write->buffer_size, + ntohs ( pxenv_udp_write->src_port ), + inet_ntoa ( dest.sin.sin_addr ), + ntohs ( pxenv_udp_write->dst_port ) ); /* Transmit packet */ - if ( udp_senddata ( &pxe_udp.udp ) != 0 ) { + pxe_udp.pxenv_udp_write = pxenv_udp_write; + rc = udp_senddata ( &pxe_udp.udp ); + pxe_udp.pxenv_udp_write = NULL; + if ( rc != 0 ) { pxenv_udp_write->Status = PXENV_STATUS_UNDI_TRANSMIT_ERROR; return PXENV_EXIT_FAILURE; }