net: rename and refactor eth_rand_ethaddr() function
Some functions in include/net.h are ported from include/linux/etherdevice.h of Linux Kernel. For ex. is_zero_ether_addr() is_multicast_ether_addr() is_broadcast_ether_addr() is_valid_ether_addr(); So, we should use the same function name as that of Linux Kernel, eth_rand_addr(), for consistency. Besides, eth_rand_addr() has been implemented as an inline function. So it should not be surrounded by #ifdef CONFIG_RANDOM_MACADDR. Signed-off-by: Masahiro Yamada <yamada.m@jp.panasonic.com> Acked-by: Joe Hershberger <joe.hershberger@ni.com>
This commit is contained in:
parent
c85bb5a01a
commit
da384a9d76
@ -231,7 +231,7 @@ static void rescue_mode(void)
|
||||
printf("Entering rescue mode..\n");
|
||||
#ifdef CONFIG_RANDOM_MACADDR
|
||||
if (!eth_getenv_enetaddr("ethaddr", enetaddr)) {
|
||||
eth_random_enetaddr(enetaddr);
|
||||
eth_random_addr(enetaddr);
|
||||
if (eth_setenv_enetaddr("ethaddr", enetaddr)) {
|
||||
printf("Failed to set ethernet address\n");
|
||||
set_led(LED_ALARM_BLINKING);
|
||||
|
@ -345,7 +345,7 @@ static int dm9000_init(struct eth_device *dev, bd_t *bd)
|
||||
if (!is_valid_ether_addr(dev->enetaddr)) {
|
||||
#ifdef CONFIG_RANDOM_MACADDR
|
||||
printf("Bad MAC address (uninitialized EEPROM?), randomizing\n");
|
||||
eth_random_enetaddr(dev->enetaddr);
|
||||
eth_random_addr(dev->enetaddr);
|
||||
printf("MAC: %pM\n", dev->enetaddr);
|
||||
#else
|
||||
printf("WARNING: Bad MAC address (uninitialized EEPROM?)\n");
|
||||
|
@ -425,7 +425,7 @@ int ftmac110_initialize(bd_t *bis)
|
||||
dev->recv = ftmac110_recv;
|
||||
|
||||
if (!eth_getenv_enetaddr_by_index("eth", card_nr, dev->enetaddr))
|
||||
eth_random_enetaddr(dev->enetaddr);
|
||||
eth_random_addr(dev->enetaddr);
|
||||
|
||||
/* allocate tx descriptors (it must be 16 bytes aligned) */
|
||||
chip->txd = dma_alloc_coherent(
|
||||
|
@ -130,23 +130,6 @@ extern int eth_setenv_enetaddr(char *name, const uchar *enetaddr);
|
||||
extern int eth_getenv_enetaddr_by_index(const char *base_name, int index,
|
||||
uchar *enetaddr);
|
||||
|
||||
#ifdef CONFIG_RANDOM_MACADDR
|
||||
/*
|
||||
* The u-boot policy does not allow hardcoded ethernet addresses. Under the
|
||||
* following circumstances a random generated address is allowed:
|
||||
* - in emergency cases, where you need a working network connection to set
|
||||
* the ethernet address.
|
||||
* Eg. you want a rescue boot and don't have a serial port to access the
|
||||
* CLI to set environment variables.
|
||||
*
|
||||
* In these cases, we generate a random locally administered ethernet address.
|
||||
*
|
||||
* Args:
|
||||
* enetaddr - returns 6 byte hardware address
|
||||
*/
|
||||
extern void eth_random_enetaddr(uchar *enetaddr);
|
||||
#endif
|
||||
|
||||
extern int usb_eth_initialize(bd_t *bi);
|
||||
extern int eth_init(bd_t *bis); /* Initialize the device */
|
||||
extern int eth_send(void *packet, int length); /* Send a packet */
|
||||
@ -674,6 +657,25 @@ static inline int is_valid_ether_addr(const u8 *addr)
|
||||
return !is_multicast_ether_addr(addr) && !is_zero_ether_addr(addr);
|
||||
}
|
||||
|
||||
/**
|
||||
* eth_random_addr - Generate software assigned random Ethernet address
|
||||
* @addr: Pointer to a six-byte array containing the Ethernet address
|
||||
*
|
||||
* Generate a random Ethernet address (MAC) that is not multicast
|
||||
* and has the local assigned bit set.
|
||||
*/
|
||||
static inline void eth_random_addr(uchar *addr)
|
||||
{
|
||||
int i;
|
||||
unsigned int seed = get_timer(0);
|
||||
|
||||
for (i = 0; i < 6; i++)
|
||||
addr[i] = rand_r(&seed);
|
||||
|
||||
addr[0] &= 0xfe; /* clear multicast bit */
|
||||
addr[0] |= 0x02; /* set local assignment bit (IEEE802) */
|
||||
}
|
||||
|
||||
/* Convert an IP address to a string */
|
||||
extern void ip_to_string(IPaddr_t x, char *s);
|
||||
|
||||
|
22
net/eth.c
22
net/eth.c
@ -63,28 +63,6 @@ static int eth_mac_skip(int index)
|
||||
return ((skip_state = getenv(enetvar)) != NULL);
|
||||
}
|
||||
|
||||
#ifdef CONFIG_RANDOM_MACADDR
|
||||
void eth_random_enetaddr(uchar *enetaddr)
|
||||
{
|
||||
uint32_t rval;
|
||||
|
||||
srand(get_timer(0));
|
||||
|
||||
rval = rand();
|
||||
enetaddr[0] = rval & 0xff;
|
||||
enetaddr[1] = (rval >> 8) & 0xff;
|
||||
enetaddr[2] = (rval >> 16) & 0xff;
|
||||
|
||||
rval = rand();
|
||||
enetaddr[3] = rval & 0xff;
|
||||
enetaddr[4] = (rval >> 8) & 0xff;
|
||||
enetaddr[5] = (rval >> 16) & 0xff;
|
||||
|
||||
/* make sure it's local and unicast */
|
||||
enetaddr[0] = (enetaddr[0] | 0x02) & ~0x01;
|
||||
}
|
||||
#endif
|
||||
|
||||
/*
|
||||
* CPU and board-specific Ethernet initializations. Aliased function
|
||||
* signals caller to move on
|
||||
|
Loading…
Reference in New Issue
Block a user