The "raw" format is:
-hostline|xmitline|pingline|dnsline|timestampline
+hostline|xmitline|pingline|dnsline|timestampline|mplsline
hostline:
h <pos> <host IP>
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. :-)
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);
}
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(
/* 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));
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]));
}
}
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);
}
extern void raw_rawhost(
struct mtr_ctl *ctl,
int host,
- ip_t * addr);
+ ip_t *addr,
+ struct mplslen *mpls);