diff --git a/includes/internal/ping/output.h b/includes/internal/ping/output.h index dd7efd1..7097395 100644 --- a/includes/internal/ping/output.h +++ b/includes/internal/ping/output.h @@ -8,7 +8,7 @@ #include "internal/ping/ping_state.h" void ping_output_start(const struct ping_config *config, - struct in_addr dest, size_t payload_bytes); + struct destinations *dest, size_t payload_bytes); void ping_output_packet(const icmp_reply_t *reply, uint16_t seq, int64_t rtt_ns, size_t payload_bytes, const struct ping_config *config); void ping_output_error(const icmp_reply_t *reply, diff --git a/includes/internal/ping/parse_utils.h b/includes/internal/ping/parse_utils.h index d130b25..5acfdbb 100644 --- a/includes/internal/ping/parse_utils.h +++ b/includes/internal/ping/parse_utils.h @@ -4,7 +4,7 @@ #include #include "ping/ping.h" -int cli_parse_inet_addr(const char *s, struct in_addr *out); +int cli_parse_inet_addr(const char *s, struct destinations *out); int cli_parse_destinations(int argc, char **argv, int first_arg, struct ping_config *config); diff --git a/includes/ping/ping.h b/includes/ping/ping.h index 011d7e6..0fc6580 100644 --- a/includes/ping/ping.h +++ b/includes/ping/ping.h @@ -8,7 +8,10 @@ struct ping_config { /* Targets */ - struct in_addr *destinations; + struct destinations { + const char *dom; + struct in_addr ip; + } *destinations; size_t nb_destinations; /* Options */ diff --git a/src/ping/cli/parse_utils/parse_destinations.c b/src/ping/cli/parse_utils/parse_destinations.c index 28271f9..6699044 100644 --- a/src/ping/cli/parse_utils/parse_destinations.c +++ b/src/ping/cli/parse_utils/parse_destinations.c @@ -3,6 +3,7 @@ #include "ping/cli.h" #include "internal/cli/messages.h" #include "internal/ping/parse_utils.h" +#include "ping/ping.h" int cli_parse_destinations(int argc, char **argv, int first_arg, @@ -13,7 +14,7 @@ cli_parse_destinations(int argc, char **argv, int first_arg, config->nb_destinations = (size_t)(argc - first_arg); config->destinations = malloc(config->nb_destinations - * sizeof(struct in_addr)); + * sizeof(struct destinations)); if (NULL == config->destinations) return CLI_ERROR; diff --git a/src/ping/cli/parse_utils/parse_inet_addr.c b/src/ping/cli/parse_utils/parse_inet_addr.c index d0274ef..1aa769d 100644 --- a/src/ping/cli/parse_utils/parse_inet_addr.c +++ b/src/ping/cli/parse_utils/parse_inet_addr.c @@ -1,9 +1,10 @@ +#include "ping/ping.h" #include #include #include int -cli_parse_inet_addr(const char *s, struct in_addr *out) +cli_parse_inet_addr(const char *s, struct destinations *out) { struct addrinfo hints; struct addrinfo *res; @@ -18,6 +19,7 @@ cli_parse_inet_addr(const char *s, struct in_addr *out) memcpy(&sin, res->ai_addr, sizeof(sin)); freeaddrinfo(res); - *out = sin.sin_addr; + out->ip = sin.sin_addr; + out->dom = s; return 0; } diff --git a/src/ping/core/ping.c b/src/ping/core/ping.c index 8a307d5..6bc1ccd 100644 --- a/src/ping/core/ping.c +++ b/src/ping/core/ping.c @@ -13,11 +13,11 @@ #include "internal/ping/loop.h" /* Forward declarations */ -static int ping_one(const struct ping_config *config, struct in_addr dest, - icmp_handle_t *handle); +static int ping_one(const struct ping_config *config, + struct destinations *dest, icmp_handle_t *handle); static void ping_init_state(struct ping_state *state, struct ping_stats *stats, - struct ping_tracker *tracker, const struct ping_config *config, struct in_addr - dest, icmp_handle_t *handle); + struct ping_tracker *tracker, const struct ping_config *config, + struct in_addr dest, icmp_handle_t *handle); static void ping_first_send(struct ping_state *state, size_t payload_len); /* -------------------- */ @@ -42,7 +42,7 @@ ping_run(const struct ping_config *config) while (i < config->nb_destinations) { - if (0 != ping_one(config, config->destinations[i], handle)) + if (0 != ping_one(config, &config->destinations[i], handle)) ret = 1; i++; } @@ -52,7 +52,7 @@ cleanup: } static int -ping_one(const struct ping_config *config, struct in_addr dest, +ping_one(const struct ping_config *config, struct destinations *dest, icmp_handle_t *handle) { struct ping_state state; @@ -60,13 +60,13 @@ ping_one(const struct ping_config *config, struct in_addr dest, struct ping_tracker tracker; size_t payload_len; - ping_init_state(&state, &stats, &tracker, config, dest, handle); + ping_init_state(&state, &stats, &tracker, config, dest->ip, handle); payload_len = config->packet_size; ping_scheduler_init(&state); ping_output_start(config, dest, payload_len); ping_first_send(&state, payload_len); ping_loop(&state, payload_len); - ping_output_summary(&state, dest); + ping_output_summary(&state, dest->ip); return tracker.nb_recv <= state.nb_errors; } diff --git a/src/ping/output/start.c b/src/ping/output/start.c index ea66d91..223c2fa 100644 --- a/src/ping/output/start.c +++ b/src/ping/output/start.c @@ -4,15 +4,16 @@ #include "ping/ft_ping_flags.h" #include "internal/ping/output.h" +#include "ping/ping.h" void ping_output_start(const struct ping_config *config, - struct in_addr dest, size_t payload_bytes) + struct destinations *dest, size_t payload_bytes) { char dest_str[INET_ADDRSTRLEN]; - inet_ntop(AF_INET, &dest, dest_str, sizeof(dest_str)); - printf("PING %s (%s): %zu data bytes", dest_str, dest_str, payload_bytes); + inet_ntop(AF_INET, &dest->ip, dest_str, sizeof(dest_str)); + printf("PING %s (%s): %zu data bytes", dest->dom, dest_str, payload_bytes); if (HAS_FLAG(config->flags, FLAG_VERBOSE)) { unsigned int id;