summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJonas Karlman <[email protected]>2026-01-17 00:24:41 +0000
committerJerome Forissier <[email protected]>2026-02-04 09:04:36 +0100
commitbd1f40a4028998405cf4d29ad8ba407c6771b76a (patch)
tree4bab59ee232589ddbb762d405e04689301afda97
parent8d89b16ea4bae5b0df1080f0c3b8ea4a751f40ea (diff)
net: lwip: dhcp: Save DHCP siaddr field to tftpserverip env var
The DHCP siaddr field contains the IP address of next server to use in bootstrap. Typically this will be the IP address of a TFTP server or the IP address of the DHCP server itself. RFC 2131, 2. Protocol Summary, Page 10: DHCP clarifies the interpretation of the 'siaddr' field as the address of the server to use in the next step of the client's bootstrap process. A DHCP server may return its own address in the 'siaddr' field, if the server is prepared to supply the next bootstrap service (e.g., delivery of an operating system executable image). A DHCP server always returns its own address in the 'server identifier' option. Set the 'tftpserverip' env variable when the siaddr field contains an IP address that is different compared to the DHCP server IP address. Signed-off-by: Jonas Karlman <[email protected]> Reviewed-by: Jerome Forissier <[email protected]>
-rw-r--r--net/lwip/dhcp.c3
1 files changed, 3 insertions, 0 deletions
diff --git a/net/lwip/dhcp.c b/net/lwip/dhcp.c
index 4cd4184c42b..acdf601d7eb 100644
--- a/net/lwip/dhcp.c
+++ b/net/lwip/dhcp.c
@@ -101,6 +101,9 @@ static int dhcp_loop(struct udevice *udev)
env_set("serverip", ip4addr_ntoa(&dhcp->server_ip_addr));
if (!ip4_addr_isany(&dhcp->offered_gw_addr))
env_set(gwstr, ip4addr_ntoa(&dhcp->offered_gw_addr));
+ if (!ip4_addr_isany(&dhcp->offered_si_addr) &&
+ !ip4_addr_eq(&dhcp->offered_si_addr, &dhcp->server_ip_addr))
+ env_set("tftpserverip", ip4addr_ntoa(&dhcp->offered_si_addr));
#ifdef CONFIG_PROT_DNS_LWIP
env_set("dnsip", ip4addr_ntoa(dns_getserver(0)));