diff options
author | Natanael Copa <ncopa@alpinelinux.org> | 2012-03-14 10:08:51 +0100 |
---|---|---|
committer | Natanael Copa <ncopa@alpinelinux.org> | 2012-03-14 10:08:51 +0100 |
commit | 68e94a0780098e8b5e4772a270f91a60a370b8f6 (patch) | |
tree | 6bf904cfcf271ad9f8aa207d6cf5e171f8761d20 /pingu_ping.c | |
parent | 2f5cbff07d2872f78c92efe854385d083c4dfbca (diff) | |
download | pingu-68e94a0780098e8b5e4772a270f91a60a370b8f6.tar.bz2 pingu-68e94a0780098e8b5e4772a270f91a60a370b8f6.tar.xz |
pingu_adm: new admin command for dumping active pings
Diffstat (limited to 'pingu_ping.c')
-rw-r--r-- | pingu_ping.c | 15 |
1 files changed, 14 insertions, 1 deletions
diff --git a/pingu_ping.c b/pingu_ping.c index 8ef0596..186673e 100644 --- a/pingu_ping.c +++ b/pingu_ping.c @@ -1,4 +1,5 @@ #include <arpa/inet.h> +#include <net/if.h> #include <netinet/in.h> #include <netinet/ip.h> #include <netinet/ip_icmp.h> @@ -7,6 +8,7 @@ #include <stdio.h> #include <stdlib.h> +#include <string.h> #include <unistd.h> #include <ev.h> @@ -74,7 +76,7 @@ static struct pingu_ping *pingu_ping_find(struct icmphdr *icp, struct pingu_ping *ping; if (icp->type != ICMP_ECHOREPLY || icp->un.echo.id != getpid()) return NULL; - + list_for_each_entry(ping, ping_list, ping_list_entry) { if (sockaddr_cmp(&ping->host->burst.saddr, from) == 0 && ping->seq == ntohs(icp->un.echo.sequence)) @@ -142,3 +144,14 @@ void pingu_ping_cleanup(struct ev_loop *loop, struct list_head *ping_list) pingu_ping_free(loop, ping); } } + +void pingu_ping_dump(int fd, struct list_head *ping_list, const char *prefix) +{ + struct pingu_ping *ping; + char str[IF_NAMESIZE + 80]; + list_for_each_entry(ping, ping_list, ping_list_entry) { + snprintf(str, sizeof(str), "%s %s %i\n", + prefix, ping->host->host, ping->seq); + write(fd, str, strlen(str)); + } +} |