/*
- * Copyright (c) 2010, 2011 Nicira Networks.
+ * Copyright (c) 2010, 2011, 2012, 2013 Nicira, Inc.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
static double timeout;
-static const struct command all_commands[];
+static const struct command *get_all_commands(void);
static void parse_options(int argc, char *argv[]);
static void usage(void);
+static int
+do_poll(struct pollfd *fds, int nfds, int timeout)
+{
+ int retval;
+#ifndef _WIN32
+ do {
+ retval = poll(fds, nfds, timeout);
+ } while (retval < 0 && errno == EINTR);
+#else
+ retval = WSAPoll(fds, nfds, timeout);
+#endif
+ return retval;
+}
+
static long long int
time_in_msec(void)
{
struct timeval tv;
- if (gettimeofday(&tv, NULL) < 0) {
- ovs_fatal(errno, "gettimeofday");
- }
+ xgettimeofday(&tv);
return tv.tv_sec * 1000LL + tv.tv_usec / 1000;
}
set_program_name(argv[0]);
vlog_set_levels(NULL, VLF_ANY_FACILITY, VLL_EMER);
parse_options(argc, argv);
- run_command(argc - optind, argv + optind, all_commands);
+ run_command(argc - optind, argv + optind, get_all_commands());
return 0;
}
*min = *max = 0;
if (colon && colon[1] != '\0') {
const char *ports = colon + 1;
- if (sscanf(ports, "%hu-%hu", min, max) == 2) {
+ if (ovs_scan(ports, "%hu-%hu", min, max)) {
if (*min > *max) {
ovs_fatal(0, "%s: minimum is greater than maximum", s_);
}
- } else if (sscanf(ports, "%hu", min) == 1) {
+ } else if (ovs_scan(ports, "%hu", min)) {
*max = *min;
} else {
ovs_fatal(0, "%s: number or range expected", s_);
static void
parse_options(int argc, char *argv[])
{
- static struct option long_options[] = {
+ static const struct option long_options[] = {
{"local", required_argument, NULL, 'l'},
{"remote", required_argument, NULL, 'r'},
{"batches", required_argument, NULL, 'b'},
for (;;) {
int retval;
- do {
- retval = poll(fds, n_fds, -1);
- } while (retval < 0 && errno == EINTR);
+ retval = do_poll(fds, n_fds, -1);
if (retval < 0) {
ovs_fatal(errno, "poll failed");
}
delay = 1000;
}
- do {
- error = poll(fds, n_fds, delay) < 0 ? errno : 0;
- } while (error == EINTR);
+ error = do_poll(fds, n_fds, delay);
if (error) {
ovs_fatal(errno, "poll");
}
}
now = time_in_msec();
- if (now >= prev + 10) {
+ if (now >= prev + 1000) {
long long int elapsed = now - start;
- printf("%.3f s elapsed, %u OK, %u failed, avg %.1f/s \r",
+ printf("%.3f s elapsed, %u OK, %u failed, avg %.1f/s\n",
elapsed / 1000.0, completed - failures, failures,
completed / (elapsed / 1000.0));
fflush(stdout);
while (n_fds > 0) {
int error;
- do {
- error = poll(fds, n_fds, -1) < 0 ? errno : 0;
- } while (error == EINTR);
+ error = do_poll(fds, n_fds, -1);
if (error) {
ovs_fatal(errno, "poll");
}
{ "help", 0, 0, cmd_help },
{ NULL, 0, 0, NULL },
};
+
+static const struct command *get_all_commands(void)
+{
+ return all_commands;
+}