Module Name: src
Committed By: yamaguchi
Date: Wed Nov 25 10:39:47 UTC 2020
Modified Files:
src/sys/net: if_pppoe.c
Log Message:
add a logging function used at debugging pppoe(4)
To generate a diff of this commit:
cvs rdiff -u -r1.156 -r1.157 src/sys/net/if_pppoe.c
Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.
Modified files:
Index: src/sys/net/if_pppoe.c
diff -u src/sys/net/if_pppoe.c:1.156 src/sys/net/if_pppoe.c:1.157
--- src/sys/net/if_pppoe.c:1.156 Wed Nov 25 10:38:10 2020
+++ src/sys/net/if_pppoe.c Wed Nov 25 10:39:47 2020
@@ -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 @@ struct pppoetag {
} 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 void pppoe_start(struct ifnet *);
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 @@ pppoe_clone_destroy(struct ifnet *ifp)
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 @@ pppoe_find_softc_by_hunique(uint8_t *tok
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 @@ pppoe_dispatch_disc_pkt(struct mbuf *m,
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 @@ pppoe_dispatch_disc_pkt(struct mbuf *m,
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 @@ pppoe_dispatch_disc_pkt(struct mbuf *m,
}
}
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 @@ breakbreak:;
/* 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 @@ breakbreak:;
}
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 @@ breakbreak:;
/* 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 @@ breakbreak:;
}
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 @@ breakbreak:;
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 @@ breakbreak:;
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 @@ breakbreak:;
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 @@ breakbreak:;
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 @@ breakbreak:;
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 @@ pppoe_data_input(struct mbuf *m)
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 @@ pppoe_output(struct pppoe_softc *sc, str
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 @@ pppoe_timeout(struct pppoe_softc *sc)
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 @@ pppoe_timeout(struct pppoe_softc *sc)
}
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 @@ pppoe_timeout(struct pppoe_softc *sc)
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);
}
callout_schedule(&sc->sc_timeout,
PPPOE_DISC_TIMEOUT * (1 + sc->sc_padi_retried));
@@ -1544,10 +1557,7 @@ pppoe_timeout(struct pppoe_softc *sc)
}
if ((err = pppoe_send_padr(sc)) != 0) {
sc->sc_padr_retried--;
- 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", err);
}
callout_schedule(&sc->sc_timeout,
PPPOE_DISC_TIMEOUT * (1 + sc->sc_padr_retried));
@@ -1585,9 +1595,8 @@ pppoe_connect(struct pppoe_softc *sc)
sc->sc_state = PPPOE_STATE_PADI_SENT;
sc->sc_padr_retried = 0;
err = pppoe_send_padi(sc);
- if (err != 0 && 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);
+ if (err != 0)
+ pppoe_printf(sc, "failed to send PADI, error=%d\n", err);
callout_schedule(&sc->sc_timeout, PPPOE_DISC_TIMEOUT);
RELEASE_SPLNET();
return err;
@@ -1607,9 +1616,7 @@ pppoe_disconnect(struct pppoe_softc *sc)
if (sc->sc_state < PPPOE_STATE_SESSION)
err = EBUSY;
else {
- if (sc->sc_sppp.pp_if.if_flags & IFF_DEBUG)
- printf("%s: disconnecting\n",
- sc->sc_sppp.pp_if.if_xname);
+ pppoe_printf(sc, "disconnecting\n");
err = pppoe_send_padt(sc->sc_eth_if, sc->sc_session,
(const uint8_t *)&sc->sc_dest);
}
@@ -1654,8 +1661,7 @@ pppoe_abort_connect(struct pppoe_softc *
{
KASSERT(PPPOE_WLOCKED(sc));
- printf("%s: could not establish connection\n",
- sc->sc_sppp.pp_if.if_xname);
+ pppoe_printf(sc, "could not establish connection\n");
sc->sc_state = PPPOE_STATE_CLOSING;
PPPOE_UNLOCK(sc);
@@ -2002,8 +2008,8 @@ pppoe_ifattach_hook(void *arg, unsigned
}
if (sc->sc_sppp.pp_if.if_flags & IFF_UP) {
sc->sc_sppp.pp_if.if_flags &= ~(IFF_UP|IFF_RUNNING);
- printf("%s: ethernet interface detached, going down\n",
- sc->sc_sppp.pp_if.if_xname);
+ pppoe_printf(sc,
+ "ethernet interface detached, going down\n");
}
sc->sc_eth_if = NULL;
pppoe_clear_softc(sc, "ethernet interface detached");
@@ -2020,9 +2026,8 @@ pppoe_clear_softc(struct pppoe_softc *sc
/* stop timer */
callout_stop(&sc->sc_timeout);
- if (sc->sc_sppp.pp_if.if_flags & IFF_DEBUG)
- printf("%s: session 0x%x terminated, %s\n",
- sc->sc_sppp.pp_if.if_xname, sc->sc_session, message);
+ pppoe_printf(sc, "session 0x%x terminated, %s\n",
+ sc->sc_session, message);
/* fix our state */
sc->sc_state = PPPOE_STATE_INITIAL;