/** Initialises the server logging functionality, and the underlying libfreeradius log * * @note Call log free when the server is done to fix any spurious memory leaks. * * @param[in] log Logging parameters. * @param[in] daemonize Changes what we do with stdout/stderr. * @return * - 0 on success. * - -1 on failure. */ int log_global_init(fr_log_t *log, bool daemonize) { int ret; ret = fr_log_init(log, daemonize); if (ret < 0) return ret; if (fr_dict_autoload(log_dict) < 0) { fr_perror("log_init"); return -1; } if (fr_dict_attr_autoload(log_dict_attr) < 0) { fr_perror("log_init"); return -1; } return ret; }
int main(int argc, char *argv[]) { int c; int num_networks = 1; int num_workers = 2; uint16_t port16 = 0; TALLOC_CTX *autofree = talloc_autofree_context(); fr_schedule_t *sched; fr_listen_t listen = { .app_io = &app_io, .app = &test_app }; fr_listen_test_t *app_io_inst; listen.app_io_instance = app_io_inst = talloc_zero(autofree, fr_listen_test_t); fr_time_start(); fr_log_init(&default_log, false); default_log.colourise = true; memset(&my_ipaddr, 0, sizeof(my_ipaddr)); my_ipaddr.af = AF_INET; my_ipaddr.prefix = 32; my_ipaddr.addr.v4.s_addr = htonl(INADDR_LOOPBACK); my_port = 1812; while ((c = getopt(argc, argv, "i:n:s:w:x")) != EOF) switch (c) { case 'i': if (fr_inet_pton_port(&my_ipaddr, &port16, optarg, -1, AF_INET, true, false) < 0) { fr_perror("Failed parsing ipaddr"); exit(EXIT_FAILURE); } my_port = port16; break; case 'n': num_networks = atoi(optarg); if ((num_networks <= 0) || (num_networks > 16)) usage(); break; case 's': secret = optarg; break; case 'w': num_workers = atoi(optarg); if ((num_workers <= 0) || (num_workers > 1024)) usage(); break; case 'x': debug_lvl++; fr_debug_lvl++; break; case 'h': default: usage(); } #if 0 argc -= (optind - 1); argv += (optind - 1); #endif app_io_inst->ipaddr = my_ipaddr; app_io_inst->port = my_port; sched = fr_schedule_create(autofree, NULL, &default_log, debug_lvl, num_networks, num_workers, NULL, NULL); if (!sched) { fprintf(stderr, "schedule_test: Failed to create scheduler\n"); exit(EXIT_FAILURE); } if (listen.app_io->open(listen.app_io_instance, listen.app_io_instance) < 0) exit(EXIT_FAILURE); #if 0 /* * Set up the KQ filter for reading. */ EV_SET(&events[0], sockfd, EVFILT_READ, EV_ADD | EV_ENABLE, 0, 0, NULL); if (kevent(kq_master, events, 1, NULL, 0, NULL) < 0) { fr_perror("Failed setting KQ for EVFILT_READ"); exit(EXIT_FAILURE); } #endif (void) fr_fault_setup(autofree, NULL, argv[0]); (void) fr_schedule_listen_add(sched, &listen); sleep(10); (void) fr_schedule_destroy(sched); exit(EXIT_SUCCESS); }