Skip to content

Commit

Permalink
net: Always build the string_to_enetaddr() helper
Browse files Browse the repository at this point in the history
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 <[email protected]>
Reported-by: Ondrej Jirman <[email protected]>
  • Loading branch information
jhershbe committed Dec 9, 2019
1 parent b38c3a6 commit fb8977c
Show file tree
Hide file tree
Showing 12 changed files with 39 additions and 37 deletions.
2 changes: 1 addition & 1 deletion arch/arm/mach-tegra/cboot.c
Original file line number Diff line number Diff line change
Expand Up @@ -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);
Expand Down
2 changes: 1 addition & 1 deletion board/renesas/sh7752evb/sh7752evb.c
Original file line number Diff line number Diff line change
Expand Up @@ -94,7 +94,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;
Expand Down
2 changes: 1 addition & 1 deletion board/renesas/sh7753evb/sh7753evb.c
Original file line number Diff line number Diff line change
Expand Up @@ -101,7 +101,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;
Expand Down
4 changes: 2 additions & 2 deletions board/renesas/sh7757lcr/sh7757lcr.c
Original file line number Diff line number Diff line change
Expand Up @@ -141,7 +141,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;
Expand All @@ -160,7 +160,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;
Expand Down
2 changes: 1 addition & 1 deletion cmd/ethsw.c
Original file line number Diff line number Diff line change
Expand Up @@ -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));
Expand Down
2 changes: 1 addition & 1 deletion cmd/nvedit.c
Original file line number Diff line number Diff line change
Expand Up @@ -361,7 +361,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);
}

Expand Down
4 changes: 2 additions & 2 deletions doc/README.enetaddr
Original file line number Diff line number Diff line change
Expand Up @@ -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);
Expand Down
27 changes: 13 additions & 14 deletions include/net.h
Original file line number Diff line number Diff line change
Expand Up @@ -826,6 +826,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);

Expand Down Expand Up @@ -880,19 +893,6 @@ unsigned int random_port(void);
*/
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);

/**
* env_get_ip() - Convert an environment value to to an ip address
*
Expand All @@ -905,5 +905,4 @@ static inline struct in_addr env_get_ip(char *var)
{
return string_to_ip(env_get(var));
}

#endif /* __NET_H__ */
15 changes: 15 additions & 0 deletions lib/net_utils.c
Original file line number Diff line number Diff line change
Expand Up @@ -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;
}
}
2 changes: 1 addition & 1 deletion net/eth-uclass.c
Original file line number Diff line number Diff line change
Expand Up @@ -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:
Expand Down
2 changes: 1 addition & 1 deletion net/eth_legacy.c
Original file line number Diff line number Diff line change
Expand Up @@ -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:
Expand Down
12 changes: 0 additions & 12 deletions net/net.c
Original file line number Diff line number Diff line change
Expand Up @@ -1625,15 +1625,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;
}
}

0 comments on commit fb8977c

Please sign in to comment.