[PATCHv8 04/15] net/lwip: implement dhcp cmd

Simon Goldschmidt goldsimon at gmx.de
Wed Sep 13 10:35:09 CEST 2023



On 13.09.2023 08:07, Ilias Apalodimas wrote:
> On Fri, Sep 08, 2023 at 07:53:09PM +0600, Maxim Uvarov wrote:
>> +
>> +#include <common.h>
>> +#include <command.h>
>> +#include <console.h>
>> +
>> +#include <lwip/dhcp.h>
>> +#include <lwip/prot/dhcp.h>
>> +#include "lwip/timeouts.h"
>> +
>> +#include <net/eth.h>
>> +#include <net/ulwip.h>
>> +
>> +#define DHCP_WAIT_MS 2000
>
> Is this the time we wait for a dhcp reply? If so we should bump it to
> something higher
>
>> +
>> +static void dhcp_tmo(void *arg)
>> +{
>> +	struct netif *netif = (struct netif *)arg;
>> +	struct dhcp *dhcp;
>> +	int err = 0;
>> +
>> +	dhcp = netif_get_client_data(netif, LWIP_NETIF_CLIENT_DATA_INDEX_DHCP);
>> +	if (!dhcp)
>> +		return;
>> +
>> +	switch (dhcp->state) {
>> +	case DHCP_STATE_BOUND:
>> +		err += env_set("bootfile", dhcp->boot_file_name);
>> +		err += env_set("ipaddr", ip4addr_ntoa(&dhcp->offered_ip_addr));
>> +		err += env_set("netmask", ip4addr_ntoa(&dhcp->offered_sn_mask));
>> +		err += env_set("serverip", ip4addr_ntoa(&dhcp->server_ip_addr));
>> +		if (err)
>> +			log_err("error update envs\n");
>> +		log_info("DHCP client bound to address %s\n", ip4addr_ntoa(&dhcp->offered_ip_addr));
>> +		break;
>> +	default:
>> +		return;
>> +	}
>> +}
>> +
>> +int ulwip_dhcp(void)
>> +{
>> +	struct netif *netif;
>> +	int eth_idx;
>> +
>> +	eth_idx = eth_get_dev_index();
>> +	if (eth_idx < 0)
>> +		return -EPERM;
>> +
>> +	netif = netif_get_by_index(eth_idx + 1);
>
> Why is the +1 needed here?

Netif index is driven by posix design and is 1-based in contrast to
U-Boot's 0-based dev index. A comment noting that would probably help
the ones not knowing lwIP.

Regards,
Simon

>
>> +	if (!netif)
>> +		return -ENOENT;
>> +
>> +	sys_timeout(DHCP_WAIT_MS, dhcp_tmo, netif);
>> +
>> +	return dhcp_start(netif) ? 0 : -EPERM;
>> +}
>> --
>> 2.30.2
>>


More information about the U-Boot mailing list