All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH] AX.25 patches for strace
@ 2005-03-31 13:04 Ralf Baechle DL5RB
  0 siblings, 0 replies; only message in thread
From: Ralf Baechle DL5RB @ 2005-03-31 13:04 UTC (permalink / raw)
  To: linux-hams; +Cc: netdev, strace-devel

So far strace is lacking support for AX.25 making debugging of AX.25
software harder for no good reason.  Below the first cut of a patch
to add AX.25 support.  The patch is against Sourceforge CVS.  Please test.

73 de DL5RB op Ralf

--
Loc. JN47BS / CQ 14 / ITU 28 / DOK A21

Index: configure.ac
===================================================================
RCS file: /cvsroot/strace/strace/configure.ac,v
retrieving revision 1.41
diff -u -r1.41 configure.ac
--- configure.ac	22 Mar 2005 23:12:39 -0000	1.41
+++ configure.ac	31 Mar 2005 12:56:25 -0000
@@ -193,8 +193,7 @@
 
 AC_CHECK_FUNCS(sigaction strerror strsignal pread sys_siglist _sys_siglist getdents mctl prctl sendmsg inet_ntop if_indextoname)
 AC_CHECK_HEADERS([sys/reg.h sys/filio.h sys/acl.h sys/asynch.h sys/door.h stropts.h sys/conf.h sys/stream.h sys/tihdr.h sys/tiuser.h sys/sysconfig.h ioctls.h sys/ioctl.h sys/ptrace.h termio.h linux/ptrace.h asm/reg.h sys/uio.h sys/aio.h  poll.h sys/poll.h sys/vfs.h asm/sysmips.h linux/utsname.h sys/nscsys.h mqueue.h sys/epoll.h], [], [])
-AC_CHECK_HEADERS([linux/icmp.h linux/in6.h linux/netlink.h linux/if_packet.h],
-                 [], [], [#include <linux/socket.h>])
+AC_CHECK_HEADERS([linux/icmp.h linux/in6.h linux/netlink.h linux/if_packet.h netax25/ax25.h], [], [], [#include <linux/socket.h>])
 AC_CHECK_HEADERS([asm/sigcontext.h], [], [], [#include <signal.h>])
 AC_CHECK_HEADERS([netinet/tcp.h netinet/udp.h],,, [#include <netinet/in.h>])
 
Index: defs.h
===================================================================
RCS file: /cvsroot/strace/strace/defs.h,v
retrieving revision 1.55
diff -u -r1.55 defs.h
--- defs.h	6 Feb 2005 01:16:32 -0000	1.55
+++ defs.h	31 Mar 2005 12:56:27 -0000
@@ -459,6 +459,7 @@
 extern void call_summary P((FILE *));
 extern void printtv32 P((struct tcb*, long));
 extern void tprint_iov P((struct tcb *, int, long));
+extern void tprint_ax25_address P((char *ax));
 
 #ifdef LINUX
 extern int internal_clone P((struct tcb *));
Index: net.c
===================================================================
RCS file: /cvsroot/strace/strace/net.c,v
retrieving revision 1.46
diff -u -r1.46 net.c
--- net.c	2 Feb 2005 03:11:32 -0000	1.46
+++ net.c	31 Mar 2005 12:56:29 -0000
@@ -98,6 +98,10 @@
 #include <linux/icmp.h>
 #endif
 
+#if defined(HAVE_NETAX25_AX25_H)
+#include <netax25/ax25.h>
+#endif
+
 #ifndef PF_UNSPEC
 #define PF_UNSPEC AF_UNSPEC
 #endif
@@ -436,6 +440,7 @@
 #endif
 	{ 0,		NULL		},
 };
+
 static const struct xlat msg_flags[] = {
 	{ MSG_OOB,	"MSG_OOB"	},
 #ifdef MSG_DONTROUTE
@@ -780,6 +785,24 @@
 };
 #endif /* SOL_IPX */
 
+#if defined(LINUX) && defined(AF_AX25)
+static const struct xlat sockax25options[] = {
+	{ AX25_WINDOW,		"AX25_WINDOW"		},
+	{ AX25_T1,		"AX25_T1"		},
+	{ AX25_T2,		"AX25_T2"		},
+	{ AX25_N2,		"AX25_N2"		},
+	{ AX25_T3,		"AX25_T3"		},
+	{ AX25_IDLE,		"AX25_IDLE"		},
+	{ AX25_BACKOFF,		"AX25_BACKOFF"		},
+	{ AX25_EXTSEQ,		"AX25_EXTSEQ"		},
+	{ AX25_PIDINCL,		"AX25_PIDINCL"		},
+	{ AX25_IAMDIGI,		"AX25_IAMDIGI"		},
+	{ AX25_PACLEN,		"AX25_PACLEN"		},
+	{ SO_BINDTODEVICE,	"SO_BINDTODEVICE"	},
+	{ 0,			NULL			}
+};
+#endif
+
 #ifdef SOL_RAW
 static const struct xlat sockrawoptions[] = {
 #if defined(ICMP_FILTER)
@@ -923,6 +946,22 @@
 };
 #endif /* defined(AF_PACKET) */
 
+#if defined(LINUX) && defined(AF_AX25)
+void tprint_ax25_address(char *ax)
+{
+	int len, i;
+
+	for (len = 5; len; len--)
+		if (ax[len] != (' ' << 1))
+			break;
+
+	for (i = 0; i <= len; i++)
+		tprintf("%c", (ax[i] >> 1) & 0x7f);
+
+	tprintf("-%d", ax[6]);
+}
+#endif
+
 
 void
 printsock(tcp, addr, addrlen)
@@ -934,6 +973,9 @@
 		char pad[128];
 		struct sockaddr sa;
 		struct sockaddr_in sin;
+#if defined(LINUX) && defined(AF_AX25)
+		struct full_sockaddr_ax25 sax25;
+#endif
 		struct sockaddr_un sau;
 #ifdef HAVE_INET_NTOP
 		struct sockaddr_in6 sa6;
@@ -984,6 +1026,28 @@
 		tprintf("sin_port=htons(%u), sin_addr=inet_addr(\"%s\")",
 			ntohs(addrbuf.sin.sin_port), inet_ntoa(addrbuf.sin.sin_addr));
 		break;
+#if defined(LINUX) && defined(AF_AX25)
+	case AF_AX25: {
+		int i;
+
+		tprintf("sax25_call=");
+		tprint_ax25_address(addrbuf.sax25.fsa_ax25.sax25_call.ax25_call);
+		tprintf(", sax25_ndigis=%d", addrbuf.sax25.fsa_ax25.sax25_ndigis);
+
+		if (addrbuf.sax25.fsa_ax25.sax25_ndigis) {
+			tprintf(" {");
+
+			for (i = 0; i < addrbuf.sax25.fsa_ax25.sax25_ndigis; i++) {
+				tprintf(" ");
+				tprint_ax25_address(addrbuf.sax25.fsa_digipeater[i].ax25_call);
+			}
+
+			tprintf("}");
+		}
+		tprintf("}");
+		}
+		break;
+#endif
 #ifdef HAVE_INET_NTOP
 	case AF_INET6:
 		inet_ntop(AF_INET6, &addrbuf.sa6.sin6_addr, string_addr, sizeof(string_addr));
@@ -1053,8 +1117,8 @@
 		tprintf("pid=%d, groups=%08x", addrbuf.nl.nl_pid, addrbuf.nl.nl_groups);
 		break;
 #endif /* AF_NETLINK */
-	/* AF_AX25 AF_APPLETALK AF_NETROM AF_BRIDGE AF_AAL5
-	AF_X25 AF_ROSE etc. still need to be done */
+	/* AF_APPLETALK AF_NETROM AF_BRIDGE AF_AAL5
+	AF_ROSE etc. still need to be done */
 
 	default:
 		tprintf("sa_data=");
@@ -1541,6 +1605,11 @@
 			printxval(sockipxoptions, tcp->u_arg[2], "IPX_???");
 			break;
 #endif
+#ifdef SOL_AX25
+		case SOL_AX25:
+			printxval(sockax25options, tcp->u_arg[2], "AX25_???");
+			break;
+#endif
 #ifdef SOL_PACKET
 		case SOL_PACKET:
 			printxval(sockpacketoptions, tcp->u_arg[2], "PACKET_???");
@@ -1552,7 +1621,7 @@
 			break;
 #endif
 
-		/* SOL_AX25 SOL_ROSE SOL_ATALK SOL_NETROM SOL_UDP SOL_DECNET SOL_X25
+		/* SOL_ROSE SOL_ATALK SOL_NETROM SOL_UDP SOL_DECNET SOL_X25
 		 * etc. still need work */
 		default:
 			tprintf("%lu", tcp->u_arg[2]);
@@ -1588,6 +1657,41 @@
 #endif
 			}
 			break;
+
+#ifdef SOL_AX25
+		case SOL_AX25:
+			switch (tcp->u_arg[2]) {
+			case AX25_WINDOW:
+			case AX25_T1:
+			case AX25_T2:
+			case AX25_N2:
+			case AX25_T3:
+			case AX25_IDLE:
+			case AX25_BACKOFF:
+			case AX25_EXTSEQ:
+			case AX25_PIDINCL:
+			case AX25_IAMDIGI:
+			case AX25_PACLEN:
+			        if (len == sizeof (int)) {
+					int val;
+
+					if (umove (tcp, tcp->u_arg[3],
+						   &val) < 0)
+						break;
+					tprintf(", { %d }", val);
+				}
+				break;
+			case SO_BINDTODEVICE:
+				/* The argument is limited to at most IFNAMSIZ
+				   characters but we display the full length of
+				   whatever the user passed  */
+				tprintf(", {");
+				printstr(tcp, tcp->u_arg[3], len);
+				tprintf("}");
+				break;
+			}
+			break;
+#endif
 		}
 
 		tprintf (", ");
@@ -1673,6 +1777,11 @@
 		printxval(sockipxoptions, name, "IPX_???");
 		break;
 #endif
+#ifdef SOL_AX25
+	    case SOL_AX25:
+		printxval(sockax25options, name, "AX25_???");
+		break;
+#endif
 #ifdef SOL_PACKET
 	    case SOL_PACKET:
 		printxval(sockpacketoptions, name, "PACKET_???");
@@ -1698,7 +1807,7 @@
 		break;
 #endif
 
-		/* SOL_AX25 SOL_ATALK SOL_NETROM SOL_UDP SOL_DECNET SOL_X25
+		/* SOL_ATALK SOL_NETROM SOL_UDP SOL_DECNET SOL_X25
 		 * etc. still need work  */
 
 	    default:
Index: sock.c
===================================================================
RCS file: /cvsroot/strace/strace/sock.c,v
retrieving revision 1.10
diff -u -r1.10 sock.c
--- sock.c	2 Feb 2005 20:25:17 -0000	1.10
+++ sock.c	31 Mar 2005 12:56:30 -0000
@@ -184,12 +184,18 @@
 				tprintf("}");
 				break;
 			case SIOCGIFHWADDR:
-				/* XXX Are there other hardware addresses
-				   than 6-byte MACs?  */
-				bytes = (unsigned char *) &ifr.ifr_hwaddr.sa_data;
-				tprintf("ifr_hwaddr=%02x:%02x:%02x:%02x:%02x:%02x",
-					bytes[0], bytes[1], bytes[2],
-					bytes[3], bytes[4], bytes[5]);
+				switch (ifr.ifr_hwaddr.sa_family) {
+				case AF_AX25:
+					tprintf("ifr_hwaddr=");
+					tprint_ax25_address((char *) &ifr.ifr_hwaddr.sa_data);
+					break;
+				default:
+					bytes = (unsigned char *) &ifr.ifr_hwaddr.sa_data;
+					tprintf("ifr_hwaddr=%02x:%02x:%02x:%02x:%02x:%02x",
+						bytes[0], bytes[1], bytes[2],
+						bytes[3], bytes[4], bytes[5]);
+					break;
+				}
 				break;
 			case SIOCGIFFLAGS:
 				tprintf("ifr_flags=");


^ permalink raw reply	[flat|nested] only message in thread

only message in thread, other threads:[~2005-03-31 13:04 UTC | newest]

Thread overview: (only message) (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2005-03-31 13:04 [PATCH] AX.25 patches for strace Ralf Baechle DL5RB

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.