]> git.ipfire.org Git - thirdparty/mtr.git/commitdiff
show mpls information in raw output 336/head
authorSiyuan Miao <i@xswan.net>
Sun, 16 Feb 2020 01:19:22 +0000 (09:19 +0800)
committerSiyuan Miao <i@xswan.net>
Sun, 16 Feb 2020 02:17:53 +0000 (10:17 +0800)
FORMATS
ui/display.c
ui/display.h
ui/net.c
ui/raw.c
ui/raw.h

diff --git a/FORMATS b/FORMATS
index 3e64e177f1fa69034b111f26f6013b9cd381069f..d0e05ff6c5e5e8e43284e044ea01c27145c67547 100644 (file)
--- a/FORMATS
+++ b/FORMATS
@@ -11,7 +11,7 @@ The split format is:
 
 The "raw" format is:
 
-hostline|xmitline|pingline|dnsline|timestampline
+hostline|xmitline|pingline|dnsline|timestampline|mplsline
 
 hostline:
 h <pos> <host IP>
@@ -28,6 +28,8 @@ d <pos> <hostname>
 timestampline:
 t <pos> <pingtime> <timestamp>
 
+mplsline:
+m <pos> <label> <traffic_class> <bottom_stack> <ttl>
 
 Timestampline is not  yet implemented. Need to find out how to do
 ICMP timestamping first. :-)
index 9a8ac60a28fd49c4f9ca08eaec44edfc5d2b491b..e533f97e3c3a0b812fe81647d79b43b2d4f556a7 100644 (file)
@@ -225,10 +225,11 @@ void display_rawping(
 void display_rawhost(
     struct mtr_ctl *ctl,
     int host,
-    ip_t * ip_addr)
+    ip_t * ip_addr,
+    struct mplslen *mpls)
 {
     if (ctl->DisplayMode == DisplayRaw)
-        raw_rawhost(ctl, host, ip_addr);
+        raw_rawhost(ctl, host, ip_addr, mpls);
 }
 
 
index c577d3f018c56c7c7282468395dd1d20c95af51a..5b37b56c82883ecf9ed2c8fee57a19dc898a6a8e 100644 (file)
@@ -74,7 +74,8 @@ extern void display_rawping(
 extern void display_rawhost(
     struct mtr_ctl *ctl,
     int hostnum,
-    ip_t * ip_addr);
+    ip_t *ip_addr,
+    struct mplslen *mpls);
 extern int display_keyaction(
     struct mtr_ctl *ctl);
 extern void display_loop(
index fcb5d0129303330c54a5247fadcf045b9516ab9b..2b6aa8525ad80cd2816d8c675865dedea040b400 100644 (file)
--- a/ui/net.c
+++ b/ui/net.c
@@ -241,7 +241,7 @@ static void net_process_ping(
         /* should be out of if as addr can change */
         memcpy(&nh->addr, addrcopy, sockaddr_addr_size(sourcesockaddr));
         nh->mpls = *mpls;
-        display_rawhost(ctl, index, (void *) &(nh->addr));
+        display_rawhost(ctl, index, (void *)&(nh->addr), (void *)&(nh->mpls));
 
         /* multi paths */
         memcpy(&nh->addrs[0], addrcopy, sockaddr_addr_size(sourcesockaddr));
@@ -259,7 +259,7 @@ static void net_process_ping(
             memcpy(&nh->addrs[i], addrcopy, sockaddr_addr_size(sourcesockaddr));
 
             nh->mplss[i] = *mpls;
-            display_rawhost(ctl, index, (void *) &(nh->addrs[i]));
+            display_rawhost(ctl, index, (void *)&(nh->addrs[i]), (void *)&(nh->addrs[i]));
         }
     }
 
index 429a831f0a0e291926b9bf866bc5573658d6012a..0735131f70338f043c308dabc7c47bbd8a58ad63 100644 (file)
--- a/ui/raw.c
+++ b/ui/raw.c
@@ -64,12 +64,19 @@ void raw_rawping(
     fflush(stdout);
 }
 
-
 void raw_rawhost(
     struct mtr_ctl *ctl,
     int host,
-    ip_t * ip_addr)
+    ip_t *ip_addr,
+    struct mplslen *mpls)
 {
     printf("h %d %s\n", host, strlongip(ctl, ip_addr));
+    if (ctl->enablempls) {
+        int k;
+        for (k = 0; k < mpls->labels; k++)
+            printf("m %d %lu %u %u %u\n",
+                   host, mpls->label[k], mpls->tc[k], mpls->s[k], mpls->ttl[k]);
+    }
+
     fflush(stdout);
 }
index bd1920c264fe03ea6a0da83aab7f811efa42b642..3c9a075373e61a8c6fcf81e8b07cb48dbfacea07 100644 (file)
--- a/ui/raw.h
+++ b/ui/raw.h
@@ -30,4 +30,5 @@ extern void raw_rawping(
 extern void raw_rawhost(
     struct mtr_ctl *ctl,
     int host,
-    ip_t * addr);
+    ip_t *addr,
+    struct mplslen *mpls);