$OpenBSD: patch-tools_na6_c,v 1.1 2013/09/26 21:52:35 bluhm Exp $
--- tools/na6.c.orig	Thu Aug 22 11:48:49 2013
+++ tools/na6.c	Sun Sep  8 21:20:06 2013
@@ -880,8 +880,6 @@ int main(int argc, char **argv){
 
 	pcap_freecode(&pcap_filter);
 
-	srandom(time(NULL));
-    
 
 	if(!floods_f && !srcaddr_f){    
 	    /* When randomizing a link-local IPv6 address, select addresses that belong to the
@@ -895,7 +893,7 @@ int main(int argc, char **argv){
 			srcaddr.s6_addr16[i]=0x0000;	
 	    
 		for(i=4; i<8; i++)
-			srcaddr.s6_addr16[i]=random();
+			srcaddr.s6_addr16[i]=arc4random();
 	}
 
 	/*
@@ -919,8 +917,7 @@ int main(int argc, char **argv){
 	}
 
 	if(!hsrcaddr_f)	/* Source link-layer address is randomized by default */
-		for(i=0; i<6; i++)
-			hsrcaddr.a[i]= random();
+		arc4random_buf(&hsrcaddr, sizeof(struct ether_addr));
 
 	if(!hdstaddr_f)		/* Destination link-layer address defaults to all-nodes */
 		if(ether_pton(ETHER_ALLNODES_LINK_ADDR, &hdstaddr, sizeof(hdstaddr)) == 0){
@@ -1361,7 +1358,7 @@ void send_packet(const u_char *pktdata){
 				ipv6->ip6_src.s6_addr16[i]= 0;
 
 			for(i=startrand; i<8; i++)
-				ipv6->ip6_src.s6_addr16[i]=random();
+				ipv6->ip6_src.s6_addr16[i]=arc4random();
 
 			if(srcpreflen%16){
 				mask=0xffff;
@@ -1377,8 +1374,7 @@ void send_packet(const u_char *pktdata){
 				ipv6->ip6_src.s6_addr16[i]= ipv6->ip6_src.s6_addr16[i] | srcaddr.s6_addr16[i];
 
 			if(!hsrcaddr_f){
-				for(i=0; i<6; i++)
-					ethernet->src.a[i]= random();
+				arc4random_buf(&ethernet->src, sizeof(struct ether_addr));
 			}
 	    
 			if(tllaopt_f && !tllaopta_f){
@@ -1400,7 +1396,7 @@ void send_packet(const u_char *pktdata){
 					na->nd_na_target.s6_addr16[i]= 0;
 
 				for(i=startrand; i<8; i++)
-					na->nd_na_target.s6_addr16[i]=random();
+					na->nd_na_target.s6_addr16[i]=arc4random();
 
 				if(targetpreflen%16){
 					mask=0xffff;
@@ -1475,7 +1471,7 @@ void send_packet(const u_char *pktdata){
 
 					memcpy(fptr, (char *) &fraghdr, FRAG_HDR_SIZE);
 					fh= (struct ip6_frag *) fptr;
-					fh->ip6f_ident=random();
+					fh->ip6f_ident=arc4random();
 					startoffragment = fptr + FRAG_HDR_SIZE;
 
 					/*
