Source-Changes-HG archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

[src/trunk]: src/sys/net add a logging function used at debugging pppoe(4)



details:   https://anonhg.NetBSD.org/src/rev/b3b92fcf8045
branches:  trunk
changeset: 957368:b3b92fcf8045
user:      yamaguchi <yamaguchi%NetBSD.org@localhost>
date:      Wed Nov 25 10:39:47 2020 +0000

description:
add a logging function used at debugging pppoe(4)

diffstat:

 sys/net/if_pppoe.c |  155 +++++++++++++++++++++++++++-------------------------
 1 files changed, 80 insertions(+), 75 deletions(-)

diffs (truncated from 370 to 300 lines):

diff -r c7412c6bda26 -r b3b92fcf8045 sys/net/if_pppoe.c
--- a/sys/net/if_pppoe.c        Wed Nov 25 10:38:10 2020 +0000
+++ b/sys/net/if_pppoe.c        Wed Nov 25 10:39:47 2020 +0000
@@ -1,4 +1,4 @@
-/* $NetBSD: if_pppoe.c,v 1.156 2020/11/25 10:38:10 yamaguchi Exp $ */
+/* $NetBSD: if_pppoe.c,v 1.157 2020/11/25 10:39:47 yamaguchi Exp $ */
 
 /*
  * Copyright (c) 2002, 2008 The NetBSD Foundation, Inc.
@@ -30,7 +30,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: if_pppoe.c,v 1.156 2020/11/25 10:38:10 yamaguchi Exp $");
+__KERNEL_RCSID(0, "$NetBSD: if_pppoe.c,v 1.157 2020/11/25 10:39:47 yamaguchi Exp $");
 
 #ifdef _KERNEL_OPT
 #include "pppoe.h"
@@ -155,6 +155,12 @@
                                } while (0)
 #endif
 
+#ifdef PPPOE_DEBUG
+#define DPRINTF(_sc, _fmt, _arg...)    pppoe_printf((_sc), (_fmt), ##_arg)
+#else
+#define DPRINTF(_sc, _fmt, _arg...)    __nothing
+#endif
+
 struct pppoe_softc {
        struct sppp sc_sppp;            /* contains a struct ifnet as first element */
        LIST_ENTRY(pppoe_softc) sc_list;
@@ -212,6 +218,7 @@
 static int pppoe_transmit(struct ifnet *, struct mbuf *);
 #endif
 static void pppoe_clear_softc(struct pppoe_softc *, const char *);
+static void pppoe_printf(struct pppoe_softc *, const char *, ...);
 
 /* internal timeout handling */
 static void pppoe_timeout_co(void *);
@@ -445,6 +452,35 @@
        return 0;
 }
 
+static void
+pppoe_printf(struct pppoe_softc *sc, const char *fmt, ...)
+{
+       va_list ap;
+       bool pppoe_debug;
+
+#ifdef PPPOE_DEBUG
+       pppoe_debug = true;
+#else
+       pppoe_debug = false;
+#endif
+
+       if (sc == NULL) {
+               if (!pppoe_debug)
+                       return;
+
+               printf("pppoe: ");
+       } else {
+               if (!ISSET(sc->sc_sppp.pp_if.if_flags, IFF_DEBUG))
+                       return;
+
+               printf("%s: ", sc->sc_sppp.pp_if.if_xname);
+       }
+
+       va_start(ap, fmt);
+       vprintf(fmt, ap);
+       va_end(ap);
+}
+
 /*
  * Find the interface handling the specified session.
  * Note: O(number of sessions open), this is a client-side only, mean
@@ -504,22 +540,21 @@
        rw_exit(&pppoe_softc_list_lock);
 
        if (sc == NULL) {
-#ifdef PPPOE_DEBUG
-               printf("pppoe: alien host unique tag, no session found\n");
-#endif
+               pppoe_printf(NULL, "alien host unique tag"
+                   ", no session found\n");
                return NULL;
        }
 
        /* should be safe to access *sc now */
        if (sc->sc_state < PPPOE_STATE_PADI_SENT || sc->sc_state >= PPPOE_STATE_SESSION) {
-               printf("%s: host unique tag found, but it belongs to a connection in state %d\n",
-                       sc->sc_sppp.pp_if.if_xname, sc->sc_state);
+               pppoe_printf(sc, "host unique tag found"
+                   ", but it belongs to a connection in state %d\n",
+                   sc->sc_state);
                PPPOE_UNLOCK(sc);
                return NULL;
        }
        if (sc->sc_eth_if != rcvif) {
-               printf("%s: wrong interface, not accepting host unique\n",
-                       sc->sc_sppp.pp_if.if_xname);
+               pppoe_printf(sc, "wrong interface, not accepting host unique\n");
                PPPOE_UNLOCK(sc);
                return NULL;
        }
@@ -577,7 +612,6 @@
        uint16_t session, plen;
        struct pppoe_softc *sc;
        const char *err_msg;
-       char devname[IF_NAMESIZE];
        char *error;
        size_t dlen;
        uint8_t *ac_cookie;
@@ -669,7 +703,7 @@
                                strnvisx(error, dlen,
                                    mtod(n, char*) + noff, len,
                                    VIS_SAFE | VIS_OCTAL);
-                               printf("pppoe: connected to %s\n", error);
+                               pppoe_printf(NULL, "connected to %s\n", error);
                                free(error, M_TEMP);
                        }
                        break;  /* ignored */
@@ -743,10 +777,10 @@
                                }
                        }
                        if (error) {
-                               printf("pppoe: %s: %s\n", err_msg, error);
+                               pppoe_printf(NULL, "%s: %s\n", err_msg, error);
                                free(error, M_TEMP);
                        } else
-                               printf("pppoe: %s\n", err_msg);
+                               pppoe_printf(NULL, "%s\n", err_msg);
                        if (errortag || m == NULL)
                                goto done;
                }
@@ -827,7 +861,7 @@
                        /* be quiet if there is not a single pppoe instance */
                        rw_enter(&pppoe_softc_list_lock, RW_READER);
                        if (!LIST_EMPTY(&pppoe_softc_list)) {
-                               printf("pppoe: received PADR"
+                               pppoe_printf(NULL, "received PADR"
                                    " but could not find request for it\n");
                        }
                        rw_exit(&pppoe_softc_list_lock);
@@ -835,8 +869,7 @@
                }
 
                if (sc->sc_state != PPPOE_STATE_PADO_SENT) {
-                       printf("%s: received unexpected PADR\n",
-                           sc->sc_sppp.pp_if.if_xname);
+                       pppoe_printf(sc, "received unexpected PADR\n");
                        PPPOE_UNLOCK(sc);
                        goto done;
                }
@@ -880,7 +913,7 @@
                        /* be quiet if there is not a single pppoe instance */
                        rw_enter(&pppoe_softc_list_lock, RW_READER);
                        if (!LIST_EMPTY(&pppoe_softc_list)) {
-                               printf("pppoe: received PADO"
+                               pppoe_printf(NULL, "received PADO"
                                    " but could not find request for it\n");
                        }
                        rw_exit(&pppoe_softc_list_lock);
@@ -888,8 +921,7 @@
                }
 
                if (sc->sc_state != PPPOE_STATE_PADI_SENT) {
-                       printf("%s: received unexpected PADO\n",
-                           sc->sc_sppp.pp_if.if_xname);
+                       pppoe_printf(sc, "received unexpected PADO\n");
                        PPPOE_UNLOCK(sc);
                        goto done;
                }
@@ -900,9 +932,8 @@
                        sc->sc_ac_cookie = malloc(ac_cookie_len, M_DEVBUF,
                            M_DONTWAIT);
                        if (sc->sc_ac_cookie == NULL) {
-                               printf("%s: FATAL: could not allocate memory "
-                                   "for AC cookie\n",
-                                   sc->sc_sppp.pp_if.if_xname);
+                               pppoe_printf(sc, "FATAL: could not allocate memory "
+                                   "for AC cookie\n");
                                PPPOE_UNLOCK(sc);
                                goto done;
                        }
@@ -915,9 +946,8 @@
                        sc->sc_relay_sid = malloc(relay_sid_len, M_DEVBUF,
                            M_DONTWAIT);
                        if (sc->sc_relay_sid == NULL) {
-                               printf("%s: FATAL: could not allocate memory "
-                                   "for relay SID\n",
-                                   sc->sc_sppp.pp_if.if_xname);
+                               pppoe_printf(sc, "FATAL: could not allocate memory "
+                                   "for relay SID\n");
                                PPPOE_UNLOCK(sc);
                                goto done;
                        }
@@ -929,10 +959,8 @@
                sc->sc_padr_retried = 0;
                sc->sc_state = PPPOE_STATE_PADR_SENT;
                if ((err = pppoe_send_padr(sc)) != 0) {
-                       if (sc->sc_sppp.pp_if.if_flags & IFF_DEBUG)
-                               printf("%s: failed to send PADR, "
-                                   "error=%d\n", sc->sc_sppp.pp_if.if_xname,
-                                   err);
+                       pppoe_printf(sc,
+                           "failed to send PADR, error=%d\n", err);
                }
                callout_schedule(&sc->sc_timeout,
                    PPPOE_DISC_TIMEOUT * (1 + sc->sc_padr_retried));
@@ -957,9 +985,7 @@
 
                sc->sc_session = session;
                callout_stop(&sc->sc_timeout);
-               if (sc->sc_sppp.pp_if.if_flags & IFF_DEBUG)
-                       printf("%s: session 0x%x connected\n",
-                           sc->sc_sppp.pp_if.if_xname, session);
+               pppoe_printf(sc, "session 0x%x connected\n", session);
                sc->sc_state = PPPOE_STATE_SESSION;
                PPPOE_UNLOCK(sc);
 
@@ -995,15 +1021,11 @@
 
                m_put_rcvif_psref(rcvif, &psref);
 
-               if (sc != NULL) {
-                       strlcpy(devname, sc->sc_sppp.pp_if.if_xname,
-                           sizeof(devname));
-                       PPPOE_UNLOCK(sc);
-               } else
-                       strlcpy(devname, "pppoe", sizeof(devname));
-
-               printf("%s: unknown code (0x%04x) session = 0x%04x\n",
-                   devname, ph->code, session);
+               pppoe_printf(sc, "unknown code (0x%04x) session = 0x%04x\n",
+                   ph->code, session);
+               if (sc == NULL)
+                       goto done;
+               PPPOE_UNLOCK(sc);
                break;
        }
 
@@ -1108,7 +1130,7 @@
                        if (pppoe_is_my_frame(dhost, rcvif) &&
                            ppsratecheck(&lasttime, &curpps,
                                pppoe_term_unknown_pps)) {
-                               printf("pppoe: input for unknown session %#x, "
+                               pppoe_printf(NULL, "input for unknown session %#x, "
                                    "sending PADT\n", session);
                                pppoe_send_padt(rcvif, session, shost);
                        }
@@ -1181,12 +1203,9 @@
        eh->ether_type = htons(etype);
        memcpy(&eh->ether_dhost, &sc->sc_dest, sizeof sc->sc_dest);
 
-#ifdef PPPOE_DEBUG
-       printf("%s (%x) state=%d, session=0x%x output -> %s, len=%d\n",
-           sc->sc_sppp.pp_if.if_xname, etype,
-           sc->sc_state, sc->sc_session,
+       DPRINTF(sc, "(%x) state=%d, session=0x%x output -> %s, len=%d\n",
+           etype, sc->sc_state, sc->sc_session,
            ether_sprintf((const unsigned char *)&sc->sc_dest), m->m_pkthdr.len);
-#endif
 
        m->m_flags &= ~(M_BCAST|M_MCAST);
        if_statinc(&sc->sc_sppp.pp_if, if_opackets);
@@ -1474,9 +1493,7 @@
        int retry_wait, err;
        DECLARE_SPLNET_VARIABLE;
 
-#ifdef PPPOE_DEBUG
-       printf("%s: timeout\n", sc->sc_sppp.pp_if.if_xname);
-#endif
+       pppoe_printf(sc, "timeout\n");
 
        PPPOE_LOCK(sc, RW_WRITER);
        switch (sc->sc_state) {
@@ -1513,10 +1530,8 @@
                }
                if ((err = pppoe_send_padi(sc)) != 0) {
                        sc->sc_padi_retried--;
-                       if (sc->sc_sppp.pp_if.if_flags & IFF_DEBUG)
-                               printf("%s: failed to transmit PADI, "
-                                   "error=%d\n",
-                                   sc->sc_sppp.pp_if.if_xname, err);
+                       pppoe_printf(sc,
+                           "failed to transmit PADI, error=%d\n", err);
                }
                callout_schedule(&sc->sc_timeout,retry_wait);
                RELEASE_SPLNET();
@@ -1531,10 +1546,8 @@
                        sc->sc_state = PPPOE_STATE_PADI_SENT;
                        sc->sc_padr_retried = 0;
                        if ((err = pppoe_send_padi(sc)) != 0) {
-                               if (sc->sc_sppp.pp_if.if_flags & IFF_DEBUG)
-                                       printf("%s: failed to send PADI"
-                                           ", error=%d\n",
-                                           sc->sc_sppp.pp_if.if_xname, err);
+                               pppoe_printf(sc,
+                                   "failed to send PADI, error=%d\n", err);
                        }



Home | Main Index | Thread Index | Old Index