diff options
Diffstat (limited to 'usr.sbin/pppd/magic.c')
-rw-r--r-- | usr.sbin/pppd/magic.c | 70 |
1 files changed, 70 insertions, 0 deletions
diff --git a/usr.sbin/pppd/magic.c b/usr.sbin/pppd/magic.c new file mode 100644 index 000000000000..20dfd6fe3a48 --- /dev/null +++ b/usr.sbin/pppd/magic.c @@ -0,0 +1,70 @@ +/* + * magic.c - PPP Magic Number routines. + * + * Copyright (c) 1989 Carnegie Mellon University. + * All rights reserved. + * + * Redistribution and use in source and binary forms are permitted + * provided that the above copyright notice and this paragraph are + * duplicated in all such forms and that any documentation, + * advertising materials, and other materials related to such + * distribution and use acknowledge that the software was developed + * by Carnegie Mellon University. The name of the + * University may not be used to endorse or promote products derived + * from this software without specific prior written permission. + * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED + * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE. + */ + +#ifndef lint +static char rcsid[] = "$Id: magic.c,v 1.1 1993/11/11 03:54:25 paulus Exp $"; +#endif + +#include <stdio.h> +#include <sys/types.h> +#include <sys/time.h> + +#include "magic.h" + + +static u_long next; /* Next value to return */ + +extern u_long gethostid __ARGS((void)); +extern long random __ARGS((void)); +extern void srandom __ARGS((int)); + + +/* + * magic_init - Initialize the magic number generator. + * + * Computes first magic number and seed for random number generator. + * Attempts to compute a random number seed which will not repeat. + * The current method uses the current hostid and current time. + */ +void magic_init() +{ + struct timeval tv; + + next = gethostid(); + if (gettimeofday(&tv, NULL)) { + perror("gettimeofday"); + exit(1); + } + next ^= (u_long) tv.tv_sec ^ (u_long) tv.tv_usec; + + srandom((int) next); +} + + +/* + * magic - Returns the next magic number. + */ +u_long magic() +{ + u_long m; + + m = next; + next = (u_long) random(); + return (m); +} |