Module Name:    src
Committed By:   riastradh
Date:           Fri Dec 27 15:55:19 UTC 2024

Modified Files:
        src/sys/net: if_wg.c

Log Message:
wg(4): Add debug log for which address we send handshake msgs to.

Maybe this will help to diagnose:

PR kern/58938: wg tunnel dies after a few days


To generate a diff of this commit:
cvs rdiff -u -r1.133 -r1.134 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.133 src/sys/net/if_wg.c:1.134
--- src/sys/net/if_wg.c:1.133	Thu Nov 28 15:35:27 2024
+++ src/sys/net/if_wg.c	Fri Dec 27 15:55:19 2024
@@ -1,4 +1,4 @@
-/*	$NetBSD: if_wg.c,v 1.133 2024/11/28 15:35:27 riastradh Exp $	*/
+/*	$NetBSD: if_wg.c,v 1.134 2024/12/27 15:55:19 riastradh Exp $	*/
 
 /*
  * Copyright (C) Ryota Ozaki <ozaki.ry...@gmail.com>
@@ -43,7 +43,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: if_wg.c,v 1.133 2024/11/28 15:35:27 riastradh Exp $");
+__KERNEL_RCSID(0, "$NetBSD: if_wg.c,v 1.134 2024/12/27 15:55:19 riastradh Exp $");
 
 #ifdef _KERNEL_OPT
 #include "opt_altq_enabled.h"
@@ -785,8 +785,8 @@ static void	wg_clear_states(struct wg_se
 static void	wg_get_peer(struct wg_peer *, struct psref *);
 static void	wg_put_peer(struct wg_peer *, struct psref *);
 
-static int	wg_send_so(struct wg_peer *, struct mbuf *);
-static int	wg_send_udp(struct wg_peer *, struct mbuf *);
+static int	wg_send_hs(struct wg_peer *, struct mbuf *);
+static int	wg_send_data(struct wg_peer *, struct mbuf *);
 static int	wg_output(struct ifnet *, struct mbuf *,
 			   const struct sockaddr *, const struct rtentry *);
 static void	wg_input(struct ifnet *, struct mbuf *, const int);
@@ -814,8 +814,8 @@ struct wg_ops {
 };
 
 struct wg_ops wg_ops_rumpkernel = {
-	.send_hs_msg	= wg_send_so,
-	.send_data_msg	= wg_send_udp,
+	.send_hs_msg	= wg_send_hs,
+	.send_data_msg	= wg_send_data,
 	.input		= wg_input,
 	.bind_port	= wg_bind_port,
 };
@@ -824,13 +824,14 @@ struct wg_ops wg_ops_rumpkernel = {
 static bool	wg_user_mode(struct wg_softc *);
 static int	wg_ioctl_linkstr(struct wg_softc *, struct ifdrv *);
 
-static int	wg_send_user(struct wg_peer *, struct mbuf *);
+static int	wg_send_hs_user(struct wg_peer *, struct mbuf *);
+static int	wg_send_data_user(struct wg_peer *, struct mbuf *);
 static void	wg_input_user(struct ifnet *, struct mbuf *, const int);
 static int	wg_bind_port_user(struct wg_softc *, const uint16_t);
 
 struct wg_ops wg_ops_rumpuser = {
-	.send_hs_msg	= wg_send_user,
-	.send_data_msg	= wg_send_user,
+	.send_hs_msg	= wg_send_hs_user,
+	.send_data_msg	= wg_send_data_user,
 	.input		= wg_input_user,
 	.bind_port	= wg_bind_port_user,
 };
@@ -1898,7 +1899,7 @@ wg_put_sa(struct wg_peer *wgp, struct wg
 }
 
 static int
-wg_send_so(struct wg_peer *wgp, struct mbuf *m)
+wg_send_hs(struct wg_peer *wgp, struct mbuf *m)
 {
 	int error;
 	struct socket *so;
@@ -1906,6 +1907,11 @@ wg_send_so(struct wg_peer *wgp, struct m
 	struct wg_sockaddr *wgsa;
 
 	wgsa = wg_get_endpoint_sa(wgp, &psref);
+#ifdef WG_DEBUG_LOG
+	char addr[128];
+	sockaddr_format(wgsatosa(wgsa), addr, sizeof(addr));
+	WG_DLOG("send handshake msg to %s\n", addr);
+#endif
 	so = wg_get_so_by_peer(wgp, wgsa);
 	error = sosend(so, wgsatosa(wgsa), NULL, m, NULL, 0, curlwp);
 	wg_put_sa(wgp, wgsa, &psref);
@@ -4399,7 +4405,7 @@ out0:	m_freem(m);
 }
 
 static int
-wg_send_udp(struct wg_peer *wgp, struct mbuf *m)
+wg_send_data(struct wg_peer *wgp, struct mbuf *m)
 {
 	struct psref psref;
 	struct wg_sockaddr *wgsa;
@@ -5452,7 +5458,7 @@ wg_ioctl_linkstr(struct wg_softc *wg, st
 }
 
 static int
-wg_send_user(struct wg_peer *wgp, struct mbuf *m)
+wg_send_user(struct wg_peer *wgp, struct mbuf *m, bool handshake)
 {
 	int error;
 	struct psref psref;
@@ -5462,6 +5468,14 @@ wg_send_user(struct wg_peer *wgp, struct
 
 	wgsa = wg_get_endpoint_sa(wgp, &psref);
 
+#ifdef WG_DEBUG_LOG
+	if (handshake) {
+		char addr[128];
+		sockaddr_format(wgsatosa(wgsa), addr, sizeof(addr));
+		WG_DLOG("send handshake msg to %s\n", addr);
+	}
+#endif
+
 	iov[0].iov_base = mtod(m, void *);
 	iov[0].iov_len = m->m_len;
 
@@ -5475,6 +5489,20 @@ wg_send_user(struct wg_peer *wgp, struct
 	return error;
 }
 
+static int
+wg_send_hs_user(struct wg_peer *wgp, struct mbuf *m)
+{
+
+	return wg_send_user(wgp, m, /*handshake*/true);
+}
+
+static int
+wg_send_hs_data(struct wg_peer *wgp, struct mbuf *m)
+{
+
+	return wg_send_user(wgp, m, /*handshake*/false);
+}
+
 static void
 wg_input_user(struct ifnet *ifp, struct mbuf *m, const int af)
 {

Reply via email to