On Mon, Jun 21, 2010 at 9:58 AM, Stefan Hajnoczi <stefa...@gmail.com> wrote: > On Mon, Jun 21, 2010 at 9:33 AM, Stefan Hajnoczi <stefa...@gmail.com> wrote: >> On Mon, Jun 21, 2010 at 8:38 AM, H. Peter Anvin <h...@zytor.com> wrote: >>> I just discovered that gPXE 1.0.0 eats DNS packets sent via the UDP >>> interface. This is somewhat puzzling to me, since the DNS packet >>> doesn't even make it out the wire (it would have made more sense if the >>> reply had been received, but a packet sniffer shows nothing on egress.) >>> Removing gPXE (undionly.kkpxe) and running on the raw vendor stack >>> eliminates this problem. >>> >>> This is threatening to become a showstopper for Syslinux 4.00, so I >>> would really appreciate assistance in tracking this down.
Building gpxelinux.0 with DEBUG=udp gives more information: UDP 0x1edd4 TX 49164->53 len 38 UDP 0x1edd4 could not transmit packet: File not found (0x2d01603b) 10:09 < stefanha> gpxebot: error 0x2d01603b 10:09 < gpxebot> pxenv_status=PXENV_STATUS_TFTP_FILE_NOT_FOUND uniq=0 errfile=ERRFILE_arp posix_errno=ENOENT The UDP packet is destined for an IP that is not in the ARP cache. gPXE does not queue UDP TX packets, it will drop the packet and silently ignore this return this error when no link layer destination is known yet (udp_xfer_deliver_iob ignores the error). I imagine the reasoning behind ignoring the error is that application protocols using UDP must deal with retransmit anyway, which leads to the next point: I can't see PXELINUX retransmitting the DNS UDP packet. The code in core/fs/pxe/dnsresolv.c has timeout logic but it isn't kicking in. Any idea what is happening on the SYSLINUX side? Stefan _______________________________________________ gPXE-devel mailing list gPXE-devel@etherboot.org http://etherboot.org/mailman/listinfo/gpxe-devel