aboutsummaryrefslogtreecommitdiffstats
path: root/pingu_ping.c
diff options
context:
space:
mode:
Diffstat (limited to 'pingu_ping.c')
-rw-r--r--pingu_ping.c15
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));
+ }
+}