[gPXE-devel] gPXE 1.0.0 eats DNS packets
Stefan Hajnoczi
stefanha at gmail.com
Mon Jun 21 06:08:49 EDT 2010
On Mon, Jun 21, 2010 at 9:58 AM, Stefan Hajnoczi <stefanha at gmail.com> wrote:
> On Mon, Jun 21, 2010 at 9:33 AM, Stefan Hajnoczi <stefanha at gmail.com> wrote:
>> On Mon, Jun 21, 2010 at 8:38 AM, H. Peter Anvin <hpa at 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
More information about the gPXE-devel
mailing list