Commit 7ce8aecd authored by Alessandro Rubini's avatar Alessandro Rubini

tools/ptpdump: add "char *prefix" to all functions

This is oh so boring, but I need to differentiate send from receive
when dumping from withing ppsi itself.  This is a long patch that has
no effect on tools/ptpdump, since it pases the empty string as prefix.
Signed-off-by: Alessandro Rubini's avatarAlessandro Rubini <rubini@gnudd.com>
parent 23976c85
...@@ -4,15 +4,15 @@ ...@@ -4,15 +4,15 @@
#include "decent_types.h" #include "decent_types.h"
#include "ptpdump.h" #include "ptpdump.h"
static int dumpstruct(char *prefix, char *name, void *ptr, int size) static int dumpstruct(char *p1, char *p2, char *name, void *ptr, int size)
{ {
int ret, i; int ret, i;
unsigned char *p = ptr; unsigned char *p = ptr;
ret = printf("%s%s (size %i)\n", prefix, name, size); ret = printf("%s%s%s (size %i)\n", p1, p2, name, size);
for (i = 0; i < size; ) { for (i = 0; i < size; ) {
if ((i & 0xf) == 0) if ((i & 0xf) == 0)
ret += printf("%s", prefix); ret += printf("%s%s", p1, p2);
ret += printf("%02x", p[i]); ret += printf("%02x", p[i]);
i++; i++;
ret += printf(i & 3 ? " " : i & 0xf ? " " : "\n"); ret += printf(i & 3 ? " " : i & 0xf ? " " : "\n");
...@@ -23,7 +23,7 @@ static int dumpstruct(char *prefix, char *name, void *ptr, int size) ...@@ -23,7 +23,7 @@ static int dumpstruct(char *prefix, char *name, void *ptr, int size)
} }
#if __STDC_HOSTED__ #if __STDC_HOSTED__
static void dump_time(struct TimeInternal *ti) static void dump_time(char *prefix, struct TimeInternal *ti)
{ {
struct timeval tv; struct timeval tv;
struct tm tm; struct tm tm;
...@@ -31,109 +31,113 @@ static void dump_time(struct TimeInternal *ti) ...@@ -31,109 +31,113 @@ static void dump_time(struct TimeInternal *ti)
tv.tv_sec = ti->seconds; tv.tv_sec = ti->seconds;
tv.tv_usec = ti->nanoseconds / 1000; tv.tv_usec = ti->nanoseconds / 1000;
localtime_r(&tv.tv_sec, &tm); localtime_r(&tv.tv_sec, &tm);
printf("TIME: (%li - 0x%lx) %02i:%02i:%02i.%06li\n", printf("%sTIME: (%li - 0x%lx) %02i:%02i:%02i.%06li\n", prefix,
tv.tv_sec, tv.tv_sec, tv.tv_sec, tv.tv_sec,
tm.tm_hour, tm.tm_min, tm.tm_sec, (long)tv.tv_usec); tm.tm_hour, tm.tm_min, tm.tm_sec, (long)tv.tv_usec);
} }
#else #else
static void dump_time(struct TimeInternal *ti) static void dump_time(char *prefix, struct TimeInternal *ti)
{ {
printf("TIME: (%li - 0x%lx) %li.%06li\n", (long)ti->seconds, printf("%sTIME: (%li - 0x%lx) %li.%06li\n", prefix, (long)ti->seconds,
(long)ti->seconds, (long)ti->seconds, (long)ti->nanoseconds); (long)ti->seconds, (long)ti->seconds, (long)ti->nanoseconds);
} }
#endif #endif
static void dump_eth(struct ethhdr *eth) static void dump_eth(char *prefix, struct ethhdr *eth)
{ {
unsigned char *d = eth->h_dest; unsigned char *d = eth->h_dest;
unsigned char *s = eth->h_source; unsigned char *s = eth->h_source;
printf("ETH: %04x (%02x:%02x:%02x:%02x:%02x:%02x -> " printf("%sETH: %04x (%02x:%02x:%02x:%02x:%02x:%02x -> "
"%02x:%02x:%02x:%02x:%02x:%02x)\n", ntohs(eth->h_proto), "%02x:%02x:%02x:%02x:%02x:%02x)\n", prefix, ntohs(eth->h_proto),
s[0], s[1], s[2], s[3], s[4], s[5], s[0], s[1], s[2], s[3], s[4], s[5],
d[0], d[1], d[2], d[3], d[4], d[5]); d[0], d[1], d[2], d[3], d[4], d[5]);
} }
static void dump_ip(struct iphdr *ip) static void dump_ip(char *prefix, struct iphdr *ip)
{ {
uint32_t s = ntohl(ip->saddr); uint32_t s = ntohl(ip->saddr);
uint32_t d = ntohl(ip->daddr); uint32_t d = ntohl(ip->daddr);
printf("IP: %i (%i.%i.%i.%i -> %i.%i.%i.%i) len %i\n", printf("%sIP: %i (%i.%i.%i.%i -> %i.%i.%i.%i) len %i\n", prefix,
ip->protocol, ip->protocol,
(s >> 24) & 0xff, (s >> 16) & 0xff, (s >> 8) & 0xff, s & 0xff, (s >> 24) & 0xff, (s >> 16) & 0xff, (s >> 8) & 0xff, s & 0xff,
(d >> 24) & 0xff, (d >> 16) & 0xff, (d >> 8) & 0xff, d & 0xff, (d >> 24) & 0xff, (d >> 16) & 0xff, (d >> 8) & 0xff, d & 0xff,
ntohs(ip->tot_len)); ntohs(ip->tot_len));
} }
static void dump_udp(struct udphdr *udp) static void dump_udp(char *prefix, struct udphdr *udp)
{ {
printf("UDP: (%i -> %i) len %i\n", printf("%sUDP: (%i -> %i) len %i\n", prefix,
ntohs(udp->source), ntohs(udp->dest), ntohs(udp->len)); ntohs(udp->source), ntohs(udp->dest), ntohs(udp->len));
} }
/* Helpers for fucking data structures */ /* Helpers for fucking data structures */
static void dump_1stamp(char *s, struct stamp *t) static void dump_1stamp(char *prefix, char *s, struct stamp *t)
{ {
uint64_t sec = (uint64_t)(ntohs(t->sec.msb)) << 32; uint64_t sec = (uint64_t)(ntohs(t->sec.msb)) << 32;
sec |= (uint64_t)(ntohl(t->sec.lsb)); sec |= (uint64_t)(ntohl(t->sec.lsb));
printf("%s%lu.%09i\n", s, (unsigned long)sec, ntohl(t->nsec)); printf("%s%s%lu.%09i\n", prefix,
s, (unsigned long)sec, ntohl(t->nsec));
} }
static void dump_1quality(char *s, ClockQuality *q) static void dump_1quality(char *prefix, char *s, ClockQuality *q)
{ {
printf("%s%02x-%02x-%04x\n", s, q->clockClass, q->clockAccuracy, printf("%s%s%02x-%02x-%04x\n", prefix, s, q->clockClass,
q->offsetScaledLogVariance); q->clockAccuracy, q->offsetScaledLogVariance);
} }
static void dump_1clockid(char *s, ClockIdentity i) static void dump_1clockid(char *prefix, char *s, ClockIdentity i)
{ {
printf("%s%02x-%02x-%02x-%02x-%02x-%02x-%02x-%02x\n", s, printf("%s%s%02x-%02x-%02x-%02x-%02x-%02x-%02x-%02x\n", prefix, s,
i.id[0], i.id[1], i.id[2], i.id[3], i.id[0], i.id[1], i.id[2], i.id[3],
i.id[4], i.id[5], i.id[6], i.id[7]); i.id[4], i.id[5], i.id[6], i.id[7]);
} }
static void dump_1port(char *s, unsigned char *p) static void dump_1port(char *prefix, char *s, unsigned char *p)
{ {
printf("%s%02x-%02x-%02x-%02x-%02x-%02x-%02x-%02x-%02x-%02x\n", s, printf("%s%s%02x-%02x-%02x-%02x-%02x-%02x-%02x-%02x-%02x-%02x\n",
prefix, s,
p[0], p[1], p[2], p[3], p[4], p[5], p[6], p[7], p[8], p[9]); p[0], p[1], p[2], p[3], p[4], p[5], p[6], p[7], p[8], p[9]);
} }
/* Helpers for each message types */ /* Helpers for each message types */
static void dump_msg_announce(struct ptp_announce *p) static void dump_msg_announce(char *prefix, struct ptp_announce *p)
{ {
dump_1stamp("MSG-ANNOUNCE: stamp ", &p->originTimestamp); dump_1stamp(prefix, "MSG-ANNOUNCE: stamp ",
dump_1quality("MSG-ANNOUNCE: grandmaster-quality ", &p->originTimestamp);
dump_1quality(prefix, "MSG-ANNOUNCE: grandmaster-quality ",
&p->grandmasterClockQuality); &p->grandmasterClockQuality);
printf("MSG-ANNOUNCE: grandmaster-prio %i %i\n", printf("%sMSG-ANNOUNCE: grandmaster-prio %i %i\n", prefix,
p->grandmasterPriority1, p->grandmasterPriority2); p->grandmasterPriority1, p->grandmasterPriority2);
dump_1clockid("MSG-ANNOUNCE: grandmaster-id ", dump_1clockid(prefix, "MSG-ANNOUNCE: grandmaster-id ",
p->grandmasterIdentity); p->grandmasterIdentity);
} }
static void dump_msg_sync_etc(char *s, struct ptp_sync_etc *p) static void dump_msg_sync_etc(char *prefix, char *s, struct ptp_sync_etc *p)
{ {
dump_1stamp(s, &p->stamp); dump_1stamp(prefix, s, &p->stamp);
} }
static void dump_msg_resp_etc(char *s, struct ptp_sync_etc *p) static void dump_msg_resp_etc(char *prefix, char *s, struct ptp_sync_etc *p)
{ {
dump_1stamp(s, &p->stamp); dump_1stamp(prefix, s, &p->stamp);
dump_1port(s, p->port); dump_1port(prefix, s, p->port);
} }
/* TLV dumper, not yet white-rabbit aware */ /* TLV dumper, not yet white-rabbit aware */
static int dump_tlv(struct ptp_tlv *tlv, int totallen) static int dump_tlv(char *prefix, struct ptp_tlv *tlv, int totallen)
{ {
/* the field includes 6 bytes of the header, ecludes 4 of them. Bah! */ /* the field includes 6 bytes of the header, ecludes 4 of them. Bah! */
int explen = ntohs(tlv->len) + 4; int explen = ntohs(tlv->len) + 4;
printf("TLV: type %04x len %i oui %02x:%02x:%02x sub %02x:%02x:%02x\n", printf("%sTLV: type %04x len %i oui %02x:%02x:%02x "
ntohs(tlv->type), explen, tlv->oui[0], tlv->oui[1], tlv->oui[2], "sub %02x:%02x:%02x\n", prefix, ntohs(tlv->type), explen,
tlv->oui[0], tlv->oui[1], tlv->oui[2],
tlv->subtype[0], tlv->subtype[1], tlv->subtype[2]); tlv->subtype[0], tlv->subtype[1], tlv->subtype[2]);
if (explen > totallen) { if (explen > totallen) {
printf("TLV: too short (expected %i, total %i)\n", printf("%sTLV: too short (expected %i, total %i)\n", prefix,
explen, totallen); explen, totallen);
return totallen; return totallen;
} }
...@@ -141,75 +145,76 @@ static int dump_tlv(struct ptp_tlv *tlv, int totallen) ...@@ -141,75 +145,76 @@ static int dump_tlv(struct ptp_tlv *tlv, int totallen)
/* later: if (memcmp(tlv->oui, "\x08\x00\x30", 3)) ... */ /* later: if (memcmp(tlv->oui, "\x08\x00\x30", 3)) ... */
/* Now dump non-wr tlv in binary, count only payload */ /* Now dump non-wr tlv in binary, count only payload */
dumpstruct("TLV: ", "tlv-content", tlv->data, dumpstruct(prefix, "TLV: ", "tlv-content", tlv->data,
explen - sizeof(*tlv)); explen - sizeof(*tlv));
return explen; return explen;
} }
/* A big function to dump the ptp information */ /* A big function to dump the ptp information */
static void dump_payload(void *pl, int len) static void dump_payload(char *prefix, void *pl, int len)
{ {
struct ptp_header *h = pl; struct ptp_header *h = pl;
void *msg_specific = (void *)(h + 1); void *msg_specific = (void *)(h + 1);
int donelen = 34; /* packet length before tlv */ int donelen = 34; /* packet length before tlv */
if (h->versionPTP != 2) { if (h->versionPTP != 2) {
printf("VERSION: unsupported (%i)\n", h->versionPTP); printf("%sVERSION: unsupported (%i)\n", prefix, h->versionPTP);
return; return;
} }
printf("VERSION: %i (type %i, len %i, domain %i)\n", printf("%sVERSION: %i (type %i, len %i, domain %i)\n", prefix,
h->versionPTP, h->messageType, h->versionPTP, h->messageType,
ntohs(h->messageLength), h->domainNumber); ntohs(h->messageLength), h->domainNumber);
printf("FLAGS: 0x%04x (correction 0x%08lu)\n", h->flagField, printf("%sFLAGS: 0x%04x (correction 0x%08lu)\n", prefix, h->flagField,
(unsigned long)h->correctionField); (unsigned long)h->correctionField);
dump_1port("PORT: ", h->sourcePortIdentity); dump_1port(prefix, "PORT: ", h->sourcePortIdentity);
printf("REST: seq %i, ctrl %i, log-interval %i\n", printf("%sREST: seq %i, ctrl %i, log-interval %i\n", prefix,
ntohs(h->sequenceId), h->controlField, h->logMessageInterval); ntohs(h->sequenceId), h->controlField, h->logMessageInterval);
#define CASE(t, x) case PPM_ ##x: printf("MESSAGE: (" #t ") " #x "\n") #define CASE(t, x) case PPM_ ##x: printf("%sMESSAGE: (" #t ") " #x "\n", prefix)
switch(h->messageType) { switch(h->messageType) {
CASE(E, SYNC); CASE(E, SYNC);
dump_msg_sync_etc("MSG-SYNC: ", msg_specific); dump_msg_sync_etc(prefix, "MSG-SYNC: ", msg_specific);
donelen = 44; donelen = 44;
break; break;
CASE(E, DELAY_REQ); CASE(E, DELAY_REQ);
dump_msg_sync_etc("MSG-DELAY_REQ: ", msg_specific); dump_msg_sync_etc(prefix, "MSG-DELAY_REQ: ", msg_specific);
donelen = 44; donelen = 44;
break; break;
CASE(G, FOLLOW_UP); CASE(G, FOLLOW_UP);
dump_msg_sync_etc("MSG-FOLLOW_UP: ", msg_specific); dump_msg_sync_etc(prefix, "MSG-FOLLOW_UP: ", msg_specific);
donelen = 44; donelen = 44;
break; break;
CASE(G, DELAY_RESP); CASE(G, DELAY_RESP);
dump_msg_resp_etc("MSG-DELAY_RESP: ", msg_specific); dump_msg_resp_etc(prefix, "MSG-DELAY_RESP: ", msg_specific);
donelen = 54; donelen = 54;
break; break;
CASE(G, ANNOUNCE); CASE(G, ANNOUNCE);
dump_msg_announce(msg_specific); dump_msg_announce(prefix, msg_specific);
donelen = 64; donelen = 64;
break; break;
CASE(G, SIGNALING); CASE(G, SIGNALING);
dump_1port("MSG-SIGNALING: target-port ", msg_specific); dump_1port(prefix, "MSG-SIGNALING: target-port ", msg_specific);
donelen = 44; donelen = 44;
break; break;
#if __STDC_HOSTED__ /* Avoid pdelay dump withing ppsi, we don't use it */ #if __STDC_HOSTED__ /* Avoid pdelay dump withing ppsi, we don't use it */
CASE(E, PDELAY_REQ); CASE(E, PDELAY_REQ);
dump_msg_sync_etc("MSG-PDELAY_REQ: ", msg_specific); dump_msg_sync_etc(prefix, "MSG-PDELAY_REQ: ", msg_specific);
donelen = 54; donelen = 54;
break; break;
CASE(E, PDELAY_RESP); CASE(E, PDELAY_RESP);
dump_msg_resp_etc("MSG-PDELAY_RESP: ", msg_specific); dump_msg_resp_etc(prefix, "MSG-PDELAY_RESP: ", msg_specific);
donelen = 54; donelen = 54;
break; break;
CASE(G, PDELAY_RESP_FOLLOW_UP); CASE(G, PDELAY_RESP_FOLLOW_UP);
dump_msg_resp_etc("MSG-PDELAY_RESP_FOLLOWUP: ", msg_specific); dump_msg_resp_etc(prefix, "MSG-PDELAY_RESP_FOLLOWUP: ",
msg_specific);
donelen = 54; donelen = 54;
break; break;
...@@ -223,19 +228,19 @@ static void dump_payload(void *pl, int len) ...@@ -223,19 +228,19 @@ static void dump_payload(void *pl, int len)
while (donelen < len) { while (donelen < len) {
int n = len - donelen; int n = len - donelen;
if (n < sizeof(struct ptp_tlv)) { if (n < sizeof(struct ptp_tlv)) {
printf("TLV: too short (%i - %i = %i)\n", len, printf("%sTLV: too short (%i - %i = %i)\n", prefix,
donelen, n); len, donelen, n);
break; break;
} }
donelen += dump_tlv(pl + donelen, n); donelen += dump_tlv(prefix, pl + donelen, n);
} }
/* Finally, binary dump of it all */ /* Finally, binary dump of it all */
dumpstruct("DUMP: ", "payload", pl, len); dumpstruct(prefix, "DUMP: ", "payload", pl, len);
} }
/* This dumps a complete udp frame, starting from the eth header */ /* This dumps a complete udp frame, starting from the eth header */
int dump_udppkt(void *buf, int len, struct TimeInternal *ti) int dump_udppkt(char *prefix, void *buf, int len, struct TimeInternal *ti)
{ {
struct ethhdr *eth = buf; struct ethhdr *eth = buf;
struct iphdr *ip = buf + ETH_HLEN; struct iphdr *ip = buf + ETH_HLEN;
...@@ -243,32 +248,32 @@ int dump_udppkt(void *buf, int len, struct TimeInternal *ti) ...@@ -243,32 +248,32 @@ int dump_udppkt(void *buf, int len, struct TimeInternal *ti)
void *payload = (void *)(udp + 1); void *payload = (void *)(udp + 1);
if (ti) if (ti)
dump_time(ti); dump_time(prefix, ti);
dump_eth(eth); dump_eth(prefix, eth);
dump_ip(ip); dump_ip(prefix, ip);
dump_udp(udp); dump_udp(prefix, udp);
dump_payload(payload, len - (payload - buf)); dump_payload(prefix, payload, len - (payload - buf));
return 0; return 0;
} }
/* This dumps the payload only, used for udp frames without headers */ /* This dumps the payload only, used for udp frames without headers */
int dump_payloadpkt(void *buf, int len, struct TimeInternal *ti) int dump_payloadpkt(char *prefix, void *buf, int len, struct TimeInternal *ti)
{ {
if (ti) if (ti)
dump_time(ti); dump_time(prefix, ti);
dump_payload(buf, len); dump_payload(prefix, buf, len);
return 0; return 0;
} }
/* This dumps everything, used for raw frames with headers and ptp payload */ /* This dumps everything, used for raw frames with headers and ptp payload */
int dump_1588pkt(void *buf, int len, struct TimeInternal *ti) int dump_1588pkt(char *prefix, void *buf, int len, struct TimeInternal *ti)
{ {
struct ethhdr *eth = buf; struct ethhdr *eth = buf;
void *payload = (void *)(eth + 1); void *payload = (void *)(eth + 1);
if (ti) if (ti)
dump_time(ti); dump_time(prefix, ti);
dump_eth(eth); dump_eth(prefix, eth);
dump_payload(payload, len - (payload - buf)); dump_payload(prefix, payload, len - (payload - buf));
return 0; return 0;
} }
...@@ -131,13 +131,13 @@ int main(int argc, char **argv) ...@@ -131,13 +131,13 @@ int main(int argc, char **argv)
if (udpdest != 319 && udpdest != 320) if (udpdest != 319 && udpdest != 320)
continue; continue;
print_spaces(&ti); print_spaces(&ti);
ret = dump_udppkt(buf, len, &ti); ret = dump_udppkt("", buf, len, &ti);
break; break;
} }
case ETH_P_1588: case ETH_P_1588:
print_spaces(&ti); print_spaces(&ti);
ret = dump_1588pkt(buf, len, &ti); ret = dump_1588pkt("", buf, len, &ti);
break; break;
default: default:
ret = -1; ret = -1;
......
...@@ -13,8 +13,8 @@ ...@@ -13,8 +13,8 @@
#define printf pp_printf #define printf pp_printf
#endif #endif
int dump_udppkt(void *buf, int len, struct TimeInternal *ti); int dump_udppkt(char *prefix, void *buf, int len, struct TimeInternal *ti);
int dump_payloadpkt(void *buf, int len, struct TimeInternal *ti); int dump_payloadpkt(char *prefix, void *buf, int len, struct TimeInternal *ti);
int dump_1588pkt(void *buf, int len, struct TimeInternal *ti); int dump_1588pkt(char *prefix, void *buf, int len, struct TimeInternal *ti);
#endif /* __PTPDUMP_H__ */ #endif /* __PTPDUMP_H__ */
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment