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 ++++++++++++++++++++++++++++++++++++------------------ listen/listen.c | 41 +++++++++++++--------- listen/listen.h | 8 +++-- listen/utils.c | 7 ++-- 4 files changed, 104 insertions(+), 53 deletions(-) (limited to 'listen') 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: diff --git a/listen/listen.c b/listen/listen.c index b75b29c..e4daad6 100644 --- a/listen/listen.c +++ b/listen/listen.c @@ -12,13 +12,27 @@ #include #include +#ifdef __GLIBC__ #include +#else +#include +#endif +#ifdef HAVE_NETAX25_AX25_H #include +#else +#include +#endif #include #include #include "listen.h" +#ifdef AX25_NEW_DEVIF +#define ki_dump ax25_dump +#endif + +int timestamp; + static void display_port(char *dev) { char *port; @@ -26,20 +40,18 @@ static void display_port(char *dev) if ((port = ax25_config_get_name(dev)) == NULL) port = dev; - lprintf(T_PORT, "Port %s: ", port); + lprintf(T_PORT, "%s: ", port); } -static void display_timestamp(void) +void display_timestamp(void) { - time_t timenow; - char *timestring; + time_t timenowx; + struct tm* timenow; - time(&timenow); + time(&timenowx); + timenow = localtime(&timenowx); - timestring = ctime(&timenow); - timestring[24] = '\0'; - - lprintf(T_TIMESTAMP, "[%s]\n", timestring); + lprintf(T_TIMESTAMP, "%02d:%02d:%02d", timenow->tm_hour, timenow->tm_min, timenow->tm_sec); } #define ASCII 0 @@ -51,7 +63,6 @@ static void display_timestamp(void) int main(int argc, char **argv) { unsigned char buffer[BUFSIZE]; - int timestamp = 0; int dumpstyle = ASCII; int size; int s; @@ -61,6 +72,8 @@ int main(int argc, char **argv) struct ifreq ifr; int proto = ETH_P_AX25; + timestamp = 0; + while ((s = getopt(argc, argv, "8achip:rtv")) != -1) { switch (s) { case '8': @@ -139,18 +152,14 @@ int main(int argc, char **argv) perror("GIFADDR"); if (ifr.ifr_hwaddr.sa_family == AF_AX25) { - if (timestamp) - display_timestamp(); display_port(sa.sa_data); ki_dump(buffer, size, dumpstyle); - lprintf(T_DATA, "\n"); +// lprintf(T_DATA, "\n"); } } else { - if (timestamp) - display_timestamp(); display_port(sa.sa_data); ki_dump(buffer, size, dumpstyle); - lprintf(T_DATA, "\n"); +// lprintf(T_DATA, "\n"); } if (color) refresh(); diff --git a/listen/listen.h b/listen/listen.h index cff051d..4418967 100644 --- a/listen/listen.h +++ b/listen/listen.h @@ -5,19 +5,23 @@ #define T_BPQ 4 #define T_DATA 5 #define T_PROTOCOL 6 -#define T_AXHDR 7 +#define T_AXHDR 7 #define T_ADDR 8 #define T_IPHDR 9 #define T_TCPHDR 10 #define T_ROSEHDR 11 #define T_TIMESTAMP 12 -#define T_FLEXNET 3 /* for now */ +#define T_FLEXNET 13 /* In utils.c */ extern int color; /* Colorized mode */ extern int sevenbit; /* Are we on a 7-bit terminal? */ extern int ibmhack; /* IBM mapping? */ +extern int timestamp; + +void display_timestamp(void); + void lprintf(int dtype, char *fmt, ...); int initcolor(void); char *servname(int port, char *proto); diff --git a/listen/utils.c b/listen/utils.c index 7b7cc5d..ce7ecb9 100644 --- a/listen/utils.c +++ b/listen/utils.c @@ -59,7 +59,8 @@ void lprintf(int dtype, char *fmt, ...) if ((dtype == T_ADDR) || (dtype == T_PROTOCOL) || (dtype == T_AXHDR) || (dtype == T_IPHDR) - || (dtype == T_ROSEHDR)) + || (dtype == T_ROSEHDR) || (dtype == T_PORT) + || (dtype == T_TIMESTAMP)) ch |= A_BOLD; ch |= COLOR_PAIR(dtype); @@ -99,10 +100,12 @@ int initcolor(void) init_pair(T_IPHDR, COLOR_WHITE, COLOR_BLACK); init_pair(T_ADDR, COLOR_GREEN, COLOR_BLACK); init_pair(T_ROSEHDR, COLOR_WHITE, COLOR_BLACK); - init_pair(T_TIMESTAMP, COLOR_MAGENTA, COLOR_BLACK); + init_pair(T_TIMESTAMP, COLOR_YELLOW, COLOR_BLACK); init_pair(T_KISS, COLOR_MAGENTA, COLOR_BLACK); init_pair(T_BPQ, COLOR_MAGENTA, COLOR_BLACK); init_pair(T_TCPHDR, COLOR_BLUE, COLOR_BLACK); + init_pair(T_FLEXNET, COLOR_BLUE, COLOR_BLACK); + return 1; } -- cgit v1.2.3