
Hi Stefan,
On Tue, Mar 1, 2016 at 4:35 AM, Stefan Roese sr@denx.de wrote:
Hi Joe,
I'm currently stumbling over a problem in some board specific code (not in mainline yet), that sets the "ipaddr" env variable via setenv(). But as I now noticed, the callback on_ipaddr() doesn't set net_ip to this new value. As flags has H_PROGRAMMATIC set and op_ipaddr() skips setting this value in this case.
I fail to see why we need this check in on_ipaddr(). Could you please explain why this is needed? Why would someone use setenv() for the "ipaddr" and not want to also update the net_ip value. This results in the "ipaddr" value being updated but net_ip still being configured to the old value.
The purpose is that programmatic accesses may write directly to the net_ip variable, but the user on the console cannot. This is because the "programmatic" accesses to these variables is expected to be things like the dhcp command and the linklocal command after successful netloop. You can see this call in the netboot_update_env() function in cmd/net.c.
Or if this is really needed, what is the correct way to update the ipaddr (env variable and net_ip value) from the U-Boot code?
You can work around it in a similar way to what I did in the initial change (94b467b14ed908c89a0780256e89b375aa3cf3ef - env: Distinguish finer between source of env change). The do_env_edit function used to call setenv, but I changed it to call as though it was interactive. You could do the same thing in your board driver.
Cheers, -Joe