[openssh-commits] [openssh] 01/02: upstream: Add compression stats to ~I connection info escape
git+noreply at mindrot.org
git+noreply at mindrot.org
Sat Nov 29 19:01:29 AEDT 2025
This is an automated email from the git hooks/post-receive script.
dtucker pushed a commit to branch master
in repository openssh.
commit 2e8b5de4a79fb393482465531be1e347b81699f3
Author: dtucker at openbsd.org <dtucker at openbsd.org>
AuthorDate: Sat Nov 29 05:00:50 2025 +0000
upstream: Add compression stats to ~I connection info escape
option.
OpenBSD-Commit-ID: 83424b71fc226ea6b3dc8dda39f993475fdbd775
---
packet.c | 50 ++++++++++++++++++++++++++++++++++++++++++++++----
1 file changed, 46 insertions(+), 4 deletions(-)
diff --git a/packet.c b/packet.c
index 361c4f2fe..d0d2560dd 100644
--- a/packet.c
+++ b/packet.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: packet.c,v 1.324 2025/11/27 02:18:48 dtucker Exp $ */
+/* $OpenBSD: packet.c,v 1.325 2025/11/29 05:00:50 dtucker Exp $ */
/*
* Author: Tatu Ylonen <ylo at cs.hut.fi>
* Copyright (c) 1995 Tatu Ylonen <ylo at cs.hut.fi>, Espoo, Finland
@@ -2935,11 +2935,49 @@ dedupe_alg_names(const char *in, const char *out)
return names;
}
+static char *
+comp_status_message(struct ssh *ssh)
+{
+#ifdef WITH_ZLIB
+ char *ret = NULL;
+ struct session_state *state = ssh->state;
+ unsigned long long iraw = 0, icmp = 0, oraw = 0, ocmp = 0;
+ char iraw_f[FMT_SCALED_STRSIZE] = "", oraw_f[FMT_SCALED_STRSIZE] = "";
+ char icmp_f[FMT_SCALED_STRSIZE] = "", ocmp_f[FMT_SCALED_STRSIZE] = "";
+
+ if (state->compression_buffer) {
+ if (state->compression_in_started) {
+ iraw = state->compression_in_stream.total_out;
+ icmp = state->compression_in_stream.total_in;
+ if (fmt_scaled(iraw, iraw_f) != 0)
+ strlcpy(iraw_f, "OVERFLOW", sizeof(iraw_f));
+ if (fmt_scaled(icmp, icmp_f) != 0)
+ strlcpy(icmp_f, "OVERFLOW", sizeof(icmp_f));
+ }
+ if (state->compression_out_started) {
+ oraw = state->compression_out_stream.total_in;
+ ocmp = state->compression_out_stream.total_out;
+ if (fmt_scaled(oraw, oraw_f) != 0)
+ strlcpy(oraw_f, "OVERFLOW", sizeof(oraw_f));
+ if (fmt_scaled(ocmp, ocmp_f) != 0)
+ strlcpy(ocmp_f, "OVERFLOW", sizeof(ocmp_f));
+ }
+ xasprintf(&ret,
+ " compressed %s/%s (*%.3f) in,"
+ " %s/%s (*%.3f) out\r\n",
+ icmp_f, iraw_f, iraw == 0 ? 0.0 : (double)icmp / iraw,
+ ocmp_f, oraw_f, oraw == 0 ? 0.0 : (double)ocmp / oraw);
+ return ret;
+ }
+#endif /* WITH_ZLIB */
+ return xstrdup("");
+}
+
char *
connection_info_message(struct ssh *ssh)
{
char *ret = NULL, *cipher = NULL, *mac = NULL, *comp = NULL;
- char *rekey_volume = NULL, *rekey_time = NULL;
+ char *rekey_volume = NULL, *rekey_time = NULL, *comp_info = NULL;
struct kex *kex;
struct session_state *state;
struct newkeys *nk_in, *nk_out;
@@ -2986,17 +3024,20 @@ connection_info_message(struct ssh *ssh)
xasprintf(&rekey_time, "interval %s, next %s",
fmt_timeframe(state->rekey_interval), rekey_next);
}
+ comp_info = comp_status_message(ssh);
xasprintf(&ret, "Connection information for peer %s port %d:\r\n"
" kexalgorithm %s\r\n hostkeyalgorithm %s\r\n"
" cipher %s\r\n mac %s\r\n compression %s\r\n"
" rekey %s %s\r\n"
- " traffic %s in, %s out\r\n",
+ " traffic %s in, %s out\r\n"
+ "%s",
ssh_remote_ipaddr(ssh), ssh_remote_port(ssh),
kex->name, kex->hostkey_alg,
cipher, mac, comp,
rekey_volume, rekey_time,
- stats_in, stats_out
+ stats_in, stats_out,
+ comp_info
);
free(cipher);
free(mac);
@@ -3005,6 +3046,7 @@ connection_info_message(struct ssh *ssh)
free(stats_out);
free(rekey_volume);
free(rekey_time);
+ free(comp_info);
return ret;
}
--
To stop receiving notification emails like this one, please contact
djm at mindrot.org.
More information about the openssh-commits
mailing list