From cd20cc063245523d51013849fa28eb0cac013171 Mon Sep 17 00:00:00 2001 From: Lorenz Kästle <12514511+RincewindsHat@users.noreply.github.com> Date: Mon, 23 Jun 2025 10:17:28 +0200 Subject: check_icmp: add long options, add output format option This commit switches check_icmp from getopt to getopt_long to provide long options too and (most importantly) homogenize option parsing between the different plugins. --- plugins-root/check_icmp.d/check_icmp_helpers.c | 2 ++ 1 file changed, 2 insertions(+) (limited to 'plugins-root/check_icmp.d/check_icmp_helpers.c') diff --git a/plugins-root/check_icmp.d/check_icmp_helpers.c b/plugins-root/check_icmp.d/check_icmp_helpers.c index ec786305..9acc96fd 100644 --- a/plugins-root/check_icmp.d/check_icmp_helpers.c +++ b/plugins-root/check_icmp.d/check_icmp_helpers.c @@ -52,6 +52,8 @@ check_icmp_config check_icmp_config_init() { .number_of_hosts = 0, .hosts = NULL, + + .output_format_is_set = false, }; return tmp; } -- cgit v1.2.3-74-g34f1 From b08bafc45cea008abb46e0891c55e7745e117aae Mon Sep 17 00:00:00 2001 From: Lorenz Kästle <12514511+RincewindsHat@users.noreply.github.com> Date: Mon, 23 Jun 2025 10:52:56 +0200 Subject: check_icmp: remove paket_interval, was never used anyway --- plugins-root/check_icmp.c | 88 +++++++++++--------------- plugins-root/check_icmp.d/check_icmp_helpers.c | 1 - plugins-root/check_icmp.d/config.h | 1 - 3 files changed, 37 insertions(+), 53 deletions(-) (limited to 'plugins-root/check_icmp.d/check_icmp_helpers.c') diff --git a/plugins-root/check_icmp.c b/plugins-root/check_icmp.c index d181af56..524e1fb9 100644 --- a/plugins-root/check_icmp.c +++ b/plugins-root/check_icmp.c @@ -151,10 +151,9 @@ static void set_source_ip(char *arg, int icmp_sock, sa_family_t addr_family); /* Receiving data */ static int wait_for_reply(check_icmp_socket_set sockset, time_t time_interval, - unsigned short icmp_pkt_size, time_t *pkt_interval, - time_t *target_interval, uint16_t sender_id, ping_target **table, - unsigned short packets, unsigned short number_of_targets, - check_icmp_state *program_state); + unsigned short icmp_pkt_size, time_t *target_interval, uint16_t sender_id, + ping_target **table, unsigned short packets, + unsigned short number_of_targets, check_icmp_state *program_state); typedef struct { sa_family_t recv_proto; @@ -164,9 +163,9 @@ static recvfrom_wto_wrapper recvfrom_wto(check_icmp_socket_set sockset, void *bu struct sockaddr *saddr, time_t *timeout, struct timeval *received_timestamp); static int handle_random_icmp(unsigned char *packet, struct sockaddr_storage *addr, - time_t *pkt_interval, time_t *target_interval, uint16_t sender_id, - ping_target **table, unsigned short packets, - unsigned short number_of_targets, check_icmp_state *program_state); + time_t *target_interval, uint16_t sender_id, ping_target **table, + unsigned short packets, unsigned short number_of_targets, + check_icmp_state *program_state); /* Sending data */ static int send_icmp_ping(check_icmp_socket_set sockset, ping_target *host, @@ -198,11 +197,11 @@ static parse_threshold2_helper_wrapper parse_threshold2_helper(char *threshold_s threshold_mode mode); /* main test function */ -static void run_checks(unsigned short icmp_pkt_size, time_t *pkt_interval, time_t *target_interval, - uint16_t sender_id, check_icmp_execution_mode mode, - time_t max_completion_time, struct timeval prog_start, ping_target **table, - unsigned short packets, check_icmp_socket_set sockset, - unsigned short number_of_targets, check_icmp_state *program_state); +static void run_checks(unsigned short icmp_pkt_size, time_t *target_interval, uint16_t sender_id, + check_icmp_execution_mode mode, time_t max_completion_time, + struct timeval prog_start, ping_target **table, unsigned short packets, + check_icmp_socket_set sockset, unsigned short number_of_targets, + check_icmp_state *program_state); mp_subcheck evaluate_target(ping_target target, check_icmp_mode_switches modes, check_icmp_threshold warn, check_icmp_threshold crit); @@ -297,14 +296,12 @@ check_icmp_config_wrapper process_arguments(int argc, char **argv) { result.config.mode = MODE_ICMP; } else if (!strcmp(progname, "check_host")) { result.config.mode = MODE_HOSTCHECK; - result.config.pkt_interval = 1000000; result.config.number_of_packets = 5; result.config.crit.rta = result.config.warn.rta = 1000000; result.config.crit.pl = result.config.warn.pl = 100; } else if (!strcmp(progname, "check_rta_multi")) { result.config.mode = MODE_ALL; result.config.target_interval = 0; - result.config.pkt_interval = 50000; result.config.number_of_packets = 5; } /* support "--help" and "--version" */ @@ -418,13 +415,7 @@ check_icmp_config_wrapper process_arguments(int argc, char **argv) { } } break; case 'i': { - get_timevar_wrapper parsed_time = get_timevar(optarg); - - if (parsed_time.error_code == OK) { - result.config.pkt_interval = parsed_time.time_range; - } else { - crash("failed to parse packet interval"); - } + // packet_interval was unused and is now removed } break; case 'I': { get_timevar_wrapper parsed_time = get_timevar(optarg); @@ -738,8 +729,8 @@ static const char *get_icmp_error_msg(unsigned char icmp_type, unsigned char icm } static int handle_random_icmp(unsigned char *packet, struct sockaddr_storage *addr, - time_t *pkt_interval, time_t *target_interval, - const uint16_t sender_id, ping_target **table, unsigned short packets, + time_t *target_interval, const uint16_t sender_id, + ping_target **table, unsigned short packets, const unsigned short number_of_targets, check_icmp_state *program_state) { struct icmp icmp_packet; @@ -799,7 +790,6 @@ static int handle_random_icmp(unsigned char *packet, struct sockaddr_storage *ad /* source quench means we're sending too fast, so increase the * interval and mark this packet lost */ if (icmp_packet.icmp_type == ICMP_SOURCEQUENCH) { - *pkt_interval = (unsigned int)((double)*pkt_interval * PACKET_BACKOFF_FACTOR); *target_interval = (unsigned int)((double)*target_interval * TARGET_BACKOFF_FACTOR); } else { program_state->targets_down++; @@ -931,18 +921,17 @@ int main(int argc, char **argv) { gettimeofday(&prog_start, NULL); time_t max_completion_time = - ((config.pkt_interval * config.number_of_targets * config.number_of_packets) + - (config.target_interval * config.number_of_targets)) + + (config.target_interval * config.number_of_targets) + (config.crit.rta * config.number_of_targets * config.number_of_packets) + config.crit.rta; if (debug) { printf("packets: %u, targets: %u\n" - "target_interval: %0.3f, pkt_interval %0.3f\n" + "target_interval: %0.3f\n" "crit.rta: %0.3f\n" "max_completion_time: %0.3f\n", config.number_of_packets, config.number_of_targets, - (float)config.target_interval / 1000, (float)config.pkt_interval / 1000, - (float)config.crit.rta / 1000, (float)max_completion_time / 1000); + (float)config.target_interval / 1000, (float)config.crit.rta / 1000, + (float)max_completion_time / 1000); } if (debug) { @@ -955,8 +944,7 @@ int main(int argc, char **argv) { if (debug) { printf("crit = {%ld, %u%%}, warn = {%ld, %u%%}\n", config.crit.rta, config.crit.pl, config.warn.rta, config.warn.pl); - printf("pkt_interval: %ld target_interval: %ld\n", config.pkt_interval, - config.target_interval); + printf("target_interval: %ld\n", config.target_interval); printf("icmp_pkt_size: %u timeout: %u\n", config.icmp_pkt_size, timeout); } @@ -980,14 +968,13 @@ int main(int argc, char **argv) { target_index++; } - time_t pkt_interval = config.pkt_interval; time_t target_interval = config.target_interval; check_icmp_state program_state = check_icmp_state_init(); - run_checks(config.icmp_data_size, &pkt_interval, &target_interval, config.sender_id, - config.mode, max_completion_time, prog_start, table, config.number_of_packets, - sockset, config.number_of_targets, &program_state); + run_checks(config.icmp_data_size, &target_interval, config.sender_id, config.mode, + max_completion_time, prog_start, table, config.number_of_packets, sockset, + config.number_of_targets, &program_state); errno = 0; @@ -1006,7 +993,7 @@ int main(int argc, char **argv) { mp_exit(overall); } -static void run_checks(unsigned short icmp_pkt_size, time_t *pkt_interval, time_t *target_interval, +static void run_checks(unsigned short icmp_pkt_size, time_t *target_interval, const uint16_t sender_id, const check_icmp_execution_mode mode, const time_t max_completion_time, const struct timeval prog_start, ping_target **table, const unsigned short packets, @@ -1039,17 +1026,15 @@ static void run_checks(unsigned short icmp_pkt_size, time_t *pkt_interval, time_ if (targets_alive(number_of_targets, program_state->targets_down) || get_timevaldiff(prog_start, prog_start) < max_completion_time || !(mode == MODE_HOSTCHECK && program_state->targets_down)) { - wait_for_reply(sockset, *target_interval, icmp_pkt_size, pkt_interval, - target_interval, sender_id, table, packets, number_of_targets, - program_state); + wait_for_reply(sockset, *target_interval, icmp_pkt_size, target_interval, sender_id, + table, packets, number_of_targets, program_state); } } if (targets_alive(number_of_targets, program_state->targets_down) || get_timevaldiff_to_now(prog_start) < max_completion_time || !(mode == MODE_HOSTCHECK && program_state->targets_down)) { - wait_for_reply(sockset, *pkt_interval * number_of_targets, icmp_pkt_size, pkt_interval, - target_interval, sender_id, table, packets, number_of_targets, - program_state); + wait_for_reply(sockset, number_of_targets, icmp_pkt_size, target_interval, sender_id, + table, packets, number_of_targets, program_state); } } @@ -1079,8 +1064,8 @@ static void run_checks(unsigned short icmp_pkt_size, time_t *pkt_interval, time_ if (targets_alive(number_of_targets, program_state->targets_down) || get_timevaldiff_to_now(prog_start) < max_completion_time || !(mode == MODE_HOSTCHECK && program_state->targets_down)) { - wait_for_reply(sockset, final_wait, icmp_pkt_size, pkt_interval, target_interval, - sender_id, table, packets, number_of_targets, program_state); + wait_for_reply(sockset, final_wait, icmp_pkt_size, target_interval, sender_id, table, + packets, number_of_targets, program_state); } } } @@ -1096,10 +1081,9 @@ static void run_checks(unsigned short icmp_pkt_size, time_t *pkt_interval, time_ * icmp echo reply : the rest */ static int wait_for_reply(check_icmp_socket_set sockset, const time_t time_interval, - unsigned short icmp_pkt_size, time_t *pkt_interval, - time_t *target_interval, uint16_t sender_id, ping_target **table, - const unsigned short packets, const unsigned short number_of_targets, - check_icmp_state *program_state) { + unsigned short icmp_pkt_size, time_t *target_interval, uint16_t sender_id, + ping_target **table, const unsigned short packets, + const unsigned short number_of_targets, check_icmp_state *program_state) { union icmp_packet packet; if (!(packet.buf = malloc(icmp_pkt_size))) { crash("send_icmp_ping(): failed to malloc %d bytes for send buffer", icmp_pkt_size); @@ -1185,8 +1169,8 @@ static int wait_for_reply(check_icmp_socket_set sockset, const time_t time_inter printf("not a proper ICMP_ECHOREPLY\n"); } - handle_random_icmp(buf + hlen, &resp_addr, pkt_interval, target_interval, sender_id, - table, packets, number_of_targets, program_state); + handle_random_icmp(buf + hlen, &resp_addr, target_interval, sender_id, table, packets, + number_of_targets, program_state); continue; } @@ -2111,8 +2095,10 @@ void print_help(void) { printf(" %s", _("number of packets to send (default ")); printf("%u)\n", DEFAULT_NUMBER_OF_PACKETS); printf(" %s\n", "-i"); - printf(" %s", _("max packet interval (default ")); + printf(" %s", _("[DEPRECATED] packet interval (default ")); printf("%0.3fms)\n", (float)DEFAULT_PKT_INTERVAL / 1000); + printf(" %s", _("This option was never actually used and is just mentioned here for " + "historical purposes")); printf(" %s\n", "-I"); printf(" %s%0.3fms)\n The time interval to wait in between one target and the next", _("max target interval (default "), (float)DEFAULT_TARGET_INTERVAL / 1000); diff --git a/plugins-root/check_icmp.d/check_icmp_helpers.c b/plugins-root/check_icmp.d/check_icmp_helpers.c index 9acc96fd..0be0f2dc 100644 --- a/plugins-root/check_icmp.d/check_icmp_helpers.c +++ b/plugins-root/check_icmp.d/check_icmp_helpers.c @@ -35,7 +35,6 @@ check_icmp_config check_icmp_config_init() { .ttl = DEFAULT_TTL, .icmp_data_size = DEFAULT_PING_DATA_SIZE, .icmp_pkt_size = DEFAULT_PING_DATA_SIZE + ICMP_MINLEN, - .pkt_interval = DEFAULT_PKT_INTERVAL, .target_interval = 0, .number_of_packets = DEFAULT_NUMBER_OF_PACKETS, diff --git a/plugins-root/check_icmp.d/config.h b/plugins-root/check_icmp.d/config.h index 8092e343..1568d6c3 100644 --- a/plugins-root/check_icmp.d/config.h +++ b/plugins-root/check_icmp.d/config.h @@ -61,7 +61,6 @@ typedef struct { unsigned long ttl; unsigned short icmp_data_size; unsigned short icmp_pkt_size; - time_t pkt_interval; time_t target_interval; unsigned short number_of_packets; -- cgit v1.2.3-74-g34f1 From 771ccfa52691e591be3736b6d03f36e69d82e464 Mon Sep 17 00:00:00 2001 From: Lorenz Kästle <12514511+RincewindsHat@users.noreply.github.com> Date: Mon, 23 Jun 2025 11:41:24 +0200 Subject: check_icmp: remove unnecessary variable --- plugins-root/check_icmp.c | 3 +-- plugins-root/check_icmp.d/check_icmp_helpers.c | 1 - plugins-root/check_icmp.d/config.h | 1 - 3 files changed, 1 insertion(+), 4 deletions(-) (limited to 'plugins-root/check_icmp.d/check_icmp_helpers.c') diff --git a/plugins-root/check_icmp.c b/plugins-root/check_icmp.c index 3edfffa2..be686ee3 100644 --- a/plugins-root/check_icmp.c +++ b/plugins-root/check_icmp.c @@ -407,7 +407,6 @@ check_icmp_config_wrapper process_arguments(int argc, char **argv) { if ((unsigned long)size >= (sizeof(struct icmp) + sizeof(struct icmp_ping_data)) && size < MAX_PING_DATA) { result.config.icmp_data_size = (unsigned short)size; - result.config.icmp_pkt_size = (unsigned short)(size + ICMP_MINLEN); } else { usage_va("ICMP data length must be between: %lu and %lu", sizeof(struct icmp) + sizeof(struct icmp_ping_data), @@ -945,7 +944,7 @@ int main(int argc, char **argv) { printf("crit = {%ld, %u%%}, warn = {%ld, %u%%}\n", config.crit.rta, config.crit.pl, config.warn.rta, config.warn.pl); printf("target_interval: %ld\n", config.target_interval); - printf("icmp_pkt_size: %u timeout: %u\n", config.icmp_pkt_size, timeout); + printf("icmp_pkt_size: %u timeout: %u\n", config.icmp_data_size + ICMP_MINLEN, timeout); } if (config.min_hosts_alive < -1) { diff --git a/plugins-root/check_icmp.d/check_icmp_helpers.c b/plugins-root/check_icmp.d/check_icmp_helpers.c index 0be0f2dc..d56fbd8b 100644 --- a/plugins-root/check_icmp.d/check_icmp_helpers.c +++ b/plugins-root/check_icmp.d/check_icmp_helpers.c @@ -34,7 +34,6 @@ check_icmp_config check_icmp_config_init() { .ttl = DEFAULT_TTL, .icmp_data_size = DEFAULT_PING_DATA_SIZE, - .icmp_pkt_size = DEFAULT_PING_DATA_SIZE + ICMP_MINLEN, .target_interval = 0, .number_of_packets = DEFAULT_NUMBER_OF_PACKETS, diff --git a/plugins-root/check_icmp.d/config.h b/plugins-root/check_icmp.d/config.h index 1568d6c3..ab578ba5 100644 --- a/plugins-root/check_icmp.d/config.h +++ b/plugins-root/check_icmp.d/config.h @@ -60,7 +60,6 @@ typedef struct { unsigned long ttl; unsigned short icmp_data_size; - unsigned short icmp_pkt_size; time_t target_interval; unsigned short number_of_packets; -- cgit v1.2.3-74-g34f1