]> git.ipfire.org Git - thirdparty/mtr.git/commitdiff
Raw output: add x for a ping-packet-sent event. 85/head
authorGuo Yixuan <culu.gyx@gmail.com>
Tue, 14 Apr 2015 23:53:34 +0000 (19:53 -0400)
committerGUO Yixuan <culu.gyx@gmail.com>
Thu, 9 Jul 2015 00:58:57 +0000 (20:58 -0400)
This is needed for loss rate calculation.
Supports ICMP/UDP/TCP.
Also adds sequence number to pingline.

FORMATS
display.c
display.h
net.c
raw.c
raw.h

diff --git a/FORMATS b/FORMATS
index 7cddb55975c079fd41a91ac73e7e41f29fefe990..5df870b365bd4eb8b317a2821dea683278fb9d50 100644 (file)
--- 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 <pos> <host IP>
 
+xmitline:
+x <pos> <seqnum>
+
 pingline:
-p <pos> <pingtime (ms)>
+p <pos> <pingtime (ms)> <seqnum>
 
 dnsline: 
 d <pos> <hostname>
index 3545467896968d740182be6bc7693af4de36d0bb..51d3036c2da999e5ed210d9c326c7ead584bcf09 100644 (file)
--- 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;
   }
 }
index 6168914b94428f9cd0abdb97844f15632e7d1c53..eb821ea475960404e0d83e43147dd6ca73c19513 100644 (file)
--- 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 75b23d475e2696964ce8e56d84bbec14c3a9e0cf..036832ad389b66b528e38c2db1caf00509b597f0 100644 (file)
--- 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 0e1f4f46eddf5b1dee2673f3daf016bbc86e48be..f8e887648aaeca6f0de331b058e8e9c9bd3739f5 100644 (file)
--- 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 357c8f3cbc087ebc723bb395ce24e4431d61679b..3679f58889afca603b9b55d2816d60362a203488 100644 (file)
--- 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);