[syslinux] syslinux.efi pxeboot across multiple subnets

Jason Matthews jason.david.matthews at gmail.com
Mon Nov 11 13:53:52 PST 2013


On Sun, Nov 10, 2013 at 12:23 PM, Gene Cumm <gene.cumm at gmail.com> wrote:

> On Sat, Nov 9, 2013 at 9:22 AM, Jason Matthews
> <jason.david.matthews at gmail.com> wrote:
> > The setup I was using was in a chassis. Slot 8 of the chassis is the
> client
> > machine. It goes through Switch 1 (a Brocade switch) to the top of rack
> > (BNT). The mirror is in the chassis switch. Slot 3 of the same chassis is
> > connected to the mirror port in Switch 1.
> >
> > client = 1/0/8
> > tcpdump = 1/0/3
> > to TOR = 1/0/43
> > 1/0/8 mirrored both directions to 1/0/3
> >
> > Unfortunately, I don't have access to the switch configs of the TOR
> > switches so I can't say how many gateways it's going through.
> 10.16.233.20
> > goes through 10.16.233.1 and 10.16.195.178 goes through 10.16.194.1. All
> > the switch magic after that is hidden from me.
>
> Any chance you could try this git branch:
>
>   git://github.com/geneC/syslinux.git efi-fixes-2-for-mfleming
>
> --
> -Gene
>

I took a clone of that, but it confuses me. The only reference I can find
to efi are in gpxe and I can't get that to build (syntax errors in
util/geniso). The version is listed as 4.07. I was under the impression
6.00 was the first version that supported efi.

> core_udp_open() should bind to the local IP address and obtain a local
> UDP port allocation.  core_udp_close() should release the UDP port
> allocation.
>
> core_udp_sendto() knows the remote IP address and remote UDP port and
> must calculate the GatewayAddress.  core_udp_connect() is passed the
> remote IP address and UDP port, calculates the GatewayAddress and
> stores all three for core_udp_send().  core_udp_send() should only
> copy the local/remote IP address/UDP port and GatewayAddress, then set
> the other flags/values as needed.
>
> Now to get core_udp_connect() to calculate/store the values for reuse.

It looks like it's going into core_udp_open, giving station port to
socket->net.efi.localport. core_udp_sendto sets the remote port. From
there, I'm never getting into core_udp_send or core_udp_connect. After
core_udp_sendto, I go into core_udp_recv, hit the jiffies() loop, time out
and bail to repeat the same process until reset.

Thanks for pointing out the UEFI_Spec_2_3_1.pdf. It help me get a little
more grasp on what's happening. I set it to use the Default Address. If you
set UseDefaultAddress to true and comment out the lines setting
StationAddress and SubnetMask, it takes a second to pull the dhcp info so I
had to put the udp->Configure line in a loop until it's status is not
EFI_NO_MAPPING. Once it's set, It looks like it takes the StationAddress,
SubnetMask and Gateway from the dhcp.


More information about the Syslinux mailing list