From bafad6148dc95e5bd51784f446f2c7dab866a3c4 Mon Sep 17 00:00:00 2001 From: Guo Yixuan Date: Tue, 14 Apr 2015 19:53:34 -0400 Subject: [PATCH] Raw output: add x for a ping-packet-sent event. This is needed for loss rate calculation. Supports ICMP/UDP/TCP. Also adds sequence number to pingline. --- FORMATS | 7 +++++-- display.c | 14 ++++++++++++-- display.h | 3 ++- net.c | 4 +++- raw.c | 12 ++++++++++-- raw.h | 3 ++- 6 files changed, 34 insertions(+), 9 deletions(-) diff --git a/FORMATS b/FORMATS index 7cddb55..5df870b 100644 --- a/FORMATS +++ b/FORMATS @@ -11,13 +11,16 @@ The split format is: The "raw" format is: -hostline|pingline|dnsline|timestampline +hostline|xmitline|pingline|dnsline|timestampline hostline: h +xmitline: +x + pingline: -p +p dnsline: d diff --git a/display.c b/display.c index 3545467..51d3036 100644 --- a/display.c +++ b/display.c @@ -178,7 +178,17 @@ int display_keyaction(void) } -void display_rawping(int host, int msec) +void display_rawxmit(int host, int seq) +{ + switch(DisplayMode) { + case DisplayRaw: + raw_rawxmit (host, seq); + break; + } +} + + +void display_rawping(int host, int msec, int seq) { switch(DisplayMode) { case DisplayReport: @@ -190,7 +200,7 @@ void display_rawping(int host, int msec) case DisplayGTK: break; case DisplayRaw: - raw_rawping (host, msec); + raw_rawping (host, msec, seq); break; } } diff --git a/display.h b/display.h index 6168914..eb821ea 100644 --- a/display.h +++ b/display.h @@ -34,7 +34,8 @@ void display_detect(int *argc, char ***argv); void display_open(void); void display_close(time_t now); void display_redraw(void); -void display_rawping(int hostnum, int msec); +void display_rawxmit(int hostnum, int seq); +void display_rawping(int hostnum, int msec, int seq); void display_rawhost(int hostnum, ip_t *ip_addr); int display_keyaction(void); void display_loop(void); diff --git a/net.c b/net.c index 75b23d4..036832a 100644 --- a/net.c +++ b/net.c @@ -278,6 +278,8 @@ int udp_checksum(void *pheader, void *udata, int psize, int dsize) void save_sequence(int index, int seq) { + display_rawxmit(index, seq); + sequence[seq].index = index; sequence[seq].transit = 1; sequence[seq].saved_seq = ++host[index].xmit; @@ -815,7 +817,7 @@ void net_process_ping(int seq, struct mplslen mpls, void * addr, struct timeval host[index].transit = 0; net_save_return(index, sequence[seq].saved_seq, totusec); - display_rawping(index, totusec); + display_rawping(index, totusec, seq); } diff --git a/raw.c b/raw.c index 0e1f4f4..f8e8876 100644 --- a/raw.c +++ b/raw.c @@ -47,7 +47,15 @@ static char *addr_to_str(ip_t addr) } #endif -void raw_rawping (int host, int msec) +// Log an echo request, or a "ping" +void raw_rawxmit (int host, int seq) +{ + printf ("x %d %d\n", host, seq); + fflush (stdout); +} + +// Log an echo reply, or a "pong" +void raw_rawping (int host, int msec, int seq) { char *name; @@ -58,7 +66,7 @@ void raw_rawping (int host, int msec) printf ("d %d %s\n", host, name); } } - printf ("p %d %d\n", host, msec); + printf ("p %d %d %d\n", host, msec, seq); fflush (stdout); } diff --git a/raw.h b/raw.h index 357c8f3..3679f58 100644 --- a/raw.h +++ b/raw.h @@ -19,5 +19,6 @@ */ /* Prototypes for raw.c */ -void raw_rawping(int host, int msec); +void raw_rawxmit(int host, int seq); +void raw_rawping(int host, int msec, int seq); void raw_rawhost(int host, ip_t * addr); -- 2.47.2