[PATCH] net: lwip: introduce net_lwip_eth_stop() function
Jerome Forissier
jerome.forissier at arm.com
Tue May 12 16:36:34 CEST 2026
On 12/05/2026 13:41, Simon Glass wrote:
> Hi David,
>
> On Mon, 11 May 2026 at 15:48, David Lechner <dlechner at baylibre.com> wrote:
>>
>> On 5/11/26 1:08 PM, Simon Glass wrote:
>>> Hi David,
>>>
>>> On 2026-05-09T17:36:26, David Lechner <dlechner at baylibre.com> wrote:
>>>> net: lwip: introduce net_lwip_eth_stop() function
>>>>
>>>> Add a introduce net_lwip_eth_stop() function and use that to stop the
>>>> network interface after each command that uses the network.
>>>>
>>>> This makes the behavior the same as the legacy net code and avoids
>>>> potential issues with the network interface being left in an active
>>>> state after a command finishes.
>>>>
>>>> Signed-off-by: David Lechner <dlechner at baylibre.com>
>>>>
>>>> cmd/lwip/ping.c | 10 ++++++++--
>>>> cmd/lwip/sntp.c | 10 ++++++++--
>>>> include/net-lwip.h | 1 +
>>>> net/lwip/dhcp.c | 15 +++++++++++----
>>>> net/lwip/dns.c | 6 +++++-
>>>> net/lwip/net-lwip.c | 6 +++++-
>>>> net/lwip/nfs.c | 4 ++++
>>>> net/lwip/tftp.c | 4 ++++
>>>> net/lwip/wget.c | 34 ++++++++++++++++++++++------------
>>>> 9 files changed, 68 insertions(+), 22 deletions(-)
>>>
>>>> diff --git a/net/lwip/wget.c b/net/lwip/wget.c
>>>> @@ -302,6 +302,7 @@ int wget_do_request(ulong dst_addr, char *uri)
>>>> struct udevice *udev;
>>>> struct netif *netif;
>>>> struct wget_ctx ctx;
>>>> + int ret = CMD_RET_USAGE;
>>>> char *path;
>>>> bool is_https;
>>>
>>> Initialising ret to CMD_RET_USAGE changes error paths:
>>>
>>> netif = net_lwip_new_netif(udev);
>>> if (!netif)
>>> goto out_stop; /* ret is still CMD_RET_USAGE */
>>>
>>> if (!tls_allocator.arg) {
>>> log_err(...);
>>> goto out_remove_netif; /* ret is still CMD_RET_USAGE */
>>> }
>>>
>>> The fall-through after 'Certificate verification failed' also lands on
>>> out_remove_netif with ret unchanged. These paths previously returned
>>> -1; now they return CMD_RET_USAGE (1), so the command framework prints
>>> usage for a network/TLS failure.
>>
>> The code I am looking at says:
>>
>> enum command_ret_t {
>> CMD_RET_SUCCESS, /* 0 = Success */
>> CMD_RET_FAILURE, /* 1 = Failure */
>> CMD_RET_USAGE = -1, /* Failure, please report 'usage' error */
>> };
>>
>> So I don't think these changed. CMD_RET_USAGE is -1.
>>
>> Happy to init it -1 though as you suggest if the name doesn't make
>> sense here. That is might be why it was -1 before instead of using
>> the macro anyway.
>
> Ah yes I missed that this is a pre-existing bug. We should return
> usage only when parsing is wrong, not when something fails.
+1
> So what you have here is fine and actually makes the bug more obvious
> in the code, which is good.
Yeah :)
> Reviewed-by: Simon Glass <sjg at chromium.org>
Reviewed-by: Jerome Forissier <jerome.forissier at arm.com>
Thanks,
--
Jerome
>>
>>>
>>> wget_do_request() isn't a command handler either, so CMD_RET_USAGE is
>>> doubly out of place. Please initialise ret to -1 and set ret =
>>> CMD_RET_FAILURE explicitly only in the paths that previously returned
>>> that.
>>>
>>> It might make sense to split this up function (perhaps in a prior
>>> patch) to try to make the error handling easier?
>>>
>> Sure. Is there a common naming pattern for that in U-Boot. I would
>> call the inner function __wget_do_request(). But I know opinions on
>> such things can vary widely. :-)
>
> If you do take this on, I would say better to rename it, e.g.
> handle_request() - strictly speaking we are supposed to avoid leading
> underscores, since they indicate symbols used by the
> compiler/toolchain, particularly the double underscore. In practice
> you will see use of a leading underscore in the code.
>
> Separately, I am taking a look at more use of getopt(), which would
> make parsing more regular, but unfortunately adds code size.
>
> Regards,
> Simon
More information about the U-Boot
mailing list