diff --git a/includes/internal/cli/options.h b/includes/internal/cli/options.h index d4aa1c9..53f55bc 100644 --- a/includes/internal/cli/options.h +++ b/includes/internal/cli/options.h @@ -79,17 +79,17 @@ enum { ) \ X( \ 'W', \ - "timeout", \ + "linger", \ required_argument, \ - cli_handle_timeout, \ + cli_handle_linger, \ OPT_ARG_SECONDS, \ "Timeout for replies in seconds" \ ) \ X( \ 'w', \ - "deadline", \ + "timeout", \ required_argument, \ - cli_handle_deadline, \ + cli_handle_timeout, \ OPT_ARG_SECONDS, \ "Exit after N seconds regardless of packets sent/received" \ ) \ diff --git a/includes/internal/ping/cli_handlers.h b/includes/internal/ping/cli_handlers.h index 45e2c89..12f0cd9 100644 --- a/includes/internal/ping/cli_handlers.h +++ b/includes/internal/ping/cli_handlers.h @@ -9,12 +9,12 @@ int cli_handle_count(const char *arg, void *config); int cli_handle_preload(const char *arg, void *config); int cli_handle_pattern(const char *arg, void *config); int cli_handle_dont_fragment(const char *arg, void *config); -int cli_handle_deadline(const char *arg, void *config); int cli_handle_flood(const char *arg, void *config); int cli_handle_help(const char *arg, void *config); int cli_handle_interval(const char *arg, void *config); int cli_handle_quiet(const char *arg, void *config); int cli_handle_size(const char *arg, void *config); +int cli_handle_linger(const char *arg, void *config); int cli_handle_timeout(const char *arg, void *config); int cli_handle_ttl(const char *arg, void *config); int cli_handle_verbose(const char *arg, void *config); diff --git a/includes/ping/ft_ping_const.h b/includes/ping/ft_ping_const.h index 76e7f25..9ff04f8 100644 --- a/includes/ping/ft_ping_const.h +++ b/includes/ping/ft_ping_const.h @@ -7,7 +7,7 @@ #define DEFAULT_INTERVAL 1.0 #define DEFAULT_TTL 64 #define DEFAULT_PACKET_SIZE 56 -#define DEFAULT_TIMEOUT 1.0 +#define DEFAULT_LINGER 1.0 /* Maximum values */ #define MAX_PACKET_SIZE 65507 diff --git a/includes/ping/ping.h b/includes/ping/ping.h index c29f7c2..7a9f9d1 100644 --- a/includes/ping/ping.h +++ b/includes/ping/ping.h @@ -20,8 +20,8 @@ struct ping_config double interval; uint8_t ttl; size_t packet_size; + double linger; double timeout; - double deadline; /* Pattern (-p) */ uint8_t pattern[16]; diff --git a/src/ping/Makefile.am b/src/ping/Makefile.am index bad783a..4e4e744 100644 --- a/src/ping/Makefile.am +++ b/src/ping/Makefile.am @@ -47,7 +47,7 @@ libping_core_la_SOURCES = \ cli/handlers/handle_preload.c \ cli/handlers/handle_pattern.c \ cli/handlers/handle_dont_fragment.c \ - cli/handlers/handle_deadline.c \ + cli/handlers/handle_linger.c \ cli/handlers/handle_flood.c \ cli/handlers/handle_help.c \ cli/handlers/handle_interval.c \ diff --git a/src/ping/cli/handlers/handle_linger.c b/src/ping/cli/handlers/handle_linger.c new file mode 100644 index 0000000..695aba3 --- /dev/null +++ b/src/ping/cli/handlers/handle_linger.c @@ -0,0 +1,14 @@ +#include "ping/cli.h" +#include "internal/cli/parse_utils.h" + +int +cli_handle_linger(const char *arg, void *config_void) +{ + struct ping_config *config = (struct ping_config *)config_void; + float linger; + + if (0 != cli_parse_ufloat(arg, &linger)) + return CLI_ERROR; + config->linger = linger; + return CLI_SUCCESS; +} diff --git a/src/ping/cli/handlers/handle_timeout.c b/src/ping/cli/handlers/handle_timeout.c index d23ae9c..28656ae 100644 --- a/src/ping/cli/handlers/handle_timeout.c +++ b/src/ping/cli/handlers/handle_timeout.c @@ -5,11 +5,10 @@ int cli_handle_timeout(const char *arg, void *config_void) { struct ping_config *config = (struct ping_config *)config_void; - float TO; + float timeout; - if (0 != cli_parse_ufloat(arg, &TO)) + if (0 != cli_parse_ufloat(arg, &timeout)) return CLI_ERROR; - - config->timeout = TO; + config->timeout = timeout; return CLI_SUCCESS; } diff --git a/src/ping/cli/messages/help.c b/src/ping/cli/messages/help.c index a5fd05a..49d8bb9 100644 --- a/src/ping/cli/messages/help.c +++ b/src/ping/cli/messages/help.c @@ -19,7 +19,7 @@ print_help(void) const struct option_descriptor *opt = &g_options[i]; const char *argstr = option_arg_type_to_str(opt->arg_type); - printf(" -%c, --%-10s %-8s %s\n", + printf(" -%c, --%-15s %-8s %s\n", opt->short_opt, opt->long_opt, argstr[0] ? argstr : "", diff --git a/src/ping/cli/parse.c b/src/ping/cli/parse.c index 82b1246..db0ece7 100644 --- a/src/ping/cli/parse.c +++ b/src/ping/cli/parse.c @@ -35,5 +35,5 @@ init_config(struct ping_config *config) config->interval = DEFAULT_INTERVAL; config->ttl = DEFAULT_TTL; config->packet_size = DEFAULT_PACKET_SIZE; - config->timeout = DEFAULT_TIMEOUT; + config->linger = DEFAULT_LINGER; } diff --git a/src/ping/core/loop.c b/src/ping/core/loop.c index 57da66c..21dd649 100644 --- a/src/ping/core/loop.c +++ b/src/ping/core/loop.c @@ -7,7 +7,7 @@ #include "internal/ping/scheduler.h" /* Forward declarations */ -static int deadline_expired(const struct ping_state *state); +static int timeout_expired(const struct ping_state *state); static int linger_expired(const struct ping_state *state); static int should_stop(const struct ping_state *state); static int can_send_more(const struct ping_state *state); @@ -28,18 +28,18 @@ ping_loop(struct ping_state *state, size_t payload_len) } static int -deadline_expired(const struct ping_state *state) +timeout_expired(const struct ping_state *state) { struct timespec now; double elapsed; - if (0.0 == state->config->deadline) + if (0.0 == state->config->timeout) return 0; if (0 != icmp_get_time(&now)) return 0; elapsed = (double)(now.tv_sec - state->start_time.tv_sec) + (double)(now.tv_nsec - state->start_time.tv_nsec) / 1e9; - return elapsed >= state->config->deadline; + return elapsed >= state->config->timeout; } static int @@ -54,7 +54,7 @@ linger_expired(const struct ping_state *state) return 0; elapsed = (double)(now.tv_sec - state->linger_start.tv_sec) + (double)(now.tv_nsec - state->linger_start.tv_nsec) / 1e9; - return elapsed >= state->config->timeout; + return elapsed >= state->config->linger; } static int @@ -64,7 +64,7 @@ should_stop(const struct ping_state *state) if (state->stop_flag) return 1; - if (deadline_expired(state)) + if (timeout_expired(state)) return 1; if (linger_expired(state)) return 1; diff --git a/src/ping/scheduler/scheduler_select_tv.c b/src/ping/scheduler/scheduler_select_tv.c index 3f1dbd9..eca0d26 100644 --- a/src/ping/scheduler/scheduler_select_tv.c +++ b/src/ping/scheduler/scheduler_select_tv.c @@ -5,5 +5,5 @@ void ping_scheduler_select_tv(const struct ping_config *config, struct timeval *tv) { tv->tv_usec = 0; - tv->tv_sec = (long)config->timeout * !HAS_FLAG(config->flags, FLAG_FLOOD); + tv->tv_sec = (long)config->linger * !HAS_FLAG(config->flags, FLAG_FLOOD); }