net: Allow filtering on debug traces in the net subsystem
authorJoe Hershberger <joe.hershberger@ni.com>
Wed, 23 May 2012 08:01:04 +0000 (08:01 +0000)
committerJoe Hershberger <joe.hershberger@ni.com>
Wed, 23 May 2012 22:53:08 +0000 (17:53 -0500)
Add several levels of DEBUG prints so that you can limit the noise to
the severety of your problem.

DEBUG_LL_STATE = Link local state machine changes
DEBUG_DEV_PKT = Packets or info directed to the device
DEBUG_NET_PKT = Packets on info on the network at large
DEBUG_INT_STATE = Internal network state changes

Signed-off-by: Joe Hershberger <joe.hershberger@ni.com>
drivers/net/netconsole.c
include/common.h
include/net.h
net/arp.c
net/link_local.c
net/net.c
net/ping.c
net/rarp.c

index 19e563ea820a25eb1193c91b8f5a3b95bf581619..14243b8a92c05f22efc26504b80fc0bd338671b5 100644 (file)
@@ -83,6 +83,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 +114,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;
index eb9de1870fb8b2eafd49c2b2ebd524a6bff9e433..8564a65cfdd70859fa11e78150be6c361ad23d81 100644 (file)
@@ -729,13 +729,6 @@ int gunzip(void *, int, unsigned char *, unsigned long *);
 int zunzip(void *dst, int dstlen, unsigned char *src, unsigned long *lenp,
                                                int stoponerr, int offset);
 
-/* lib/net_utils.c */
-#include <net.h>
-static inline IPaddr_t getenv_IPaddr (char *var)
-{
-       return (string_to_ip(getenv(var)));
-}
-
 /* lib/qsort.c */
 void qsort(void *base, size_t nmemb, size_t size,
           int(*compar)(const void *, const void *));
@@ -804,6 +797,13 @@ void       fputc(int file, const char c);
 int    ftstc(int file);
 int    fgetc(int file);
 
+/* lib/net_utils.c */
+#include <net.h>
+static inline IPaddr_t getenv_IPaddr(char *var)
+{
+       return string_to_ip(getenv(var));
+}
+
 /*
  * CONSOLE multiplexing.
  */
index a902a64752ae56635d2174e86470cefbf1ec8b4f..a092f291bbcd643b8eda122b10b0509d1fd4b719 100644 (file)
 #include <asm/cache.h>
 #include <asm/byteorder.h>     /* for nton* / ntoh* stuff */
 
+#define DEBUG_LL_STATE 0       /* Link local state machine changes */
+#define DEBUG_DEV_PKT 0                /* Packets or info directed to the device */
+#define DEBUG_NET_PKT 0                /* Packets on info on the network at large */
+#define DEBUG_INT_STATE 0      /* Internal network state changes */
 
 /*
  *     The number of receive packet buffers, and the required packet buffer
@@ -480,6 +484,7 @@ static inline void net_set_state(enum net_loop_state state)
 {
        extern enum net_loop_state net_state;
 
+       debug_cond(DEBUG_INT_STATE, "--- NetState set to %d\n", state);
        net_state = state;
 }
 
index 0b0ccbb58af4d919dea8e9af1a158d80ad957dfb..bac4cab5efa55153c14c620b0be47598a82b05f4 100644 (file)
--- a/net/arp.c
+++ b/net/arp.c
@@ -55,7 +55,7 @@ void arp_raw_request(IPaddr_t sourceIP, const uchar *targetEther,
        struct arp_hdr *arp;
        int eth_hdr_size;
 
-       debug("ARP broadcast %d\n", NetArpWaitTry);
+       debug_cond(DEBUG_DEV_PKT, "ARP broadcast %d\n", NetArpWaitTry);
 
        pkt = NetArpTxPacket;
 
@@ -135,7 +135,7 @@ void ArpReceive(struct ethernet_hdr *et, struct ip_udp_hdr *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_hdr *)ip;
        if (len < ARP_HDR_SIZE) {
@@ -160,7 +160,7 @@ void ArpReceive(struct ethernet_hdr *et, struct ip_udp_hdr *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 = net_update_ether(et, et->et_src, PROT_ARP);
                pkt += eth_hdr_size;
@@ -203,7 +203,8 @@ void ArpReceive(struct ethernet_hdr *et, struct ip_udp_hdr *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 */
index dde96aec3ff32b6518074afdf5b25d2b4872bbf6..336286395be341f86c40bb8caeefc34a78e58e9d 100644 (file)
@@ -93,7 +93,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, link_local_timeout);
@@ -131,7 +131,7 @@ static void link_local_timeout(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);
                        arp_raw_request(0, NetEtherNullAddr, ip);
                        timeout_ms = PROBE_MIN * 1000;
@@ -140,7 +140,7 @@ static void link_local_timeout(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);
                        arp_raw_request(ip, NetOurEther, ip);
                        timeout_ms = ANNOUNCE_INTERVAL * 1000;
@@ -152,7 +152,7 @@ static void link_local_timeout(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);
                arp_raw_request(ip, NetOurEther, ip);
                timeout_ms = ANNOUNCE_INTERVAL * 1000;
@@ -163,7 +163,7 @@ static void link_local_timeout(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);
                        arp_raw_request(ip, NetOurEther, ip);
                        timeout_ms = ANNOUNCE_INTERVAL * 1000;
@@ -216,10 +216,11 @@ void link_local_receive_arp(struct arp_hdr *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 */
                }
        }
@@ -239,13 +240,13 @@ void link_local_receive_arp(struct arp_hdr *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);
 
@@ -271,8 +272,9 @@ void link_local_receive_arp(struct arp_hdr *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:
index 4f4b34b2ac2756a2ed31c59ff7181b089c7b4e0c..9de7d92643e04163ee504a75a63f01ec8b2e666e 100644 (file)
--- a/net/net.c
+++ b/net/net.c
@@ -310,6 +310,7 @@ int NetLoop(enum proto_t protocol)
        NetRestarted = 0;
        NetDevExists = 0;
        NetTryCount = 1;
+       debug_cond(DEBUG_INT_STATE, "--- NetLoop Entry\n");
 
        bootstage_mark_name(BOOTSTAGE_ID_ETH_START, "eth_start");
        net_init();
@@ -330,6 +331,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)) {
@@ -460,6 +462,9 @@ restart:
                        net_cleanup_loop();
                        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;
                }
 
@@ -487,6 +492,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)();
@@ -514,10 +520,12 @@ restart:
                        }
                        eth_halt();
                        ret = NetBootFileXferSize;
+                       debug_cond(DEBUG_INT_STATE, "--- NetLoop Success!\n");
                        goto done;
 
                case NETLOOP_FAIL:
                        net_cleanup_loop();
+                       debug_cond(DEBUG_INT_STATE, "--- NetLoop Fail!\n");
                        goto done;
 
                case NETLOOP_CONTINUE:
@@ -605,6 +613,7 @@ rxhand_f *net_get_udp_handler(void)
 
 void net_set_udp_handler(rxhand_f *f)
 {
+       debug_cond(DEBUG_INT_STATE, "--- NetLoop UDP handler set (%p)\n", f);
        if (f == NULL)
                udp_packet_handler = dummy_handler;
        else
@@ -618,6 +627,7 @@ rxhand_f *net_get_arp_handler(void)
 
 void net_set_arp_handler(rxhand_f *f)
 {
+       debug_cond(DEBUG_INT_STATE, "--- NetLoop ARP handler set (%p)\n", f);
        if (f == NULL)
                arp_packet_handler = dummy_handler;
        else
@@ -635,8 +645,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;
@@ -672,7 +686,7 @@ int 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;
@@ -687,7 +701,8 @@ int 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 */
        }
@@ -910,7 +925,7 @@ NetReceive(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 = inpkt;
        NetRxPacketLen = len;
@@ -941,8 +956,6 @@ NetReceive(uchar *inpkt, int len)
 
        eth_proto = ntohs(et->et_protlen);
 
-       debug("packet received\n");
-
        if (eth_proto < 1514) {
                struct e802_hdr *et802 = (struct e802_hdr *)et;
                /*
@@ -962,7 +975,7 @@ NetReceive(uchar *inpkt, int len)
                struct vlan_ethernet_hdr *vet =
                        (struct vlan_ethernet_hdr *)et;
 
-               debug("VLAN packet received\n");
+               debug_cond(DEBUG_NET_PKT, "VLAN packet received\n");
 
                /* too small packet? */
                if (len < VLAN_ETHER_HDR_SIZE)
@@ -984,7 +997,7 @@ NetReceive(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) {
@@ -1013,7 +1026,7 @@ NetReceive(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,
@@ -1022,11 +1035,12 @@ NetReceive(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)
@@ -1036,7 +1050,7 @@ NetReceive(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 */
@@ -1085,6 +1099,10 @@ NetReceive(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;
index 2ba9f76e5a5b032ee7d194c4c941843d84c1b40d..0710b9228d1ea9318901faaf56fdfe4ef68743e3 100644 (file)
@@ -45,7 +45,7 @@ static int ping_send(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;
 
@@ -93,7 +93,7 @@ void ping_receive(struct ethernet_hdr *et, struct ip_udp_hdr *ip, int len)
        case ICMP_ECHO_REQUEST:
                eth_hdr_size = net_update_ether(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;
index a715c2c7fd6420d5c157fce073ede337adb2c582..49185b4e1472adf9d25172ee8ee7af43d703751f 100644 (file)
@@ -45,7 +45,7 @@ void rarp_receive(struct ip_udp_hdr *ip, unsigned len)
 {
        struct arp_hdr *arp;
 
-       debug("Got RARP\n");
+       debug_cond(DEBUG_NET_PKT, "Got RARP\n");
        arp = (struct arp_hdr *)ip;
        if (len < ARP_HDR_SIZE) {
                printf("bad length %d < %d\n", len, ARP_HDR_SIZE);
@@ -63,7 +63,7 @@ void rarp_receive(struct ip_udp_hdr *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();
        }
 }