mirror of
				https://xff.cz/git/u-boot/
				synced 2025-10-31 10:26:10 +01:00 
			
		
		
		
	As 'time(0) | getpid()' will have a lot of duplicated value. It is not a expected behavior. We expect different value for the seed when when run it in many times. So this patch will left shift the getpid() and add to time(0). That avoid duplicated value. Test command is like: % RUN=0; while [ $RUN -lt 10000 ]; do tools/gen_eth_addr; RUN=$(($RUN+1)); done | sort | uniq | wc -l 10000 This patch is incorporated with suggestions made by Wolfgang Denk and Andreas Bießmann. Thanks them a lot. Signed-off-by: Josh Wu <josh.wu@atmel.com> Acked-by: Andreas Bießmann <andreas.devel@googlemail.com> Acked-by: Wolfgang Denk <wd@denx.de> Tested-by: Wolfgang Denk <wd@denx.de>
		
			
				
	
	
		
			35 lines
		
	
	
		
			747 B
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			35 lines
		
	
	
		
			747 B
		
	
	
	
		
			C
		
	
	
	
	
	
| /*
 | |
|  * (C) Copyright 2001
 | |
|  * Murray Jensen <Murray.Jensen@cmst.csiro.au>
 | |
|  *
 | |
|  * SPDX-License-Identifier:	GPL-2.0+
 | |
|  */
 | |
| 
 | |
| #include <stdio.h>
 | |
| #include <stdlib.h>
 | |
| #include <unistd.h>
 | |
| #include <time.h>
 | |
| 
 | |
| int
 | |
| main(int argc, char *argv[])
 | |
| {
 | |
|     unsigned long ethaddr_low, ethaddr_high;
 | |
| 
 | |
|     srand(time(0) + (getpid() << 8));
 | |
| 
 | |
|     /*
 | |
|      * setting the 2nd LSB in the most significant byte of
 | |
|      * the address makes it a locally administered ethernet
 | |
|      * address
 | |
|      */
 | |
|     ethaddr_high = (rand() & 0xfeff) | 0x0200;
 | |
|     ethaddr_low = rand();
 | |
| 
 | |
|     printf("%02lx:%02lx:%02lx:%02lx:%02lx:%02lx\n",
 | |
| 	ethaddr_high >> 8, ethaddr_high & 0xff,
 | |
| 	ethaddr_low >> 24, (ethaddr_low >> 16) & 0xff,
 | |
| 	(ethaddr_low >> 8) & 0xff, ethaddr_low & 0xff);
 | |
| 
 | |
|     return (0);
 | |
| }
 |