* [PATCH v5 0/1] batctl: ping: Add subsecond precision to ping interval @ 2025-01-05 0:09 Noah Peterson 2025-01-05 0:09 ` [PATCH v5 1/1] " Noah Peterson 0 siblings, 1 reply; 5+ messages in thread From: Noah Peterson @ 2025-01-05 0:09 UTC (permalink / raw) To: b.a.t.m.a.n; +Cc: Noah Peterson Apologies for the prior errors. My text editor was showing all differences except for the added whitespace. I also failed to compile and test the code, but this version has been tested, and I can confirm it both compiles and runs as expected. Noah Peterson (1): batctl: ping: Add subsecond precision to ping interval ping.c | 27 ++++++++++++++++++++------- 1 file changed, 20 insertions(+), 7 deletions(-) -- 2.39.5 (Apple Git-154) ^ permalink raw reply [flat|nested] 5+ messages in thread
* [PATCH v5 1/1] batctl: ping: Add subsecond precision to ping interval 2025-01-05 0:09 [PATCH v5 0/1] batctl: ping: Add subsecond precision to ping interval Noah Peterson @ 2025-01-05 0:09 ` Noah Peterson 2025-01-05 7:12 ` Sven Eckelmann ` (2 more replies) 0 siblings, 3 replies; 5+ messages in thread From: Noah Peterson @ 2025-01-05 0:09 UTC (permalink / raw) To: b.a.t.m.a.n; +Cc: Noah Peterson, Noah Peterson Modify the batctl ping utility to accept both integer and floating-point values for the interval between sending pings. This enhancement allows specifying intervals with subsecond precision. For example: `sudo batctl ping aa:bb:cc:dd:ee:ff -i 0.5` Signed-off-by: Noah Peterson <noahbpeterson1997@gmail.com> --- v5: Fixing whitespace misalignment, correcting changelogs, removing old variable declaration, as noted by Sven <sven@narfation.org> v4: Rebasing on latest commit, reformatting into reverse X-mas tree order based on feedback from Sven <sven@narfation.org> v3: Reformatting code based on comments by Sven <sven@narfation.org> v2: Fixing use-after-free, adding a missing header file, noted by Sven <sven@narfation.org> --- ping.c | 27 ++++++++++++++++++++------- 1 file changed, 20 insertions(+), 7 deletions(-) diff --git a/ping.c b/ping.c index 14d9c21..6fd11b2 100644 --- a/ping.c +++ b/ping.c @@ -19,6 +19,7 @@ #include <stdint.h> #include <sys/select.h> #include <sys/time.h> +#include <time.h> #include <netinet/if_ether.h> #include "batadv_packet_compat.h" @@ -58,18 +59,21 @@ static int ping(struct state *state, int argc, char **argv) struct batadv_icmp_packet_rr icmp_packet_out; struct batadv_icmp_packet_rr icmp_packet_in; uint8_t last_rr[BATADV_RR_LEN][ETH_ALEN]; + struct timespec loop_interval = {0, 0}; struct ether_addr *dst_mac = NULL; struct ether_addr *rr_mac = NULL; int disable_translate_mac = 0; + double fractional_part = 0.0; unsigned int seq_counter = 0; unsigned int packets_out = 0; unsigned int packets_in = 0; + double ping_interval = 0.0; + double integral_part = 0.0; unsigned int packets_loss; struct bat_host *bat_host; struct bat_host *rr_host; uint8_t last_rr_cur = 0; int ret = EXIT_FAILURE; - int loop_interval = 0; int loop_count = -1; int found_args = 1; size_t packet_len; @@ -86,6 +90,7 @@ static int ping(struct state *state, int argc, char **argv) int timeout = 1; int optchar; int rr = 0; + char *end; int res; int i; @@ -101,9 +106,17 @@ static int ping(struct state *state, int argc, char **argv) ping_usage(); return EXIT_SUCCESS; case 'i': - loop_interval = strtol(optarg, NULL, 10); - if (loop_interval < 1) - loop_interval = 1; + errno = 0; + ping_interval = strtod(optarg, &end); + if (errno) { + fprintf(stderr, "Error - invalid ping interval '%s'\n", optarg); + goto out; + } else { + ping_interval = fmax(ping_interval, 0.001); + } + fractional_part = modf(ping_interval, &integral_part); + loop_interval.tv_sec = (time_t)integral_part; + loop_interval.tv_nsec = (long)(fractional_part * 1000000000l); found_args += ((*((char *)(optarg - 1)) == optchar) ? 1 : 2); break; case 't': @@ -302,8 +315,8 @@ static int ping(struct state *state, int argc, char **argv) if (loop_count == 0) continue; - if (loop_interval > 0) - sleep(loop_interval); + if (loop_interval.tv_sec > 0 || loop_interval.tv_nsec > 0) + nanosleep(&loop_interval, NULL); else if ((tv.tv_sec != 0) || (tv.tv_usec != 0)) select(0, NULL, NULL, NULL, &tv); } @@ -330,7 +343,7 @@ static int ping(struct state *state, int argc, char **argv) printf("%u packets transmitted, %u received, %u%% packet loss\n", packets_out, packets_in, packets_loss); printf("rtt min/avg/max/mdev = %.3f/%.3f/%.3f/%.3f ms\n", - min, avg, max, mdev); + min, avg, max, mdev); if (packets_in) ret = EXIT_SUCCESS; -- 2.39.5 (Apple Git-154) ^ permalink raw reply related [flat|nested] 5+ messages in thread
* Re: [PATCH v5 1/1] batctl: ping: Add subsecond precision to ping interval 2025-01-05 0:09 ` [PATCH v5 1/1] " Noah Peterson @ 2025-01-05 7:12 ` Sven Eckelmann 2025-01-05 8:47 ` Sven Eckelmann 2025-01-06 13:49 ` Remi Pommarel 2 siblings, 0 replies; 5+ messages in thread From: Sven Eckelmann @ 2025-01-05 7:12 UTC (permalink / raw) To: b.a.t.m.a.n; +Cc: Noah Peterson [-- Attachment #1: Type: text/plain, Size: 572 bytes --] On Sunday, 5 January 2025 01:09:08 GMT+1 Noah Peterson wrote: [...] >v5: Fixing whitespace misalignment, [...] > @@ -330,7 +343,7 @@ static int ping(struct state *state, int argc, char **argv) > printf("%u packets transmitted, %u received, %u%% packet loss\n", > packets_out, packets_in, packets_loss); > printf("rtt min/avg/max/mdev = %.3f/%.3f/%.3f/%.3f ms\n", > - min, avg, max, mdev); > + min, avg, max, mdev); > > if (packets_in) > ret = EXIT_SUCCESS; Ehm..... Kind regards, Sven [-- Attachment #2: This is a digitally signed message part. --] [-- Type: application/pgp-signature, Size: 228 bytes --] ^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [PATCH v5 1/1] batctl: ping: Add subsecond precision to ping interval 2025-01-05 0:09 ` [PATCH v5 1/1] " Noah Peterson 2025-01-05 7:12 ` Sven Eckelmann @ 2025-01-05 8:47 ` Sven Eckelmann 2025-01-06 13:49 ` Remi Pommarel 2 siblings, 0 replies; 5+ messages in thread From: Sven Eckelmann @ 2025-01-05 8:47 UTC (permalink / raw) To: b.a.t.m.a.n; +Cc: Noah Peterson [-- Attachment #1: Type: text/plain, Size: 673 bytes --] On Sunday, 5 January 2025 01:09:08 GMT+1 Noah Peterson wrote: > + errno = 0; > + ping_interval = strtod(optarg, &end); > + if (errno) { You forgot to do anything with the end(ptr). Btw. end is a bad choice for the name because it shadows the global variable for "the first address past the end of the uninitialized data segment (also known as the BSS segment)". I will now change the patch myself because this amount of ping-pong for such a trivial patch is wasting everyones time and should be unnecessary. Please try to focus and recheck things before you submit your patches. Kind regards, Sven [-- Attachment #2: This is a digitally signed message part. --] [-- Type: application/pgp-signature, Size: 228 bytes --] ^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [PATCH v5 1/1] batctl: ping: Add subsecond precision to ping interval 2025-01-05 0:09 ` [PATCH v5 1/1] " Noah Peterson 2025-01-05 7:12 ` Sven Eckelmann 2025-01-05 8:47 ` Sven Eckelmann @ 2025-01-06 13:49 ` Remi Pommarel 2 siblings, 0 replies; 5+ messages in thread From: Remi Pommarel @ 2025-01-06 13:49 UTC (permalink / raw) To: Noah Peterson; +Cc: b.a.t.m.a.n Hi, On Sat, Jan 04, 2025 at 06:09:08PM -0600, Noah Peterson wrote: > Modify the batctl ping utility to accept both integer and floating-point > values for the interval between sending pings. This enhancement allows > specifying intervals with subsecond precision. > > For example: > `sudo batctl ping aa:bb:cc:dd:ee:ff -i 0.5` > > Signed-off-by: Noah Peterson <noahbpeterson1997@gmail.com> > --- > v5: Fixing whitespace misalignment, correcting changelogs, removing old > variable declaration, as noted by Sven <sven@narfation.org> > v4: Rebasing on latest commit, reformatting into reverse X-mas tree order based > on feedback from Sven <sven@narfation.org> > v3: Reformatting code based on comments by Sven > <sven@narfation.org> > v2: Fixing use-after-free, adding a missing header file, noted by Sven > <sven@narfation.org> > --- > ping.c | 27 ++++++++++++++++++++------- > 1 file changed, 20 insertions(+), 7 deletions(-) > > diff --git a/ping.c b/ping.c > index 14d9c21..6fd11b2 100644 > --- a/ping.c > +++ b/ping.c > @@ -19,6 +19,7 @@ > #include <stdint.h> > #include <sys/select.h> > #include <sys/time.h> > +#include <time.h> > #include <netinet/if_ether.h> > > #include "batadv_packet_compat.h" > @@ -58,18 +59,21 @@ static int ping(struct state *state, int argc, char **argv) > struct batadv_icmp_packet_rr icmp_packet_out; > struct batadv_icmp_packet_rr icmp_packet_in; > uint8_t last_rr[BATADV_RR_LEN][ETH_ALEN]; > + struct timespec loop_interval = {0, 0}; > struct ether_addr *dst_mac = NULL; > struct ether_addr *rr_mac = NULL; > int disable_translate_mac = 0; > + double fractional_part = 0.0; > unsigned int seq_counter = 0; > unsigned int packets_out = 0; > unsigned int packets_in = 0; > + double ping_interval = 0.0; > + double integral_part = 0.0; > unsigned int packets_loss; > struct bat_host *bat_host; > struct bat_host *rr_host; > uint8_t last_rr_cur = 0; > int ret = EXIT_FAILURE; > - int loop_interval = 0; > int loop_count = -1; > int found_args = 1; > size_t packet_len; > @@ -86,6 +90,7 @@ static int ping(struct state *state, int argc, char **argv) > int timeout = 1; > int optchar; > int rr = 0; > + char *end; > int res; > int i; > > @@ -101,9 +106,17 @@ static int ping(struct state *state, int argc, char **argv) > ping_usage(); > return EXIT_SUCCESS; > case 'i': > - loop_interval = strtol(optarg, NULL, 10); > - if (loop_interval < 1) > - loop_interval = 1; > + errno = 0; > + ping_interval = strtod(optarg, &end); > + if (errno) { > + fprintf(stderr, "Error - invalid ping interval '%s'\n", optarg); > + goto out; > + } else { > + ping_interval = fmax(ping_interval, 0.001); > + } If you are going to floor to 1 millisecond anyway why didn't you use msleep() (or fsleep() if you needed precision) then ? This would avoid the conversion to timespec and hence the use of modf(). Regards, -- Remi ^ permalink raw reply [flat|nested] 5+ messages in thread
end of thread, other threads:[~2025-01-06 13:52 UTC | newest] Thread overview: 5+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2025-01-05 0:09 [PATCH v5 0/1] batctl: ping: Add subsecond precision to ping interval Noah Peterson 2025-01-05 0:09 ` [PATCH v5 1/1] " Noah Peterson 2025-01-05 7:12 ` Sven Eckelmann 2025-01-05 8:47 ` Sven Eckelmann 2025-01-06 13:49 ` Remi Pommarel
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox