[ipxe-devel] chain http and "slow" network interfaces

Michael Brown mcb30 at ipxe.org
Mon Dec 28 20:48:57 UTC 2020

On 24/11/2020 20:13, Etienne Champetier wrote:
> To work around situations where we can't run DHCP or ProxyDHCP, we
> build a simple iPXE iso that loop on all interfaces and try to chain
> to a predefined local link IPv6.
> It works well until on some server the interface takes ~40s to
> transmit anything (likely stp)
> I've tried to use "chain --timeout 60000 ..." but it timeouts after
> 15s, and ND are sent only for 10s in my tests.
> For now I'm using a simple loop
> ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
> set chaincur:int32 0
> set chainmax:int32 12
> :loop_chain
> chain --timeout 5000
> http://[fe80::616e:6576:6961]/ipxe/${net${i}/hwaddr:hexhyp}.ipxe ||
> inc chaincur && iseq ${chaincur} ${chainmax} || goto loop_chain
> ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
> I was wondering if it was the best way to really retry for 60s

That's probably the best way to handle it, if you really do have network 
infrastructure that imposes 40s delays on forwarding packets.

There is some limited support in iPXE that will defer DHCP timeout if it 
detects a "blocked link" (e.g. a non-forwarding STP port).  However, 
this will not help in your situation since you are not using DHCP.

The "iflinkwait" command could be extended to allow waiting for a link 
to become unblocked, but this is non-trivial since it is usually 
possible to detect a blocked link only once we start attempting to use it.


More information about the ipxe-devel mailing list