Hi Quentin, On 1/14/2026 6:08 PM, Quentin Schulz wrote: > Hi Jonas, > > On 1/14/26 4:37 PM, Jonas Karlman wrote: >> Hi Quentin, >> >> On 1/14/2026 4:01 PM, Quentin Schulz wrote: >>> Hi Jonas, >>> >>> On 1/6/26 9:34 PM, Jonas Karlman wrote: >>>> With the legacy networking stack, it is possible to use USE_SERVERIP, >>>> SERVERIP and BOOTP_PREFER_SERVERIP Kconfg options to force use of a >>>> specific TFTP server ip. >>>> >>>> Using the lwIP networking stack use of the 'tftpserverip' environment >>>> variable provide the closest equivalent functionality. >>>> >>> >>> It does read serverip environment variable if it's set, so this should >>> match the behavior with the legacy network stack no? >> >> This is what I first thought, however it seem that the lwip stack differ >> slightly from the legacy stack, in that the dhcp lookup always seem to >> reset the serverip env var. >> >>> As for BOOTP_PREFER_SERVERIP, this would need to be implemented in lwip >>> and isn't covered by this new variable is it? >> >> For the lwip stack it looks like the BOOTP_PREFER_SERVERIP Kconfig >> option possible was replaced with use of a 'tftpserverip' env var. >> >> For legacy stack I had something like following in a .config fragment: >> >> CONFIG_BOOTP_PREFER_SERVERIP=y >> CONFIG_SERVERIP="192.168.2.50" >> CONFIG_USE_SERVERIP=y >> > > And this meant the serverip would not be overwritten by the dhcp command > for example (in the legacy stack)? When doing PXE/TFTP, I always do > > setenv autoload no; dhcp; setenv serverip X.Y.Z.A; pxe get; pxe boot
I tried to keep it as simple as possible, as I have not used network boot before, and used something like following: env set boot_targets pxe; bootflow scan -lbG and when I need to use a USB Ethernet dongle I use something like: env delete -f ethaddr; env set boot_targets usb pxe; bootflow scan -lbG > When I control the DHCP server, I can actually set the TFTP server > directly and can skip setting the serverip as it'll be set by the dhcp > command correctly it seems? For my homelab I use UniFi and should be able to control DHCP options, however looking at U-Boot it looks like option 66 or 150 is just ignored, see [1]. case 66: /* Ignore TFTP server name */ [1] https://source.denx.de/u-boot/u-boot/-/blob/master/net/bootp.c?ref_type=heads#L952 >From my very limited testing it looks like I am forced to set serverip in env and cannot use a DHCP option to set the TFTP server to use. And when I then also tried lwIP, and that seem to result in new or different issues, e.g.: - lwIP seem to be configured to allow very few packet fragments, trying to use a reasonoble tftp blocksize, e.g. TFTP_BLOCKSIZE=4096 or more seem to cause drop of packets. - lwIP is very very slow to timeout compared to legacy when serverip point to an invalid TFTP server and pxelinux.cfg files is looked up. - sometimes got hit with random SError issues when second file was loaded from TFTP, this issue was thankfully fixed with [2]. [2] https://patchwork.ozlabs.org/project/uboot/patch/[email protected]/ > > From my notes, for an OpenWRT DHCP server: > > Network → DHCP and DNS → PXE/TFTP tab → Add button > Filename: default > > Server name: fileserver > > Server address: <TFTP server IP address> > > Force: checked (may not be necessary) > > Save & Apply button > > I'm assuming you need this for your labgrid farm so hopefully you have a > way to control the DHCP server :) Correct, I have been playing around with network boot in my labgrid farm and hit a few mines along the way :-) Should result in a few network related patches in next few days. > >> Adding NET_LWIP=y made pxe booting stop working and 'serverip' always >> ended up as the dhpc server regardless if it was set to something else. >> > > Interesting. With tiger-rk3588_defconfig (legacy stack), I get: > > => setenv serverip 192.192.192.192 > => setenv autoload no > => dhcp > ethernet@fe1b0000 Waiting for PHY auto negotiation to complete........ done > BOOTP broadcast 1 > BOOTP broadcast 2 > BOOTP broadcast 3 > DHCP client bound to address 10.2.162.193 (1394 ms) > => printenv serverip > serverip=10.2.0.122 > >> Since lwip instead prioritize the 'tftpserverip' env over the 'serverip' >> env for tftp use, adding a similar env var Kconfig option was easy but >> may be wrong path? >> > > I don't mind the addition but I'm wondering if it's not a band-aid patch > for something else? Maybe lwip missing setting the BOOTP server from a > DHCP lease for example? Possible, setting tftp from dhcp also seem to be missing from legacy stack, if I am not mistaken. I do think the separation of tftpserverip and serverip for lwIP stack at least is a step in right direction, I am new to network booting from U-Boot so what do I know :-) Regards, Jonas > >>> >>> This patch is fine, I'm just challenging the justification in the commit >>> log. >>> >>>> Add USE_TFTPSERVERIP and TFTPSERVERIP Kconfig options that can be used >>>> to add the 'tftpserverip' environment variable to force use of a >>>> specific TFTP server ip. >>>> >>>> Signed-off-by: Jonas Karlman <[email protected]> >>>> --- >>>> include/env_default.h | 3 +++ >>>> net/lwip/Kconfig | 12 ++++++++++++ >>>> 2 files changed, 15 insertions(+) >>>> >>>> diff --git a/include/env_default.h b/include/env_default.h >>>> index 7f8dc1c35a74..014873e304d8 100644 >>>> --- a/include/env_default.h >>>> +++ b/include/env_default.h >>>> @@ -58,6 +58,9 @@ const char default_environment[] = { >>>> #ifdef CONFIG_USE_SERVERIP >>>> "serverip=" CONFIG_SERVERIP "\0" >>>> #endif >>>> +#ifdef CONFIG_USE_TFTPSERVERIP >>>> + "tftpserverip=" CONFIG_TFTPSERVERIP "\0" >>>> +#endif >>>> #ifdef CONFIG_SYS_DISABLE_AUTOLOAD >>>> "autoload=0\0" >>>> #endif >>>> diff --git a/net/lwip/Kconfig b/net/lwip/Kconfig >>>> index 5789766fe624..0cfd3eb2684f 100644 >>>> --- a/net/lwip/Kconfig >>>> +++ b/net/lwip/Kconfig >>>> @@ -72,4 +72,16 @@ config LWIP_TCP_WND >>>> but QEMU with "-net user" needs no more than a few KB or the >>>> transfer will stall and eventually time out. >>>> >>>> +config USE_TFTPSERVERIP >>>> + bool "Set a default 'tftpserverip' value in the environment" >>>> + depends on CMD_TFTPBOOT >>>> + help >>>> + Defines a default value for the IP address of a TFTP server to >>>> + contact when using the "tftpboot" command. (Environment variable >>>> + "tftpserverip") >>>> + >>> >>> Does it support IPv4 *and*/or IPv6? >> >> Not sure, I have only tested IPv4, guess IPv6 probably should work, the >> 'tftpserverip' var should work with same formats that the 'serverip' var >> currently support. >> >> This help text is mostly just a c/p from the USE_SERVERIP Kconfig option, >> let me know if you think this should be changed. >> > > If it only supports IPv4, I think it should be mentioned. I'm sure > Jerome will have some input on that when they have time to review :) > > Cheers, > Quentin

