1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-05-14 07:54:58 +00:00

Utilities: Add count option for ping

This commit is contained in:
brapru 2021-07-24 16:30:44 -04:00 committed by Andreas Kling
parent 028e4bd2ae
commit 3013ca5fd0

View file

@ -22,11 +22,32 @@
static int total_pings;
static int successful_pings;
static int count;
static uint32_t total_ms;
static int min_ms;
static int max_ms;
static const char* host;
static void closing_statistics()
{
int packet_loss = 100;
outln();
outln("--- {} ping statistics ---", host);
if (total_pings)
packet_loss -= 100.0f * successful_pings / total_pings;
outln("{} packets transmitted, {} received, {}% packet loss",
total_pings, successful_pings, packet_loss);
int average_ms = 0;
if (successful_pings)
average_ms = total_ms / successful_pings;
outln("rtt min/avg/max = {}/{}/{} ms", min_ms, average_ms, max_ms);
exit(0);
};
int main(int argc, char** argv)
{
if (pledge("stdio id inet unix sigaction", nullptr) < 0) {
@ -36,6 +57,7 @@ int main(int argc, char** argv)
Core::ArgsParser args_parser;
args_parser.add_positional_argument(host, "Host to ping", "host");
args_parser.add_option(count, "Stop after sending specified number of ECHO_REQUEST packets.", "count", 'c', "count");
args_parser.parse(argc, argv);
int fd = socket(AF_INET, SOCK_RAW, IPPROTO_ICMP);
@ -99,22 +121,7 @@ int main(int argc, char** argv)
uint16_t seq = 1;
sighandler_t ret = signal(SIGINT, [](int) {
int packet_loss = 100;
outln();
outln("--- {} ping statistics ---", host);
if (total_pings)
packet_loss -= 100.0f * successful_pings / total_pings;
outln("{} packets transmitted, {} received, {}% packet loss",
total_pings, successful_pings, packet_loss);
int average_ms = 0;
if (successful_pings)
average_ms = total_ms / successful_pings;
outln("rtt min/avg/max = {}/{}/{} ms", min_ms, average_ms, max_ms);
exit(0);
closing_statistics();
});
if (ret == SIG_ERR) {
@ -146,7 +153,10 @@ int main(int argc, char** argv)
return 1;
}
total_pings++;
if (count && total_pings == count)
closing_statistics();
else
total_pings++;
for (;;) {
PongPacket pong_packet;