Module Name:    src
Committed By:   martin
Date:           Fri Jul  7 19:02:22 UTC 2023

Modified Files:
        src/sys/net [netbsd-10]: if_wg.c

Log Message:
Pull up following revision(s) (requested by jakllsch in ticket #228):

        sys/net/if_wg.c: revision 1.76

Give scope and additional details to wg(4) diagnostic messages.


To generate a diff of this commit:
cvs rdiff -u -r1.71.2.1 -r1.71.2.2 src/sys/net/if_wg.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_wg.c
diff -u src/sys/net/if_wg.c:1.71.2.1 src/sys/net/if_wg.c:1.71.2.2
--- src/sys/net/if_wg.c:1.71.2.1	Fri Jan 13 19:14:13 2023
+++ src/sys/net/if_wg.c	Fri Jul  7 19:02:22 2023
@@ -1,4 +1,4 @@
-/*	$NetBSD: if_wg.c,v 1.71.2.1 2023/01/13 19:14:13 martin Exp $	*/
+/*	$NetBSD: if_wg.c,v 1.71.2.2 2023/07/07 19:02:22 martin Exp $	*/
 
 /*
  * Copyright (C) Ryota Ozaki <ozaki.ry...@gmail.com>
@@ -41,7 +41,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: if_wg.c,v 1.71.2.1 2023/01/13 19:14:13 martin Exp $");
+__KERNEL_RCSID(0, "$NetBSD: if_wg.c,v 1.71.2.2 2023/07/07 19:02:22 martin Exp $");
 
 #ifdef _KERNEL_OPT
 #include "opt_altq_enabled.h"
@@ -1477,7 +1477,8 @@ wg_handle_msg_init(struct wg_softc *wg, 
 	    wgmi->wgmi_static, sizeof(wgmi->wgmi_static), hash, sizeof(hash));
 	if (error != 0) {
 		WG_LOG_RATECHECK(&wg->wg_ppsratecheck, LOG_DEBUG,
-		    "wg_algo_aead_dec for secret key failed\n");
+		    "%s: wg_algo_aead_dec for secret key failed\n",
+		    if_name(&wg->wg_if));
 		return;
 	}
 	/* Hi := HASH(Hi || msg.static) */
@@ -1542,7 +1543,8 @@ wg_handle_msg_init(struct wg_softc *wg, 
 	    hash, sizeof(hash));
 	if (error != 0) {
 		WG_LOG_RATECHECK(&wgp->wgp_ppsratecheck, LOG_DEBUG,
-		    "wg_algo_aead_dec for timestamp failed\n");
+		    "%s: peer %s: wg_algo_aead_dec for timestamp failed\n",
+		    if_name(&wg->wg_if), wgp->wgp_name);
 		goto out;
 	}
 	/* Hi := HASH(Hi || msg.timestamp) */
@@ -1557,7 +1559,8 @@ wg_handle_msg_init(struct wg_softc *wg, 
 	    sizeof(timestamp));
 	if (ret <= 0) {
 		WG_LOG_RATECHECK(&wgp->wgp_ppsratecheck, LOG_DEBUG,
-		    "invalid init msg: timestamp is old\n");
+		    "%s: peer %s: invalid init msg: timestamp is old\n",
+		    if_name(&wg->wg_if), wgp->wgp_name);
 		goto out;
 	}
 	memcpy(wgp->wgp_timestamp_latest_init, timestamp, sizeof(timestamp));
@@ -1975,7 +1978,8 @@ wg_handle_msg_resp(struct wg_softc *wg, 
 	WG_DUMP_HASH("wgmr_empty", wgmr->wgmr_empty);
 	if (error != 0) {
 		WG_LOG_RATECHECK(&wgp->wgp_ppsratecheck, LOG_DEBUG,
-		    "wg_algo_aead_dec for empty message failed\n");
+		    "%s: peer %s: wg_algo_aead_dec for empty message failed\n",
+		    if_name(&wg->wg_if), wgp->wgp_name);
 		goto out;
 	}
 	/* Hr := HASH(Hr || msg.empty) */
@@ -2020,7 +2024,8 @@ wg_handle_msg_resp(struct wg_softc *wg, 
 		const uint32_t h = curcpu()->ci_index; // pktq_rps_hash(m)
 		M_SETCTX(m, wgp);
 		if (__predict_false(!pktq_enqueue(wg_pktq, m, h))) {
-			WGLOG(LOG_ERR, "pktq full, dropping\n");
+			WGLOG(LOG_ERR, "%s: pktq full, dropping\n",
+			    if_name(&wg->wg_if));
 			m_freem(m);
 		}
 		kpreempt_enable();
@@ -2575,7 +2580,8 @@ wg_handle_msg_data(struct wg_softc *wg, 
 	    le64toh(wgmd->wgmd_counter));
 	if (error) {
 		WG_LOG_RATECHECK(&wgp->wgp_ppsratecheck, LOG_DEBUG,
-		    "out-of-window packet: %"PRIu64"\n",
+		    "%s: peer %s: out-of-window packet: %"PRIu64"\n",
+		    if_name(&wg->wg_if), wgp->wgp_name,
 		    le64toh(wgmd->wgmd_counter));
 		goto out;
 	}
@@ -2629,7 +2635,8 @@ wg_handle_msg_data(struct wg_softc *wg, 
 	    encrypted_len, NULL, 0);
 	if (error != 0) {
 		WG_LOG_RATECHECK(&wgp->wgp_ppsratecheck, LOG_DEBUG,
-		    "failed to wg_algo_aead_dec\n");
+		    "%s: peer %s: failed to wg_algo_aead_dec\n",
+		    if_name(&wg->wg_if), wgp->wgp_name);
 		m_freem(n);
 		goto out;
 	}
@@ -2642,7 +2649,8 @@ wg_handle_msg_data(struct wg_softc *wg, 
 	mutex_exit(&wgs->wgs_recvwin->lock);
 	if (error) {
 		WG_LOG_RATECHECK(&wgp->wgp_ppsratecheck, LOG_DEBUG,
-		    "replay or out-of-window packet: %"PRIu64"\n",
+		    "%s: peer %s: replay or out-of-window packet: %"PRIu64"\n",
+		    if_name(&wg->wg_if), wgp->wgp_name,
 		    le64toh(wgmd->wgmd_counter));
 		m_freem(n);
 		goto out;
@@ -2677,8 +2685,21 @@ wg_handle_msg_data(struct wg_softc *wg, 
 	if (ok) {
 		wg->wg_ops->input(&wg->wg_if, n, af);
 	} else {
+		char addrstr[INET6_ADDRSTRLEN];
+		memset(addrstr, 0, sizeof(addrstr));
+		if (af == AF_INET) {
+			const struct ip *ip = (const struct ip *)decrypted_buf;
+			IN_PRINT(addrstr, &ip->ip_src);
+#ifdef INET6
+		} else if (af == AF_INET6) {
+			const struct ip6_hdr *ip6 =
+			    (const struct ip6_hdr *)decrypted_buf;
+			IN6_PRINT(addrstr, &ip6->ip6_src);
+#endif
+		}
 		WG_LOG_RATECHECK(&wgp->wgp_ppsratecheck, LOG_DEBUG,
-		    "invalid source address\n");
+		    "%s: peer %s: invalid source address (%s)\n",
+		    if_name(&wg->wg_if), wgp->wgp_name, addrstr);
 		m_freem(n);
 		/*
 		 * The inner address is invalid however the session is valid
@@ -2766,7 +2787,8 @@ wg_handle_msg_cookie(struct wg_softc *wg
 	    wgmc->wgmc_salt);
 	if (error != 0) {
 		WG_LOG_RATECHECK(&wgp->wgp_ppsratecheck, LOG_DEBUG,
-		    "wg_algo_aead_dec for cookie failed: error=%d\n", error);
+		    "%s: peer %s: wg_algo_aead_dec for cookie failed: "
+		    "error=%d\n", if_name(&wg->wg_if), wgp->wgp_name, error);
 		goto out;
 	}
 	/*
@@ -2816,7 +2838,8 @@ wg_validate_msg_header(struct wg_softc *
 		break;
 	default:
 		WG_LOG_RATECHECK(&wg->wg_ppsratecheck, LOG_DEBUG,
-		    "Unexpected msg type: %u\n", le32toh(wgm.wgm_type));
+		    "%s: Unexpected msg type: %u\n", if_name(&wg->wg_if),
+		    le32toh(wgm.wgm_type));
 		goto error;
 	}
 
@@ -2929,7 +2952,8 @@ wg_task_send_init_message(struct wg_soft
 	KASSERT(mutex_owned(wgp->wgp_lock));
 
 	if (!atomic_load_acquire(&wgp->wgp_endpoint_available)) {
-		WGLOG(LOG_DEBUG, "No endpoint available\n");
+		WGLOG(LOG_DEBUG, "%s: No endpoint available\n",
+		    if_name(&wg->wg_if));
 		/* XXX should do something? */
 		return;
 	}
@@ -3018,7 +3042,8 @@ wg_task_establish_session(struct wg_soft
 		const uint32_t h = curcpu()->ci_index; // pktq_rps_hash(m)
 		M_SETCTX(m, wgp);
 		if (__predict_false(!pktq_enqueue(wg_pktq, m, h))) {
-			WGLOG(LOG_ERR, "pktq full, dropping\n");
+			WGLOG(LOG_ERR, "%s: pktq full, dropping\n",
+			    if_name(&wg->wg_if));
 			m_freem(m);
 		}
 		kpreempt_enable();
@@ -3432,7 +3457,8 @@ wg_destroy_peer(struct wg_peer *wgp)
 			char addrstr[128];
 			sockaddr_format(&wga->wga_sa_addr, addrstr,
 			    sizeof(addrstr));
-			WGLOG(LOG_WARNING, "Couldn't delete %s", addrstr);
+			WGLOG(LOG_WARNING, "%s: Couldn't delete %s",
+			    if_name(&wg->wg_if), addrstr);
 		}
 	}
 	rw_exit(wg->wg_rwlock);
@@ -3818,7 +3844,9 @@ wg_output(struct ifnet *ifp, struct mbuf
 	/* TODO make the nest limit configurable via sysctl */
 	error = if_tunnel_check_nesting(ifp, m, 1);
 	if (error) {
-		WGLOG(LOG_ERR, "tunneling loop detected and packet dropped\n");
+		WGLOG(LOG_ERR,
+		    "%s: tunneling loop detected and packet dropped\n",
+		    if_name(&wg->wg_if));
 		goto out0;
 	}
 
@@ -3885,7 +3913,8 @@ wg_output(struct ifnet *ifp, struct mbuf
 	const uint32_t h = curcpu()->ci_index;	// pktq_rps_hash(m)
 	M_SETCTX(m, wgp);
 	if (__predict_false(!pktq_enqueue(wg_pktq, m, h))) {
-		WGLOG(LOG_ERR, "pktq full, dropping\n");
+		WGLOG(LOG_ERR, "%s: pktq full, dropping\n",
+		    if_name(&wg->wg_if));
 		error = ENOBUFS;
 		goto out3;
 	}
@@ -4788,7 +4817,8 @@ wg_start(struct ifnet *ifp)
 		kpreempt_disable();
 		const uint32_t h = curcpu()->ci_index;	// pktq_rps_hash(m)
 		if (__predict_false(!pktq_enqueue(wg_pktq, m, h))) {
-			WGLOG(LOG_ERR, "pktq full, dropping\n");
+			WGLOG(LOG_ERR, "%s: pktq full, dropping\n",
+			    if_name(ifp));
 			m_freem(m);
 		}
 		kpreempt_enable();

Reply via email to