Exemple #1
0
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);
}
Exemple #2
0
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;
}
Exemple #3
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;
}