[syslinux] syslinux6 EFI fail to boot via pxe

Matt Fleming
2013-06-25T12:31:44Z

On Tue, 25 Jun, at 01:51:52PM, Michael Szerencsits
wrote:
> Hi Matt,
>
> I think I've found the problem.

Thanks for doing this analysis.

> In /core/fs/pxe/tftp.c in function tftp_open:
> First you do a core_udp_connect to port 69 (TFTP) at line 264. -> source
port = x
> After that you sent the filerequest at line 265
> You receive the fileinfo and also the used port (y) for the transfer in
line 273
> Than you perform a core_udp_disconnect at line 286
> Now you perform a new core_udp_connect to port y which set the source port
to x + 1 at line 287
>
> for example:
>                Client   |   Server
> TFTP get file    2900   >       69
> Response tsize   2900   <     7012
> ACK blk 0        2901   >     7012  <-- wrong source port
>
> Now the TFTP is failing, because he expect the filetransfer client port as
the same as the initial filerequest.

Isn't the server complaining because port 7012 is unreachable? Not the
other way around? It really doesn't matter to the server what the value
of the source port is from the client.

Looking at your network packet dump from a previous email,

Source       Destination  Protocal   SPort    DPort    Description
10.0.0.100   10.0.0.1     tftp       1479     69       Read Request:File
/syslinux/ldlinux.e32, Transfer type: octet,
tsize\000=0\000,blksize\000=1408\000
10.0.0.1     10.0.0.100   tftp       7018     1479     Option Acknoledgment,
tsize\000=117160\000, blksize\000=1408\000
10.0.0.100   10.0.0.1     udp        1480     7018     Source port:1480
Destination port: 7018


The client is trying to connect to port 7018 on the server, but the
server responds with...


10.0.0.1     10.0.0.100   icmp                         Destination unreachable
(Port unreachable)


because a connection cannot be made to port 7018 on 10.0.0.1. No?

--
Matt Fleming, Intel Open Source Technology Center