gint master_run(Master* master) { MAGIC_ASSERT(master); message("loading and initializing simulation data"); /* start loading and initializing simulation data */ _master_loadConfiguration(master); gboolean isSuccess = _master_loadTopology(master); if(!isSuccess) { return 1; } _master_initializeTimeWindows(master); /* the master will be responsible for distributing the actions to the slaves so that * they all have a consistent view of the simulation, topology, etc. * For now we only have one slave so send it everything. */ guint slaveSeed = random_nextUInt(master->random); master->slave = slave_new(master, master->options, master->endTime, slaveSeed); message("registering plugins and hosts"); /* register the components needed by each slave. * this must be done after slaves are available so we can send them messages */ _master_registerPlugins(master); _master_registerHosts(master); message("running simulation"); /* dont buffer log messages in debug mode */ if(options_getLogLevel(master->options) != LOGLEVEL_DEBUG) { message("log message buffering is enabled for efficiency"); logger_setEnableBuffering(logger_getDefault(), TRUE); } /* start running each slave */ slave_run(master->slave); /* only need to disable buffering if it was enabled, otherwise * don't log the message as it may confuse the user. */ if(options_getLogLevel(master->options) != LOGLEVEL_DEBUG) { message("log message buffering is disabled during cleanup"); logger_setEnableBuffering(logger_getDefault(), FALSE); } message("simulation finished, cleaning up now"); return slave_free(master->slave); }
int main(int argc, char **argv) { slave_t slave; io_service_t iosvc; char *interface = NULL; if (argc < 2) { printf("usage: %s <interface>\n", argv[0]); exit(0); } interface = argv[1]; srandom(time(NULL)); io_service_init(&iosvc); if (!wait_for_sigterm_sigint(&iosvc)) { LOG(LOG_LEVEL_FATAL, "Can't initiate SIGTERM awaiting: %s\n", strerror(errno)); exit(1); } if (!slave_init(&slave, &iosvc, interface)) { LOG_MSG(LOG_LEVEL_FATAL, "Can't initialize slave\n"); exit(1); } slave_run(&slave); slave_deinit(&slave); io_service_deinit(&iosvc); return 0; }
int main(int argc, char **argv) { int retval; int o; int mode = MODE_MASTER; char domain[NET_MAX_QNAME]; uint16 port; int do_listen; #ifdef WIN32 WSADATA wsaData; if ((retval = WSAStartup(0x202, &wsaData)) != 0) { error("Server: WSAStartup() failed with error %d\n", retval); WSACleanup(); return -1; } #endif *domain = 0; do_listen = 0; port = 0; for (o = 1; o < argc; o++) { if (*argv[o] == '-') { switch(argv[o][1]) { case 'h': usage(*argv); return 0; case 'd': if (o + 1 < argc) { strncpy(domain, argv[++o], NET_MAX_QNAME - 1); } break; case 'p': port = (uint16)atoi(argv[++o]); if ((port<1) || (port>=65535)) { // XXX - port is a 16bit integer, it can't never be greater than 65535 port = 3389; } break; case 'l': do_listen = 1; break; case 'm': mode= MODE_MASTER; break; case 's': mode = MODE_SLAVE; break; case 'v': verbose++; break; default: printf("ignoring unrecognized option -%c\n", o); } } } if (mode == MODE_SLAVE) { printf("[DEBUG] Starting client mode...\n"); slave_run(domain, port, "127.0.0.1", do_listen); } else { printf("[DEBUG] Starting server mode...\n"); master_run(NET_DEFAULT_DNS_PORT, domain, port, do_listen); } return 0; }