[U-Boot] [PATCH] net: Always build the string_to_enetaddr() helper

Heinrich Schuchardt xypron.glpk at gmx.de
Sat Sep 14 12:56:25 UTC 2019


On 9/14/19 2:40 AM, Joe Hershberger wrote:
> Part of the env cleanup moved this out of the environment code and into
> the net code. However, this helper is sometimes needed even when the net
> stack isn't included.
>
> Move the helper to lib/net_utils.c like it's similarly-purposed
> string_to_ip(). Also rename the moved function to similar naming.
>
> Signed-off-by: Joe Hershberger <joe.hershberger at ni.com>
> Reported-by: Ondrej Jirman <megous at megous.com>

Reviewed-by: Heinrich Schuchardt <xypron.glpk at gmx.de>

>
> ---
>
>   arch/arm/mach-tegra/cboot.c         |  2 +-
>   board/renesas/sh7752evb/sh7752evb.c |  2 +-
>   board/renesas/sh7753evb/sh7753evb.c |  2 +-
>   board/renesas/sh7757lcr/sh7757lcr.c |  4 ++--
>   cmd/ethsw.c                         |  2 +-
>   cmd/nvedit.c                        |  2 +-
>   doc/README.enetaddr                 |  4 ++--
>   include/net.h                       | 24 +++++++++++++-----------
>   lib/net_utils.c                     | 15 +++++++++++++++
>   net/eth-uclass.c                    |  2 +-
>   net/eth_legacy.c                    |  2 +-
>   net/net.c                           | 12 ------------
>   12 files changed, 39 insertions(+), 34 deletions(-)
>
> diff --git a/arch/arm/mach-tegra/cboot.c b/arch/arm/mach-tegra/cboot.c
> index 0433081c6c..0762144ecf 100644
> --- a/arch/arm/mach-tegra/cboot.c
> +++ b/arch/arm/mach-tegra/cboot.c
> @@ -495,7 +495,7 @@ static int cboot_get_ethaddr_legacy(const void *fdt, uint8_t mac[ETH_ALEN])
>   		return -ENOENT;
>   	}
>
> -	eth_parse_enetaddr(prop, mac);
> +	string_to_enetaddr(prop, mac);
>
>   	if (!is_valid_ethaddr(mac)) {
>   		printf("Invalid MAC address: %s\n", prop);
> diff --git a/board/renesas/sh7752evb/sh7752evb.c b/board/renesas/sh7752evb/sh7752evb.c
> index d0b850f35d..b4292b22e7 100644
> --- a/board/renesas/sh7752evb/sh7752evb.c
> +++ b/board/renesas/sh7752evb/sh7752evb.c
> @@ -93,7 +93,7 @@ static void set_mac_to_sh_giga_eth_register(int channel, char *mac_string)
>   	unsigned char mac[6];
>   	unsigned long val;
>
> -	eth_parse_enetaddr(mac_string, mac);
> +	string_to_enetaddr(mac_string, mac);
>
>   	if (!channel)
>   		ether = GETHER0_MAC_BASE;
> diff --git a/board/renesas/sh7753evb/sh7753evb.c b/board/renesas/sh7753evb/sh7753evb.c
> index e1bed7dcc3..5aebb041b0 100644
> --- a/board/renesas/sh7753evb/sh7753evb.c
> +++ b/board/renesas/sh7753evb/sh7753evb.c
> @@ -100,7 +100,7 @@ static void set_mac_to_sh_giga_eth_register(int channel, char *mac_string)
>   	unsigned char mac[6];
>   	unsigned long val;
>
> -	eth_parse_enetaddr(mac_string, mac);
> +	string_to_enetaddr(mac_string, mac);
>
>   	if (!channel)
>   		ether = GETHER0_MAC_BASE;
> diff --git a/board/renesas/sh7757lcr/sh7757lcr.c b/board/renesas/sh7757lcr/sh7757lcr.c
> index d2671202e9..662c435f7a 100644
> --- a/board/renesas/sh7757lcr/sh7757lcr.c
> +++ b/board/renesas/sh7757lcr/sh7757lcr.c
> @@ -140,7 +140,7 @@ static void set_mac_to_sh_eth_register(int channel, char *mac_string)
>   	unsigned char mac[6];
>   	unsigned long val;
>
> -	eth_parse_enetaddr(mac_string, mac);
> +	string_to_enetaddr(mac_string, mac);
>
>   	if (!channel)
>   		ether = ETHER0_MAC_BASE;
> @@ -159,7 +159,7 @@ static void set_mac_to_sh_giga_eth_register(int channel, char *mac_string)
>   	unsigned char mac[6];
>   	unsigned long val;
>
> -	eth_parse_enetaddr(mac_string, mac);
> +	string_to_enetaddr(mac_string, mac);
>
>   	if (!channel)
>   		ether = GETHER0_MAC_BASE;
> diff --git a/cmd/ethsw.c b/cmd/ethsw.c
> index 8846805799..8d271ce1f3 100644
> --- a/cmd/ethsw.c
> +++ b/cmd/ethsw.c
> @@ -864,7 +864,7 @@ static int keyword_match_mac_addr(enum ethsw_keyword_id key_id, int argc,
>   		return 0;
>   	}
>
> -	eth_parse_enetaddr(argv[*argc_nr + 1], parsed_cmd->ethaddr);
> +	string_to_enetaddr(argv[*argc_nr + 1], parsed_cmd->ethaddr);
>
>   	if (is_broadcast_ethaddr(parsed_cmd->ethaddr)) {
>   		memset(parsed_cmd->ethaddr, 0xFF, sizeof(parsed_cmd->ethaddr));
> diff --git a/cmd/nvedit.c b/cmd/nvedit.c
> index 1cb0bc1460..1e4b225a94 100644
> --- a/cmd/nvedit.c
> +++ b/cmd/nvedit.c
> @@ -360,7 +360,7 @@ ulong env_get_hex(const char *varname, ulong default_val)
>
>   int eth_env_get_enetaddr(const char *name, uint8_t *enetaddr)
>   {
> -	eth_parse_enetaddr(env_get(name), enetaddr);
> +	string_to_enetaddr(env_get(name), enetaddr);
>   	return is_valid_ethaddr(enetaddr);
>   }
>
> diff --git a/doc/README.enetaddr b/doc/README.enetaddr
> index f926485986..5baa9f2179 100644
> --- a/doc/README.enetaddr
> +++ b/doc/README.enetaddr
> @@ -76,12 +76,12 @@ To assist in the management of these layers, a few helper functions exist.  You
>   should use these rather than attempt to do any kind of parsing/manipulation
>   yourself as many common errors have arisen in the past.
>
> -	* void eth_parse_enetaddr(const char *addr, uchar *enetaddr);
> +	* void string_to_enetaddr(const char *addr, uchar *enetaddr);
>
>   Convert a string representation of a MAC address to the binary version.
>   char *addr = "00:11:22:33:44:55";
>   uchar enetaddr[6];
> -eth_parse_enetaddr(addr, enetaddr);
> +string_to_enetaddr(addr, enetaddr);
>   /* enetaddr now equals { 0x00, 0x11, 0x22, 0x33, 0x44, 0x55 } */
>
>   	* int eth_env_get_enetaddr(char *name, uchar *enetaddr);
> diff --git a/include/net.h b/include/net.h
> index 75a16e4c8f..d054c5f694 100644
> --- a/include/net.h
> +++ b/include/net.h
> @@ -825,6 +825,19 @@ static inline void net_random_ethaddr(uchar *addr)
>   	addr[0] |= 0x02;	/* set local assignment bit (IEEE802) */
>   }
>
> +/**
> + * string_to_enetaddr() - Parse a MAC address
> + *
> + * Convert a string MAC address
> + *
> + * Implemented in lib/net_utils.c (built unconditionally)
> + *
> + * @addr: MAC address in aa:bb:cc:dd:ee:ff format, where each part is a 2-digit
> + *	hex value
> + * @enetaddr: Place to put MAC address (6 bytes)
> + */
> +void string_to_enetaddr(const char *addr, uint8_t *enetaddr);
> +
>   /* Convert an IP address to a string */
>   void ip_to_string(struct in_addr x, char *s);
>
> @@ -875,15 +888,4 @@ int update_tftp(ulong addr, char *interface, char *devstring);
>
>   /**********************************************************************/
>
> -/**
> - * eth_parse_enetaddr() - Parse a MAC address
> - *
> - * Convert a string MAC address
> - *
> - * @addr: MAC address in aa:bb:cc:dd:ee:ff format, where each part is a 2-digit
> - *	hex value
> - * @enetaddr: Place to put MAC address (6 bytes)
> - */
> -void eth_parse_enetaddr(const char *addr, uint8_t *enetaddr);
> -
>   #endif /* __NET_H__ */
> diff --git a/lib/net_utils.c b/lib/net_utils.c
> index 9fb9d4a4b0..ed5044c3de 100644
> --- a/lib/net_utils.c
> +++ b/lib/net_utils.c
> @@ -41,3 +41,18 @@ struct in_addr string_to_ip(const char *s)
>   	addr.s_addr = htonl(addr.s_addr);
>   	return addr;
>   }
> +
> +void string_to_enetaddr(const char *addr, uint8_t *enetaddr)
> +{
> +	char *end;
> +	int i;
> +
> +	if (!enetaddr)
> +		return;
> +
> +	for (i = 0; i < 6; ++i) {
> +		enetaddr[i] = addr ? simple_strtoul(addr, &end, 16) : 0;
> +		if (addr)
> +			addr = (*end) ? end + 1 : end;
> +	}
> +}
> diff --git a/net/eth-uclass.c b/net/eth-uclass.c
> index 3bd98b01ad..9fe4096120 100644
> --- a/net/eth-uclass.c
> +++ b/net/eth-uclass.c
> @@ -227,7 +227,7 @@ static int on_ethaddr(const char *name, const char *value, enum env_op op,
>   		switch (op) {
>   		case env_op_create:
>   		case env_op_overwrite:
> -			eth_parse_enetaddr(value, pdata->enetaddr);
> +			string_to_enetaddr(value, pdata->enetaddr);
>   			eth_write_hwaddr(dev);
>   			break;
>   		case env_op_delete:
> diff --git a/net/eth_legacy.c b/net/eth_legacy.c
> index 41f5263526..5d6b0d7d7f 100644
> --- a/net/eth_legacy.c
> +++ b/net/eth_legacy.c
> @@ -117,7 +117,7 @@ static int on_ethaddr(const char *name, const char *value, enum env_op op,
>   			switch (op) {
>   			case env_op_create:
>   			case env_op_overwrite:
> -				eth_parse_enetaddr(value, dev->enetaddr);
> +				string_to_enetaddr(value, dev->enetaddr);
>   				eth_write_hwaddr(dev, "eth", dev->index);
>   				break;
>   			case env_op_delete:
> diff --git a/net/net.c b/net/net.c
> index ded86e7456..4d2b7ead3b 100644
> --- a/net/net.c
> +++ b/net/net.c
> @@ -1628,15 +1628,3 @@ ushort env_get_vlan(char *var)
>   {
>   	return string_to_vlan(env_get(var));
>   }
> -
> -void eth_parse_enetaddr(const char *addr, uint8_t *enetaddr)
> -{
> -	char *end;
> -	int i;
> -
> -	for (i = 0; i < 6; ++i) {
> -		enetaddr[i] = addr ? simple_strtoul(addr, &end, 16) : 0;
> -		if (addr)
> -			addr = (*end) ? end + 1 : end;
> -	}
> -}
>



More information about the U-Boot mailing list