From 28280a70d9880c21efdff840246163a1b8e06a94 Mon Sep 17 00:00:00 2001 From: Ralf Baechle Date: Tue, 10 Aug 1999 05:46:32 +0200 Subject: Import ax25-apps 0.0.3 from tarball --- listen/ax25dump.c | 101 ++++++++++++++++++++++++++++++++++++------------------ 1 file changed, 68 insertions(+), 33 deletions(-) (limited to 'listen/ax25dump.c') diff --git a/listen/ax25dump.c b/listen/ax25dump.c index 34213f9..86b78e0 100644 --- a/listen/ax25dump.c +++ b/listen/ax25dump.c @@ -81,7 +81,7 @@ void ax25_dump(unsigned char *data, int length, int hexdump) } if (data[1] & HDLCAEB) { /* this is a FlexNet compressed header */ - lprintf(T_PROTOCOL, "AX25: "); + lprintf(T_PROTOCOL, " "); tmp[6] = tmp[7] = extseq = 0; tmp[0] = ' ' + (data[2] >> 2); tmp[1] = ' ' + ((data[2] << 4) & 0x30) + (data[3] >> 4); @@ -106,7 +106,7 @@ void ax25_dump(unsigned char *data, int length, int hexdump) if ((data[AXLEN + ALEN] & SSSID_SPARE) == SSSID_SPARE) { extseq = 0; - lprintf(T_PROTOCOL, "AX25: "); +// lprintf(T_PROTOCOL, " "); } else { extseq = 1; lprintf(T_PROTOCOL, "EAX25: "); @@ -117,8 +117,10 @@ void ax25_dump(unsigned char *data, int length, int hexdump) else dama = DAMA_STRING; + lprintf(T_AXHDR, "fm "); lprintf(T_ADDR, "%s", pax25(tmp, data + AXLEN)); - lprintf(T_ADDR, "->%s", pax25(tmp, data)); + lprintf(T_AXHDR, " to "); + lprintf(T_ADDR, "%s", pax25(tmp, data)); cmdrsp = LAPB_UNKNOWN; @@ -134,7 +136,7 @@ void ax25_dump(unsigned char *data, int length, int hexdump) length -= (AXLEN + AXLEN); if (!end) { - lprintf(T_AXHDR, " v"); + lprintf(T_AXHDR, " via"); while (!end) { /* Print digi string */ @@ -155,35 +157,66 @@ void ax25_dump(unsigned char *data, int length, int hexdump) data += ctlen; length -= ctlen; - lprintf(T_AXHDR, " <%s", decode_type(type)); + lprintf(T_AXHDR, " ctl %s", decode_type(type)); + if ((type & 0x3) != U) /* I or S frame? */ + lprintf(T_AXHDR, "%d", nr); + + if (type == I) + lprintf(T_AXHDR, "%d", ns); + switch (cmdrsp) { case LAPB_COMMAND: - lprintf(T_AXHDR, " C"); - if (pf) lprintf(T_AXHDR, " P"); + if (pf) lprintf(T_AXHDR, "+"); + else lprintf(T_AXHDR, "^"); break; case LAPB_RESPONSE: - lprintf(T_AXHDR, " R"); - if (pf) lprintf(T_AXHDR, " F"); + if (pf) lprintf(T_AXHDR, "-"); + else lprintf(T_AXHDR, "v"); break; default: break; } - if (type == I) - lprintf(T_AXHDR, " S%d", ns); - - if ((type & 0x3) != U) /* I or S frame? */ - lprintf(T_AXHDR, " R%d", nr); - - lprintf(T_AXHDR, ">"); - if (type == I || type == UI) { /* Decode I field */ if (length > 0) { /* Get pid */ pid = *data++; length--; - + + lprintf(T_AXHDR," pid=%X",pid); + + switch (pid) { + case PID_SEGMENT: + lprintf(T_AXHDR,"(segment)"); + break; + case PID_ARP: + lprintf(T_AXHDR,"(ARP)"); + break; + case PID_NETROM: + lprintf(T_AXHDR,"(NET/ROM)"); + break; + case PID_IP: + lprintf(T_AXHDR,"(IP)"); + break; + case PID_X25: + lprintf(T_AXHDR, "(X.25)"); + break; + case PID_TEXNET: + lprintf(T_AXHDR, "(TEXNET)"); + break; + case PID_FLEXNET: + lprintf(T_AXHDR, "(FLEXNET)"); + break; + case PID_NO_L3: + lprintf(T_AXHDR, "(Text)"); + break; + } + lprintf(T_AXHDR, "%s len %d ",dama,length); + + if(timestamp) + display_timestamp(); + if (pid == PID_SEGMENT) { seg = *data++; length--; @@ -194,42 +227,34 @@ void ax25_dump(unsigned char *data, int length, int hexdump) length--; } } + lprintf(T_AXHDR, "\n"); switch (pid) { case PID_SEGMENT: - lprintf(T_AXHDR,"%s\n", dama); data_dump(data, length, hexdump); break; case PID_ARP: - lprintf(T_AXHDR," pid=ARP%s\n", dama); arp_dump(data, length); break; case PID_NETROM: - lprintf(T_AXHDR," pid=NET/ROM%s\n", dama); netrom_dump(data, length, hexdump); break; case PID_IP: - lprintf(T_AXHDR," pid=IP%s\n", dama); ip_dump(data, length, hexdump); break; case PID_X25: - lprintf(T_AXHDR, " pid=X.25%s\n", dama); rose_dump(data, length, hexdump); break; case PID_TEXNET: - lprintf(T_AXHDR, " pid=TEXNET%s\n", dama); data_dump(data, length, hexdump); break; case PID_FLEXNET: - lprintf(T_AXHDR, " pid=FLEXNET%s\n", dama); flexnet_dump(data, length, hexdump); break; case PID_NO_L3: - lprintf(T_AXHDR, " pid=Text%s\n", dama); data_dump(data, length, hexdump); break; default: - lprintf(T_AXHDR, " pid=0x%x%s\n", pid, dama); data_dump(data, length, hexdump); break; } @@ -250,14 +275,24 @@ void ax25_dump(unsigned char *data, int length, int hexdump) lprintf(T_ERROR, " Too-long I-field"); if(data[2] & Z) lprintf(T_ERROR, " Invalid seq number"); - lprintf(T_AXHDR,"%s\n", dama); + lprintf(T_AXHDR,"%s ", dama); + + if(timestamp) + display_timestamp(); + lprintf(T_AXHDR,"\n"); } else if ((type == SABM || type == UA) && length >= 2) { /* FlexNet transmits the QSO "handle" for header * compression in SABM and UA frame data fields */ - lprintf(T_AXHDR," [%d]%s\n", (data[0] << 8) | data[1], dama); + lprintf(T_AXHDR," [%d]%s ", (data[0] << 8) | data[1], dama); + if(timestamp) + display_timestamp(); + lprintf(T_AXHDR,"\n"); } else { - lprintf(T_AXHDR,"%s\n", dama); + lprintf(T_AXHDR,"%s ", dama); + if(timestamp) + display_timestamp(); + lprintf(T_AXHDR,"\n"); } } @@ -267,11 +302,11 @@ static char *decode_type(int type) case I: return "I"; case SABM: - return "C"; + return "SABM"; case SABME: - return "CE"; + return "SABME"; case DISC: - return "D"; + return "DISC"; case DM: return "DM"; case UA: -- cgit v1.2.3