[U-Boot] [PATCH 28/28] net: Allow filtering on debug traces in the net subsystem

Joe Hershberger joe.hershberger at ni.com
Fri Jan 20 01:53:31 CET 2012


Signed-off-by: Joe Hershberger <joe.hershberger at ni.com>
Cc: Joe Hershberger <joe.hershberger at gmail.com>
Cc: Wolfgang Denk <wd at denx.de>
---
 drivers/net/netconsole.c |    6 ++++++
 net/arp.c                |   12 ++++++++----
 net/link_local.c         |   31 +++++++++++++++++++------------
 net/net.c                |   45 ++++++++++++++++++++++++++++++++++-----------
 net/ping.c               |    6 ++++--
 net/rarp.c               |    7 +++++--
 6 files changed, 76 insertions(+), 31 deletions(-)

diff --git a/drivers/net/netconsole.c b/drivers/net/netconsole.c
index 1e31159..aee671e 100644
--- a/drivers/net/netconsole.c
+++ b/drivers/net/netconsole.c
@@ -26,6 +26,8 @@
 #include <stdio_dev.h>
 #include <net.h>
 
+#define DEBUG_DEV_PKT 0
+
 DECLARE_GLOBAL_DATA_PTR;
 
 static char input_buffer[512];
@@ -83,6 +85,8 @@ int nc_input_packet(uchar *pkt, unsigned dest, unsigned src, unsigned len)
 	if (dest != nc_port || !len)
 		return 0; /* not for us */
 
+	debug_cond(DEBUG_DEV_PKT, "input: \"%*.*s\"\n", len, len, pkt);
+
 	if (input_size == sizeof(input_buffer))
 		return 1; /* no space */
 	if (len > sizeof(input_buffer) - input_size)
@@ -112,6 +116,8 @@ static void nc_send_packet(const char *buf, int len)
 	uchar *ether;
 	IPaddr_t ip;
 
+	debug_cond(DEBUG_DEV_PKT, "output: \"%*.*s\"\n", len, len, buf);
+
 	eth = eth_get_dev();
 	if (eth == NULL)
 		return;
diff --git a/net/arp.c b/net/arp.c
index 8a7b4a2..b8fb21f 100644
--- a/net/arp.c
+++ b/net/arp.c
@@ -15,6 +15,9 @@
 #include "link_local.h"
 #endif
 
+#define DEBUG_DEV_PKT 0
+#define DEBUG_NET_PKT 0
+
 #ifndef	CONFIG_ARP_TIMEOUT
 /* Milliseconds before trying ARP again */
 # define ARP_TIMEOUT		5000UL
@@ -58,7 +61,7 @@ void ArpRawRequest(IPaddr_t sourceIP, const uchar *targetEther,
 	struct ARP_t *arp;
 	int eth_hdr_size;
 
-	debug("ARP broadcast %d\n", NetArpWaitTry);
+	debug_cond(DEBUG_DEV_PKT, "ARP broadcast %d\n", NetArpWaitTry);
 
 	pkt = NetArpTxPacket;
 
@@ -138,7 +141,7 @@ void ArpReceive(struct Ethernet_t *et, struct IP_UDP_t *ip, int len)
 	 *   address; so if we receive such a packet, we set
 	 *   the server ethernet address
 	 */
-	debug("Got ARP\n");
+	debug_cond(DEBUG_NET_PKT, "Got ARP\n");
 
 	arp = (struct ARP_t *)ip;
 	if (len < ARP_HDR_SIZE) {
@@ -163,7 +166,7 @@ void ArpReceive(struct Ethernet_t *et, struct IP_UDP_t *ip, int len)
 	switch (ntohs(arp->ar_op)) {
 	case ARPOP_REQUEST:
 		/* reply with our IP address */
-		debug("Got ARP REQUEST, return our IP\n");
+		debug_cond(DEBUG_DEV_PKT, "Got ARP REQUEST, return our IP\n");
 		pkt = (uchar *)et;
 		eth_hdr_size = NetUpdateEther(et, et->et_src, PROT_ARP);
 		pkt += eth_hdr_size;
@@ -205,7 +208,8 @@ void ArpReceive(struct Ethernet_t *et, struct IP_UDP_t *ip, int len)
 
 		/* matched waiting packet's address */
 		if (reply_ip_addr == NetArpWaitReplyIP) {
-			debug("Got ARP REPLY, set eth addr (%pM)\n",
+			debug_cond(DEBUG_DEV_PKT,
+				"Got ARP REPLY, set eth addr (%pM)\n",
 				arp->ar_data);
 
 			/* save address for later use */
diff --git a/net/link_local.c b/net/link_local.c
index 16ec9a7..5395bf6 100644
--- a/net/link_local.c
+++ b/net/link_local.c
@@ -16,6 +16,11 @@
 #include "arp.h"
 #include "net_rand.h"
 
+#define DEBUG_LL_STATE 0
+#define DEBUG_DEV_PKT 0
+#define DEBUG_NET_PKT 0
+#define DEBUG_INT_STATE 0
+
 /* We don't need more than 32 bits of the counter */
 #define MONOTONIC_MS() ((unsigned)get_timer(0) * (1000 / CONFIG_SYS_HZ))
 
@@ -93,7 +98,7 @@ static void configure_wait(void)
 	/* set deadline_ms to the point in time when we timeout */
 	deadline_ms = MONOTONIC_MS() + timeout_ms;
 
-	debug("...wait %d %s nprobes=%u, nclaims=%u\n",
+	debug_cond(DEBUG_DEV_PKT, "...wait %d %s nprobes=%u, nclaims=%u\n",
 			timeout_ms, eth_get_name(), nprobes, nclaims);
 
 	NetSetTimeout(timeout_ms, LinkLocalTimeout);
@@ -132,7 +137,7 @@ LinkLocalTimeout(void)
 		   have been received, so we can progress through the states */
 		if (nprobes < PROBE_NUM) {
 			nprobes++;
-			debug("probe/%u %s@%pI4\n",
+			debug_cond(DEBUG_LL_STATE, "probe/%u %s@%pI4\n",
 					nprobes, eth_get_name(), &ip);
 			ArpRawRequest(0, NetEtherNullAddr, ip);
 			timeout_ms = PROBE_MIN * 1000;
@@ -141,7 +146,7 @@ LinkLocalTimeout(void)
 			/* Switch to announce state */
 			state = ANNOUNCE;
 			nclaims = 0;
-			debug("announce/%u %s@%pI4\n",
+			debug_cond(DEBUG_LL_STATE, "announce/%u %s@%pI4\n",
 					nclaims, eth_get_name(), &ip);
 			ArpRawRequest(ip, NetOurEther, ip);
 			timeout_ms = ANNOUNCE_INTERVAL * 1000;
@@ -153,7 +158,7 @@ LinkLocalTimeout(void)
 		   to the announce state */
 		state = ANNOUNCE;
 		nclaims = 0;
-		debug("announce/%u %s@%pI4\n",
+		debug_cond(DEBUG_LL_STATE, "announce/%u %s@%pI4\n",
 				nclaims, eth_get_name(), &ip);
 		ArpRawRequest(ip, NetOurEther, ip);
 		timeout_ms = ANNOUNCE_INTERVAL * 1000;
@@ -164,7 +169,7 @@ LinkLocalTimeout(void)
 		   the states */
 		if (nclaims < ANNOUNCE_NUM) {
 			nclaims++;
-			debug("announce/%u %s@%pI4\n",
+			debug_cond(DEBUG_LL_STATE, "announce/%u %s@%pI4\n",
 					nclaims, eth_get_name(), &ip);
 			ArpRawRequest(ip, NetOurEther, ip);
 			timeout_ms = ANNOUNCE_INTERVAL * 1000;
@@ -217,10 +222,11 @@ void LinkLocalReceiveArp(struct ARP_t *arp, int len)
 		if ((int)(diff) < 0) {
 			/* Current time is greater than the expected timeout
 			   time. This should never happen */
-			debug("missed an expected timeout\n");
+			debug_cond(DEBUG_LL_STATE,
+				"missed an expected timeout\n");
 			timeout_ms = 0;
 		} else {
-			debug("adjusting timeout\n");
+			debug_cond(DEBUG_INT_STATE, "adjusting timeout\n");
 			timeout_ms = diff | 1; /* never 0 */
 		}
 	}
@@ -240,13 +246,13 @@ void LinkLocalReceiveArp(struct ARP_t *arp, int len)
 	}
 */
 
-	debug("%s recv arp type=%d, op=%d,\n",
+	debug_cond(DEBUG_INT_STATE, "%s recv arp type=%d, op=%d,\n",
 		eth_get_name(), ntohs(arp->ar_pro),
 		ntohs(arp->ar_op));
-	debug("\tsource=%pM %pI4\n",
+	debug_cond(DEBUG_INT_STATE, "\tsource=%pM %pI4\n",
 		&arp->ar_sha,
 		&arp->ar_spa);
-	debug("\ttarget=%pM %pI4\n",
+	debug_cond(DEBUG_INT_STATE, "\ttarget=%pM %pI4\n",
 		&arp->ar_tha,
 		&arp->ar_tpa);
 
@@ -272,8 +278,9 @@ void LinkLocalReceiveArp(struct ARP_t *arp, int len)
 		target_ip_conflict = 1;
 	}
 
-	debug("state = %d, source ip conflict = %d, target ip conflict = %d\n",
-		state, source_ip_conflict, target_ip_conflict);
+	debug_cond(DEBUG_NET_PKT,
+		"state = %d, source ip conflict = %d, target ip conflict = "
+		"%d\n", state, source_ip_conflict, target_ip_conflict);
 	switch (state) {
 	case PROBE:
 	case ANNOUNCE:
diff --git a/net/net.c b/net/net.c
index d541234..2c1e60e 100644
--- a/net/net.c
+++ b/net/net.c
@@ -111,6 +111,10 @@
 #endif
 #include "tftp.h"
 
+#define DEBUG_DEV_PKT 0
+#define DEBUG_NET_PKT 0
+#define DEBUG_INT_STATE 0
+
 DECLARE_GLOBAL_DATA_PTR;
 
 /** BOOTP EXTENTIONS **/
@@ -315,6 +319,7 @@ int NetLoop(enum proto_t protocol)
 	NetRestarted = 0;
 	NetDevExists = 0;
 	NetTryCount = 1;
+	debug_cond(DEBUG_INT_STATE, "--- NetLoop Entry\n");
 
 	NetInit();
 	eth_halt();
@@ -334,6 +339,7 @@ restart:
 	 *	here on, this code is a state machine driven by received
 	 *	packets and timer events.
 	 */
+	debug_cond(DEBUG_INT_STATE, "--- NetLoop Init\n");
 	NetInitLoop();
 
 	switch (net_check_prereq(protocol)) {
@@ -464,6 +470,9 @@ restart:
 			NetCleanupLoop();
 			eth_halt();
 			puts("\nAbort\n");
+			/* include a debug print as well incase the debug
+			   messages are directed to stderr */
+			debug_cond(DEBUG_INT_STATE, "--- NetLoop Abort!\n");
 			goto done;
 		}
 
@@ -491,6 +500,7 @@ restart:
 			}
 #endif /* CONFIG_SYS_FAULT_ECHO_LINK_DOWN, ... */
 #endif /* CONFIG_MII, ... */
+			debug_cond(DEBUG_INT_STATE, "--- NetLoop timeout\n");
 			x = timeHandler;
 			timeHandler = (thand_f *)0;
 			(*x)();
@@ -518,10 +528,12 @@ restart:
 			}
 			eth_halt();
 			ret = NetBootFileXferSize;
+			debug_cond(DEBUG_INT_STATE, "--- NetLoop Success!\n");
 			goto done;
 
 		case NETLOOP_FAIL:
 			NetCleanupLoop();
+			debug_cond(DEBUG_INT_STATE, "--- NetLoop Fail!\n");
 			goto done;
 		}
 	}
@@ -602,6 +614,7 @@ NetGetUDPHandler(void)
 void
 NetSetUDPHandler(rxhand_f *f)
 {
+	debug_cond(DEBUG_INT_STATE, "--- NetLoop UDP handler set (%p)\n", f);
 	udpPacketHandler = f;
 }
 
@@ -614,6 +627,7 @@ NetGetARPHandler(void)
 void
 NetSetARPHandler(rxhand_f *f)
 {
+	debug_cond(DEBUG_INT_STATE, "--- NetLoop ARP handler set (%p)\n", f);
 	arpPacketHandler = f;
 }
 
@@ -628,8 +642,12 @@ void
 NetSetTimeout(ulong iv, thand_f *f)
 {
 	if (iv == 0) {
+		debug_cond(DEBUG_INT_STATE,
+			"--- NetLoop timeout handler cancelled\n");
 		timeHandler = (thand_f *)0;
 	} else {
+		debug_cond(DEBUG_INT_STATE,
+			"--- NetLoop timeout handler set (%p)\n", f);
 		timeHandler = f;
 		timeStart = get_timer(0);
 		timeDelta = iv;
@@ -640,6 +658,7 @@ NetSetTimeout(ulong iv, thand_f *f)
 void
 NetSetState(int state)
 {
+	debug_cond(DEBUG_INT_STATE, "--- NetState set to %d\n", state);
 	NetState = state;
 }
 
@@ -681,7 +700,7 @@ NetSendUDPPacket(uchar *ether, IPaddr_t dest, int dport, int sport,
 
 	/* if MAC address was not discovered yet, do an ARP request */
 	if (memcmp(ether, NetEtherNullAddr, 6) == 0) {
-		debug("sending ARP for %pI4\n", &dest);
+		debug_cond(DEBUG_DEV_PKT, "sending ARP for %pI4\n", &dest);
 
 		/* save the ip and eth addr for the packet to send after arp */
 		NetArpWaitPacketIP = dest;
@@ -696,7 +715,8 @@ NetSendUDPPacket(uchar *ether, IPaddr_t dest, int dport, int sport,
 		ArpRequest();
 		return 1;	/* waiting */
 	} else {
-		debug("sending UDP to %pI4/%pM\n", &dest, ether);
+		debug_cond(DEBUG_DEV_PKT, "sending UDP to %pI4/%pM\n",
+			&dest, ether);
 		NetSendPacket(NetTxPacket, pkt_hdr_size + payload_len);
 		return 0;	/* transmitted */
 	}
@@ -919,7 +939,7 @@ NetReceive(volatile uchar *inpkt, int len)
 #endif
 	ushort cti = 0, vlanid = VLAN_NONE, myvlanid, mynvlanid;
 
-	debug("packet received\n");
+	debug_cond(DEBUG_NET_PKT, "packet received\n");
 
 	NetRxPacket = (uchar *)inpkt;
 	NetRxPacketLen = len;
@@ -950,8 +970,6 @@ NetReceive(volatile uchar *inpkt, int len)
 
 	eth_proto = ntohs(et->et_protlen);
 
-	debug("packet received\n");
-
 	if (eth_proto < 1514) {
 		/*
 		 *	Got a 802.2 packet.  Check the other protocol field.
@@ -969,7 +987,7 @@ NetReceive(volatile uchar *inpkt, int len)
 	} else {			/* VLAN packet */
 		struct VLAN_Ethernet_t *vet = (struct VLAN_Ethernet_t *)et;
 
-		debug("VLAN packet received\n");
+		debug_cond(DEBUG_NET_PKT, "VLAN packet received\n");
 
 		/* too small packet? */
 		if (len < VLAN_ETHER_HDR_SIZE)
@@ -991,7 +1009,7 @@ NetReceive(volatile uchar *inpkt, int len)
 		len -= VLAN_ETHER_HDR_SIZE;
 	}
 
-	debug("Receive from protocol 0x%x\n", eth_proto);
+	debug_cond(DEBUG_NET_PKT, "Receive from protocol 0x%x\n", eth_proto);
 
 #if defined(CONFIG_CMD_CDP)
 	if (iscdp) {
@@ -1020,7 +1038,7 @@ NetReceive(volatile uchar *inpkt, int len)
 		break;
 #endif
 	case PROT_IP:
-		debug("Got IP\n");
+		debug_cond(DEBUG_NET_PKT, "Got IP\n");
 		/* Before we start poking the header, make sure it is there */
 		if (len < IP_UDP_HDR_SIZE) {
 			debug("len bad %d < %lu\n", len,
@@ -1029,11 +1047,12 @@ NetReceive(volatile uchar *inpkt, int len)
 		}
 		/* Check the packet length */
 		if (len < ntohs(ip->ip_len)) {
-			printf("len bad %d < %d\n", len, ntohs(ip->ip_len));
+			debug("len bad %d < %d\n", len, ntohs(ip->ip_len));
 			return;
 		}
 		len = ntohs(ip->ip_len);
-		debug("len=%d, v=%02x\n", len, ip->ip_hl_v & 0xff);
+		debug_cond(DEBUG_NET_PKT, "len=%d, v=%02x\n",
+			len, ip->ip_hl_v & 0xff);
 
 		/* Can't deal with anything except IPv4 */
 		if ((ip->ip_hl_v & 0xf0) != 0x40)
@@ -1043,7 +1062,7 @@ NetReceive(volatile uchar *inpkt, int len)
 			return;
 		/* Check the Checksum of the header */
 		if (!NetCksumOk((uchar *)ip, IP_HDR_SIZE / 2)) {
-			puts("checksum bad\n");
+			debug("checksum bad\n");
 			return;
 		}
 		/* If it is not for us, ignore it */
@@ -1092,6 +1111,10 @@ NetReceive(volatile uchar *inpkt, int len)
 			return;
 		}
 
+		debug_cond(DEBUG_DEV_PKT,
+			"received UDP (to=%pI4, from=%pI4, len=%d)\n",
+			&dst_ip, &src_ip, len);
+
 #ifdef CONFIG_UDP_CHECKSUM
 		if (ip->udp_xsum != 0) {
 			ulong   xsum;
diff --git a/net/ping.c b/net/ping.c
index 8332c88..a4fb7b7 100644
--- a/net/ping.c
+++ b/net/ping.c
@@ -11,6 +11,8 @@
 #include "ping.h"
 #include "arp.h"
 
+#define DEBUG_DEV_PKT 0
+
 static ushort PingSeqNo;
 
 /* The ip address to ping */
@@ -45,7 +47,7 @@ static int PingSend(void)
 
 	/* XXX always send arp request */
 
-	debug("sending ARP for %pI4\n", &NetPingIP);
+	debug_cond(DEBUG_DEV_PKT, "sending ARP for %pI4\n", &NetPingIP);
 
 	NetArpWaitPacketIP = NetPingIP;
 
@@ -95,7 +97,7 @@ void PingReceive(struct Ethernet_t *et, struct IP_UDP_t *ip, int len)
 	case ICMP_ECHO_REQUEST:
 		eth_hdr_size = NetUpdateEther(et, et->et_src, PROT_IP);
 
-		debug("Got ICMP ECHO REQUEST, return "
+		debug_cond(DEBUG_DEV_PKT, "Got ICMP ECHO REQUEST, return "
 			"%d bytes\n", eth_hdr_size + len);
 
 		ip->ip_sum = 0;
diff --git a/net/rarp.c b/net/rarp.c
index 3097341..edc33ca 100644
--- a/net/rarp.c
+++ b/net/rarp.c
@@ -29,6 +29,9 @@
 #include "rarp.h"
 #include "tftp.h"
 
+#define DEBUG_DEV_PKT 0
+#define DEBUG_NET_PKT 0
+
 #define TIMEOUT		5000UL	/* Milliseconds before trying BOOTP again */
 #ifndef	CONFIG_NET_RETRY_COUNT
 # define TIMEOUT_COUNT	5		/* # of timeouts before giving up  */
@@ -46,7 +49,7 @@ RarpReceive(struct IP_UDP_t *ip, unsigned len)
 {
 	struct ARP_t *arp;
 
-	debug("Got RARP\n");
+	debug_cond(DEBUG_NET_PKT, "Got RARP\n");
 	arp = (struct ARP_t *)ip;
 	if (len < ARP_HDR_SIZE) {
 		printf("bad length %d < %d\n", len, ARP_HDR_SIZE);
@@ -64,7 +67,7 @@ RarpReceive(struct IP_UDP_t *ip, unsigned len)
 		if (NetServerIP == 0)
 			NetCopyIP(&NetServerIP, &arp->ar_data[6]);
 		memcpy(NetServerEther, &arp->ar_data[0], 6);
-		debug("Got good RARP\n");
+		debug_cond(DEBUG_DEV_PKT, "Got good RARP\n");
 		net_auto_load();
 	}
 }
-- 
1.6.0.2



More information about the U-Boot mailing list