2 * Network Authentication Service deamon (Linux)
4 * Copyright (C) 2010, Broadcom Corporation
7 * This is UNPUBLISHED PROPRIETARY SOURCE CODE of Broadcom Corporation;
8 * the contents of this file may not be disclosed to third parties, copied
9 * or duplicated in any form, in whole or in part, without the prior
10 * written permission of Broadcom Corporation.
12 * $Id: nas_linux.c 241388 2011-02-18 03:33:22Z stakita $
21 #include <sys/types.h>
22 #include <sys/socket.h>
23 #include <sys/ioctl.h>
25 #include <netinet/in.h>
27 #include <net/if_arp.h>
28 #include <arpa/inet.h>
36 #include <proto/ethernet.h>
37 #include <proto/eapol.h>
38 #include <bcmcrypto/md5.h>
44 static nas_wksp_t
* nas_nwksp
= NULL
;
53 nas_rand128(uint8
*rand128
)
55 static int dev_random_fd
= -1;
59 if (dev_random_fd
== -1)
60 /* Use /dev/urandom because /dev/random, when it works at all,
61 * won't return anything when its entropy pool runs short and
62 * we can't control that. /dev/urandom look good enough.
64 dev_random_fd
= open("/dev/urandom", O_RDONLY
|O_NONBLOCK
);
65 if (dev_random_fd
!= -1)
66 read(dev_random_fd
, rand128
, 16);
68 gettimeofday(&tv
, &tz
);
71 MD5Update(&md5
, (unsigned char *) &tv
, sizeof(tv
));
72 MD5Update(&md5
, (unsigned char *) &tz
, sizeof(tz
));
73 MD5Final(rand128
, &md5
);
81 nas_nwksp
->flags
= NAS_WKSP_FLAG_SHUTDOWN
;
89 nas_safe_get_conf(char *outval
, int outval_size
, char *name
)
93 if (name
== NULL
|| outval
== NULL
) {
95 memset(outval
, 0, outval_size
);
99 val
= nvram_safe_get(name
);
100 if (!strcmp(val
, ""))
101 memset(outval
, 0, outval_size
);
103 snprintf(outval
, outval_size
, "%s", val
);
107 /* service main entry */
109 main(int argc
, char *argv
[])
111 /* display usage if nothing is specified */
113 (!strncmp(argv
[1], "-h", 2) ||
114 !strncmp(argv
[1], "-H", 2))) {
115 nas_wksp_display_usage();
119 /* alloc nas/wpa work space */
120 if (!(nas_nwksp
= nas_wksp_alloc_workspace())) {
121 NASMSG("Unable to allocate work space memory. Quitting...\n");
125 if (argc
> 1 && nas_wksp_parse_cmd(argc
, argv
, nas_nwksp
)) {
126 NASMSG("Command line parsing error. Quitting...\n");
127 nas_wksp_free_workspace(nas_nwksp
);
132 /* verbose - 0:no | others:yes */
135 if (nas_safe_get_conf(debug
, sizeof(debug
), "nas_dbg") == 0)
136 debug_nwksp
= (int)atoi(debug
);
140 /* establish a handler to handle SIGTERM. */
141 signal(SIGTERM
, hup_hdlr
);
143 /* run main loop to dispatch messages */
144 nas_wksp_main_loop(nas_nwksp
);