summaryrefslogtreecommitdiffstats
path: root/listen
diff options
context:
space:
mode:
authorRalf Baechle <ralf@linux-mips.org>1999-08-10 05:46:32 +0200
committerRalf Baechle <ralf@linux-mips.org>1999-08-10 05:46:32 +0200
commit28280a70d9880c21efdff840246163a1b8e06a94 (patch)
treed95973ea267c755f349998bd9f8fd5706b334943 /listen
parentaa112083f850e1b6c5c6ed9c9e59a568ff66a000 (diff)
Import ax25-apps 0.0.3 from tarballax25-apps-0.0.3
Diffstat (limited to 'listen')
-rw-r--r--listen/ax25dump.c101
-rw-r--r--listen/listen.c41
-rw-r--r--listen/listen.h8
-rw-r--r--listen/utils.c7
4 files changed, 104 insertions, 53 deletions
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 <sys/socket.h>
#include <net/if.h>
+#ifdef __GLIBC__
#include <net/ethernet.h>
+#else
+#include <linux/if_ether.h>
+#endif
+#ifdef HAVE_NETAX25_AX25_H
#include <netax25/ax25.h>
+#else
+#include <netax25/kernel_ax25.h>
+#endif
#include <netax25/axconfig.h>
#include <config.h>
#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;
}