Module Name:    src
Committed By:   christos
Date:           Wed Jul 24 23:46:13 UTC 2024

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

Log Message:
Add packet dump debugging


To generate a diff of this commit:
cvs rdiff -u -r1.83 -r1.84 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.83 src/sys/net/if_wg.c:1.84
--- src/sys/net/if_wg.c:1.83	Wed Jul 24 18:32:07 2024
+++ src/sys/net/if_wg.c	Wed Jul 24 19:46:13 2024
@@ -1,4 +1,4 @@
-/*	$NetBSD: if_wg.c,v 1.83 2024/07/24 22:32:07 kre Exp $	*/
+/*	$NetBSD: if_wg.c,v 1.84 2024/07/24 23:46:13 christos 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.83 2024/07/24 22:32:07 kre Exp $");
+__KERNEL_RCSID(0, "$NetBSD: if_wg.c,v 1.84 2024/07/24 23:46:13 christos Exp $");
 
 #ifdef _KERNEL_OPT
 #include "opt_altq_enabled.h"
@@ -183,6 +183,10 @@ __KERNEL_RCSID(0, "$NetBSD: if_wg.c,v 1.
 #ifndef WG_DEBUG_DUMP
 #define WG_DEBUG_DUMP
 #endif
+/* debug packets */
+#ifndef WG_DEBUG_PACKET
+#define WG_DEBUG_PACKET
+#endif
 /* Make some internal parameters configurable for testing and debugging */
 #ifndef WG_DEBUG_PARAMS
 #define WG_DEBUG_PARAMS
@@ -201,6 +205,7 @@ int wg_debug;
 #define WG_DEBUG_FLAGS_LOG	1
 #define WG_DEBUG_FLAGS_TRACE	2
 #define WG_DEBUG_FLAGS_DUMP	4
+#define WG_DEBUG_FLAGS_PACKET	8
 #endif
 
 
@@ -236,9 +241,10 @@ static bool wg_force_underload = false;
 #ifdef WG_DEBUG_DUMP
 
 static char *
-gethexdump(const char *p, size_t n)
+gethexdump(const void *vp, size_t n)
 {
 	char *buf;
+	const uint8_t *p = vp;
 	size_t i;
 
 	if (n > SIZE_MAX/3 - 1)
@@ -2696,6 +2702,18 @@ wg_handle_msg_data(struct wg_softc *wg, 
 		goto out;
 	}
 
+#ifdef WG_DEBUG_PACKET
+	if (wg_debug & WG_DEBUG_FLAGS_PACKET) {
+		char *hex = gethexdump(wgmd, sizeof(*wgmd));
+		log(LOG_DEBUG, "wgmd=%p, sizeof(*wgmd)=%zu\n%s\n",
+		    wgmd, sizeof(*wgmd), hex);
+		puthexdump(hex, wgmd, sizeof(*wgmd));
+		hex = gethexdump(decrypted_buf, decrypted_len);
+		log(LOG_DEBUG, "decrypted_buf=%p, decrypted_len=%zu\n%s\n",
+		    decrypted_buf, decrypted_len, hex);
+		puthexdump(hex, decrypted_buf, decrypted_len);
+	}
+#endif
 	/* We're done with m now; free it and chuck the pointers.  */
 	m_freem(m);
 	m = NULL;
@@ -4070,6 +4088,18 @@ wg_send_data_msg(struct wg_peer *wgp, st
 	KASSERT(n->m_len >= sizeof(*wgmd));
 	wgmd = mtod(n, struct wg_msg_data *);
 	wg_fill_msg_data(wg, wgp, wgs, wgmd);
+#ifdef WG_DEBUG_PACKET
+	if (wg_debug & WG_DEBUG_FLAGS_PACKET) {
+		char *hex = gethexdump(wgmd, sizeof(*wgmd));
+		log(LOG_DEBUG, "wgmd=%p, sizeof(*wgmd)=%zu\n%s\n",
+		    wgmd, sizeof(*wgmd), hex);
+		puthexdump(hex, wgmd, sizeof(*wgmd));
+		hex = gethexdump(padded_buf, padded_len);
+		log(LOG_DEBUG, "padded_buf=%p, padded_len=%zu\n%s\n",
+		    padded_buf, padded_len, hex);
+		puthexdump(hex, padded_buf, padded_len);
+	}
+#endif
 	/* [W] 5.4.6: AEAD(Tm^send, Nm^send, P, e) */
 	wg_algo_aead_enc((char *)wgmd + sizeof(*wgmd), encrypted_len,
 	    wgs->wgs_tkey_send, le64toh(wgmd->wgmd_counter),
@@ -4920,7 +4950,7 @@ SYSCTL_SETUP(sysctl_net_wg_setup, "sysct
 	sysctl_createv(clog, 0, &node, NULL,
 	    CTLFLAG_PERMANENT|CTLFLAG_READWRITE,
 	    CTLTYPE_INT, "debug",
-	    SYSCTL_DESCR("set debug flags 1=debug 2=trace 4=dump"),
+	    SYSCTL_DESCR("set debug flags 1=log 2=trace 4=dump 8=packet"),
 	    NULL, 0, &wg_debug, 0, CTL_CREATE, CTL_EOL);
 }
 #endif

Reply via email to