summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDamien Miller <djm@mindrot.org>2008-07-11 17:36:48 +1000
committerDamien Miller <djm@mindrot.org>2008-07-11 17:36:48 +1000
commitb61f3fc31ff6eb1693431e21fb1086c33eb66549 (patch)
tree53538eed568ff248b0f76ab019db53a0a7525368
parentdda5fffb847cd98164cb4020e3287a9960c37aaa (diff)
- markus@cvs.openbsd.org 2008/07/10 18:08:11
[clientloop.c monitor.c monitor_wrap.c packet.c packet.h sshd.c] sync v1 and v2 traffic accounting; add it to sshd, too; ok djm@, dtucker@
-rw-r--r--ChangeLog6
-rw-r--r--clientloop.c24
-rw-r--r--monitor.c10
-rw-r--r--monitor_wrap.c10
-rw-r--r--packet.c29
-rw-r--r--packet.h6
-rw-r--r--sshd.c11
7 files changed, 58 insertions, 38 deletions
diff --git a/ChangeLog b/ChangeLog
index 40b939018..b3263e909 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -12,6 +12,10 @@
12 - markus@cvs.openbsd.org 2008/07/10 18:05:58 12 - markus@cvs.openbsd.org 2008/07/10 18:05:58
13 [channels.c] 13 [channels.c]
14 missing bzero; from mickey; ok djm@ 14 missing bzero; from mickey; ok djm@
15 - markus@cvs.openbsd.org 2008/07/10 18:08:11
16 [clientloop.c monitor.c monitor_wrap.c packet.c packet.h sshd.c]
17 sync v1 and v2 traffic accounting; add it to sshd, too;
18 ok djm@, dtucker@
15 19
1620080709 2020080709
17 - (djm) [Makefile.in] Print "all tests passed" when all regress tests pass 21 - (djm) [Makefile.in] Print "all tests passed" when all regress tests pass
@@ -4618,4 +4622,4 @@
4618 OpenServer 6 and add osr5bigcrypt support so when someone migrates 4622 OpenServer 6 and add osr5bigcrypt support so when someone migrates
4619 passwords between UnixWare and OpenServer they will still work. OK dtucker@ 4623 passwords between UnixWare and OpenServer they will still work. OK dtucker@
4620 4624
4621$Id: ChangeLog,v 1.5072 2008/07/11 07:35:37 djm Exp $ 4625$Id: ChangeLog,v 1.5073 2008/07/11 07:36:48 djm Exp $
diff --git a/clientloop.c b/clientloop.c
index ba2f0b79e..5a8727eb9 100644
--- a/clientloop.c
+++ b/clientloop.c
@@ -1,4 +1,4 @@
1/* $OpenBSD: clientloop.c,v 1.199 2008/06/12 21:06:25 djm Exp $ */ 1/* $OpenBSD: clientloop.c,v 1.200 2008/07/10 18:08:11 markus Exp $ */
2/* 2/*
3 * Author: Tatu Ylonen <ylo@cs.hut.fi> 3 * Author: Tatu Ylonen <ylo@cs.hut.fi>
4 * Copyright (c) 1995 Tatu Ylonen <ylo@cs.hut.fi>, Espoo, Finland 4 * Copyright (c) 1995 Tatu Ylonen <ylo@cs.hut.fi>, Espoo, Finland
@@ -152,7 +152,6 @@ static int stdin_eof; /* EOF has been encountered on stderr. */
152static Buffer stdin_buffer; /* Buffer for stdin data. */ 152static Buffer stdin_buffer; /* Buffer for stdin data. */
153static Buffer stdout_buffer; /* Buffer for stdout data. */ 153static Buffer stdout_buffer; /* Buffer for stdout data. */
154static Buffer stderr_buffer; /* Buffer for stderr data. */ 154static Buffer stderr_buffer; /* Buffer for stderr data. */
155static u_long stdin_bytes, stdout_bytes, stderr_bytes;
156static u_int buffer_high;/* Soft max buffer size. */ 155static u_int buffer_high;/* Soft max buffer size. */
157static int connection_in; /* Connection to server (input). */ 156static int connection_in; /* Connection to server (input). */
158static int connection_out; /* Connection to server (output). */ 157static int connection_out; /* Connection to server (output). */
@@ -437,7 +436,6 @@ client_make_packets_from_stdin_data(void)
437 packet_put_string(buffer_ptr(&stdin_buffer), len); 436 packet_put_string(buffer_ptr(&stdin_buffer), len);
438 packet_send(); 437 packet_send();
439 buffer_consume(&stdin_buffer, len); 438 buffer_consume(&stdin_buffer, len);
440 stdin_bytes += len;
441 /* If we have a pending EOF, send it now. */ 439 /* If we have a pending EOF, send it now. */
442 if (stdin_eof && buffer_len(&stdin_buffer) == 0) { 440 if (stdin_eof && buffer_len(&stdin_buffer) == 0) {
443 packet_start(SSH_CMSG_EOF); 441 packet_start(SSH_CMSG_EOF);
@@ -1205,7 +1203,6 @@ client_process_output(fd_set *writeset)
1205 } 1203 }
1206 /* Consume printed data from the buffer. */ 1204 /* Consume printed data from the buffer. */
1207 buffer_consume(&stdout_buffer, len); 1205 buffer_consume(&stdout_buffer, len);
1208 stdout_bytes += len;
1209 } 1206 }
1210 /* Write buffered output to stderr. */ 1207 /* Write buffered output to stderr. */
1211 if (FD_ISSET(fileno(stderr), writeset)) { 1208 if (FD_ISSET(fileno(stderr), writeset)) {
@@ -1227,7 +1224,6 @@ client_process_output(fd_set *writeset)
1227 } 1224 }
1228 /* Consume printed characters from the buffer. */ 1225 /* Consume printed characters from the buffer. */
1229 buffer_consume(&stderr_buffer, len); 1226 buffer_consume(&stderr_buffer, len);
1230 stderr_bytes += len;
1231 } 1227 }
1232} 1228}
1233 1229
@@ -1302,6 +1298,7 @@ client_loop(int have_pty, int escape_char_arg, int ssh2_chan_id)
1302 fd_set *readset = NULL, *writeset = NULL; 1298 fd_set *readset = NULL, *writeset = NULL;
1303 double start_time, total_time; 1299 double start_time, total_time;
1304 int max_fd = 0, max_fd2 = 0, len, rekeying = 0; 1300 int max_fd = 0, max_fd2 = 0, len, rekeying = 0;
1301 u_int64_t ibytes, obytes;
1305 u_int nalloc = 0; 1302 u_int nalloc = 0;
1306 char buf[100]; 1303 char buf[100];
1307 1304
@@ -1333,9 +1330,6 @@ client_loop(int have_pty, int escape_char_arg, int ssh2_chan_id)
1333 max_fd = MAX(max_fd, fileno(stdout)); 1330 max_fd = MAX(max_fd, fileno(stdout));
1334 max_fd = MAX(max_fd, fileno(stderr)); 1331 max_fd = MAX(max_fd, fileno(stderr));
1335 } 1332 }
1336 stdin_bytes = 0;
1337 stdout_bytes = 0;
1338 stderr_bytes = 0;
1339 quit_pending = 0; 1333 quit_pending = 0;
1340 escape_char1 = escape_char_arg; 1334 escape_char1 = escape_char_arg;
1341 1335
@@ -1521,7 +1515,6 @@ client_loop(int have_pty, int escape_char_arg, int ssh2_chan_id)
1521 break; 1515 break;
1522 } 1516 }
1523 buffer_consume(&stdout_buffer, len); 1517 buffer_consume(&stdout_buffer, len);
1524 stdout_bytes += len;
1525 } 1518 }
1526 1519
1527 /* Output any buffered data for stderr. */ 1520 /* Output any buffered data for stderr. */
@@ -1533,7 +1526,6 @@ client_loop(int have_pty, int escape_char_arg, int ssh2_chan_id)
1533 break; 1526 break;
1534 } 1527 }
1535 buffer_consume(&stderr_buffer, len); 1528 buffer_consume(&stderr_buffer, len);
1536 stderr_bytes += len;
1537 } 1529 }
1538 1530
1539 /* Clear and free any buffers. */ 1531 /* Clear and free any buffers. */
@@ -1544,13 +1536,13 @@ client_loop(int have_pty, int escape_char_arg, int ssh2_chan_id)
1544 1536
1545 /* Report bytes transferred, and transfer rates. */ 1537 /* Report bytes transferred, and transfer rates. */
1546 total_time = get_current_time() - start_time; 1538 total_time = get_current_time() - start_time;
1547 debug("Transferred: stdin %lu, stdout %lu, stderr %lu bytes in %.1f " 1539 packet_get_state(MODE_IN, NULL, NULL, NULL, &ibytes);
1548 "seconds", stdin_bytes, stdout_bytes, stderr_bytes, total_time); 1540 packet_get_state(MODE_OUT, NULL, NULL, NULL, &obytes);
1541 verbose("Transferred: sent %llu, received %llu bytes, in %.1f seconds",
1542 obytes, ibytes, total_time);
1549 if (total_time > 0) 1543 if (total_time > 0)
1550 debug("Bytes per second: stdin %.1f, stdout %.1f, stderr %.1f", 1544 verbose("Bytes per second: sent %.1f, received %.1f",
1551 stdin_bytes / total_time, stdout_bytes / total_time, 1545 obytes / total_time, ibytes / total_time);
1552 stderr_bytes / total_time);
1553
1554 /* Return the exit status of the program. */ 1546 /* Return the exit status of the program. */
1555 debug("Exit status %d", exit_status); 1547 debug("Exit status %d", exit_status);
1556 return exit_status; 1548 return exit_status;
diff --git a/monitor.c b/monitor.c
index b7074cfb4..73cf6bc9b 100644
--- a/monitor.c
+++ b/monitor.c
@@ -1,4 +1,4 @@
1/* $OpenBSD: monitor.c,v 1.98 2008/07/04 03:47:02 dtucker Exp $ */ 1/* $OpenBSD: monitor.c,v 1.99 2008/07/10 18:08:11 markus Exp $ */
2/* 2/*
3 * Copyright 2002 Niels Provos <provos@citi.umich.edu> 3 * Copyright 2002 Niels Provos <provos@citi.umich.edu>
4 * Copyright 2002 Markus Friedl <markus@openbsd.org> 4 * Copyright 2002 Markus Friedl <markus@openbsd.org>
@@ -1705,7 +1705,7 @@ mm_get_keystate(struct monitor *pmonitor)
1705 u_char *blob, *p; 1705 u_char *blob, *p;
1706 u_int bloblen, plen; 1706 u_int bloblen, plen;
1707 u_int32_t seqnr, packets; 1707 u_int32_t seqnr, packets;
1708 u_int64_t blocks; 1708 u_int64_t blocks, bytes;
1709 1709
1710 debug3("%s: Waiting for new keys", __func__); 1710 debug3("%s: Waiting for new keys", __func__);
1711 1711
@@ -1738,11 +1738,13 @@ mm_get_keystate(struct monitor *pmonitor)
1738 seqnr = buffer_get_int(&m); 1738 seqnr = buffer_get_int(&m);
1739 blocks = buffer_get_int64(&m); 1739 blocks = buffer_get_int64(&m);
1740 packets = buffer_get_int(&m); 1740 packets = buffer_get_int(&m);
1741 packet_set_state(MODE_OUT, seqnr, blocks, packets); 1741 bytes = buffer_get_int64(&m);
1742 packet_set_state(MODE_OUT, seqnr, blocks, packets, bytes);
1742 seqnr = buffer_get_int(&m); 1743 seqnr = buffer_get_int(&m);
1743 blocks = buffer_get_int64(&m); 1744 blocks = buffer_get_int64(&m);
1744 packets = buffer_get_int(&m); 1745 packets = buffer_get_int(&m);
1745 packet_set_state(MODE_IN, seqnr, blocks, packets); 1746 bytes = buffer_get_int64(&m);
1747 packet_set_state(MODE_IN, seqnr, blocks, packets, bytes);
1746 1748
1747 skip: 1749 skip:
1748 /* Get the key context */ 1750 /* Get the key context */
diff --git a/monitor_wrap.c b/monitor_wrap.c
index e65fb1279..40463d078 100644
--- a/monitor_wrap.c
+++ b/monitor_wrap.c
@@ -1,4 +1,4 @@
1/* $OpenBSD: monitor_wrap.c,v 1.62 2008/05/08 12:21:16 djm Exp $ */ 1/* $OpenBSD: monitor_wrap.c,v 1.63 2008/07/10 18:08:11 markus Exp $ */
2/* 2/*
3 * Copyright 2002 Niels Provos <provos@citi.umich.edu> 3 * Copyright 2002 Niels Provos <provos@citi.umich.edu>
4 * Copyright 2002 Markus Friedl <markus@openbsd.org> 4 * Copyright 2002 Markus Friedl <markus@openbsd.org>
@@ -573,7 +573,7 @@ mm_send_keystate(struct monitor *monitor)
573 u_char *blob, *p; 573 u_char *blob, *p;
574 u_int bloblen, plen; 574 u_int bloblen, plen;
575 u_int32_t seqnr, packets; 575 u_int32_t seqnr, packets;
576 u_int64_t blocks; 576 u_int64_t blocks, bytes;
577 577
578 buffer_init(&m); 578 buffer_init(&m);
579 579
@@ -622,14 +622,16 @@ mm_send_keystate(struct monitor *monitor)
622 buffer_put_string(&m, blob, bloblen); 622 buffer_put_string(&m, blob, bloblen);
623 xfree(blob); 623 xfree(blob);
624 624
625 packet_get_state(MODE_OUT, &seqnr, &blocks, &packets); 625 packet_get_state(MODE_OUT, &seqnr, &blocks, &packets, &bytes);
626 buffer_put_int(&m, seqnr); 626 buffer_put_int(&m, seqnr);
627 buffer_put_int64(&m, blocks); 627 buffer_put_int64(&m, blocks);
628 buffer_put_int(&m, packets); 628 buffer_put_int(&m, packets);
629 packet_get_state(MODE_IN, &seqnr, &blocks, &packets); 629 buffer_put_int64(&m, bytes);
630 packet_get_state(MODE_IN, &seqnr, &blocks, &packets, &bytes);
630 buffer_put_int(&m, seqnr); 631 buffer_put_int(&m, seqnr);
631 buffer_put_int64(&m, blocks); 632 buffer_put_int64(&m, blocks);
632 buffer_put_int(&m, packets); 633 buffer_put_int(&m, packets);
634 buffer_put_int64(&m, bytes);
633 635
634 debug3("%s: New keys have been sent", __func__); 636 debug3("%s: New keys have been sent", __func__);
635 skip: 637 skip:
diff --git a/packet.c b/packet.c
index 1dda4a294..8abd43eb4 100644
--- a/packet.c
+++ b/packet.c
@@ -1,4 +1,4 @@
1/* $OpenBSD: packet.c,v 1.156 2008/07/04 23:08:25 djm Exp $ */ 1/* $OpenBSD: packet.c,v 1.157 2008/07/10 18:08:11 markus Exp $ */
2/* 2/*
3 * Author: Tatu Ylonen <ylo@cs.hut.fi> 3 * Author: Tatu Ylonen <ylo@cs.hut.fi>
4 * Copyright (c) 1995 Tatu Ylonen <ylo@cs.hut.fi>, Espoo, Finland 4 * Copyright (c) 1995 Tatu Ylonen <ylo@cs.hut.fi>, Espoo, Finland
@@ -147,6 +147,7 @@ static struct packet_state {
147 u_int32_t seqnr; 147 u_int32_t seqnr;
148 u_int32_t packets; 148 u_int32_t packets;
149 u_int64_t blocks; 149 u_int64_t blocks;
150 u_int64_t bytes;
150} p_read, p_send; 151} p_read, p_send;
151 152
152static u_int64_t max_blocks_in, max_blocks_out; 153static u_int64_t max_blocks_in, max_blocks_out;
@@ -191,6 +192,7 @@ packet_set_connection(int fd_in, int fd_out)
191 buffer_init(&outgoing_packet); 192 buffer_init(&outgoing_packet);
192 buffer_init(&incoming_packet); 193 buffer_init(&incoming_packet);
193 TAILQ_INIT(&outgoing); 194 TAILQ_INIT(&outgoing);
195 p_send.packets = p_read.packets = 0;
194 } 196 }
195} 197}
196 198
@@ -311,18 +313,25 @@ packet_get_ssh1_cipher(void)
311} 313}
312 314
313void 315void
314packet_get_state(int mode, u_int32_t *seqnr, u_int64_t *blocks, u_int32_t *packets) 316packet_get_state(int mode, u_int32_t *seqnr, u_int64_t *blocks, u_int32_t *packets,
317 u_int64_t *bytes)
315{ 318{
316 struct packet_state *state; 319 struct packet_state *state;
317 320
318 state = (mode == MODE_IN) ? &p_read : &p_send; 321 state = (mode == MODE_IN) ? &p_read : &p_send;
319 *seqnr = state->seqnr; 322 if (seqnr)
320 *blocks = state->blocks; 323 *seqnr = state->seqnr;
321 *packets = state->packets; 324 if (blocks)
325 *blocks = state->blocks;
326 if (packets)
327 *packets = state->packets;
328 if (bytes)
329 *bytes = state->bytes;
322} 330}
323 331
324void 332void
325packet_set_state(int mode, u_int32_t seqnr, u_int64_t blocks, u_int32_t packets) 333packet_set_state(int mode, u_int32_t seqnr, u_int64_t blocks, u_int32_t packets,
334 u_int64_t bytes)
326{ 335{
327 struct packet_state *state; 336 struct packet_state *state;
328 337
@@ -330,6 +339,7 @@ packet_set_state(int mode, u_int32_t seqnr, u_int64_t blocks, u_int32_t packets)
330 state->seqnr = seqnr; 339 state->seqnr = seqnr;
331 state->blocks = blocks; 340 state->blocks = blocks;
332 state->packets = packets; 341 state->packets = packets;
342 state->bytes = bytes;
333} 343}
334 344
335/* returns 1 if connection is via ipv4 */ 345/* returns 1 if connection is via ipv4 */
@@ -608,7 +618,8 @@ packet_send1(void)
608 fprintf(stderr, "encrypted: "); 618 fprintf(stderr, "encrypted: ");
609 buffer_dump(&output); 619 buffer_dump(&output);
610#endif 620#endif
611 621 p_send.packets++;
622 p_send.bytes += len + buffer_len(&outgoing_packet);
612 buffer_clear(&outgoing_packet); 623 buffer_clear(&outgoing_packet);
613 624
614 /* 625 /*
@@ -834,6 +845,7 @@ packet_send2_wrapped(void)
834 if (!(datafellows & SSH_BUG_NOREKEY)) 845 if (!(datafellows & SSH_BUG_NOREKEY))
835 fatal("XXX too many packets with same key"); 846 fatal("XXX too many packets with same key");
836 p_send.blocks += (packet_length + 4) / block_size; 847 p_send.blocks += (packet_length + 4) / block_size;
848 p_send.bytes += packet_length + 4;
837 buffer_clear(&outgoing_packet); 849 buffer_clear(&outgoing_packet);
838 850
839 if (type == SSH2_MSG_NEWKEYS) 851 if (type == SSH2_MSG_NEWKEYS)
@@ -1096,6 +1108,8 @@ packet_read_poll1(void)
1096 buffer_append(&incoming_packet, buffer_ptr(&compression_buffer), 1108 buffer_append(&incoming_packet, buffer_ptr(&compression_buffer),
1097 buffer_len(&compression_buffer)); 1109 buffer_len(&compression_buffer));
1098 } 1110 }
1111 p_read.packets++;
1112 p_read.bytes += padded_len + 4;
1099 type = buffer_get_char(&incoming_packet); 1113 type = buffer_get_char(&incoming_packet);
1100 if (type < SSH_MSG_MIN || type > SSH_MSG_MAX) 1114 if (type < SSH_MSG_MIN || type > SSH_MSG_MAX)
1101 packet_disconnect("Invalid ssh1 packet type: %d", type); 1115 packet_disconnect("Invalid ssh1 packet type: %d", type);
@@ -1184,6 +1198,7 @@ packet_read_poll2(u_int32_t *seqnr_p)
1184 if (!(datafellows & SSH_BUG_NOREKEY)) 1198 if (!(datafellows & SSH_BUG_NOREKEY))
1185 fatal("XXX too many packets with same key"); 1199 fatal("XXX too many packets with same key");
1186 p_read.blocks += (packet_length + 4) / block_size; 1200 p_read.blocks += (packet_length + 4) / block_size;
1201 p_read.bytes += packet_length + 4;
1187 1202
1188 /* get padlen */ 1203 /* get padlen */
1189 cp = buffer_ptr(&incoming_packet); 1204 cp = buffer_ptr(&incoming_packet);
diff --git a/packet.h b/packet.h
index fd4e1ac7a..03bb87c9b 100644
--- a/packet.h
+++ b/packet.h
@@ -1,4 +1,4 @@
1/* $OpenBSD: packet.h,v 1.48 2008/06/12 20:38:28 dtucker Exp $ */ 1/* $OpenBSD: packet.h,v 1.49 2008/07/10 18:08:11 markus Exp $ */
2 2
3/* 3/*
4 * Author: Tatu Ylonen <ylo@cs.hut.fi> 4 * Author: Tatu Ylonen <ylo@cs.hut.fi>
@@ -68,8 +68,8 @@ int packet_get_keyiv_len(int);
68void packet_get_keyiv(int, u_char *, u_int); 68void packet_get_keyiv(int, u_char *, u_int);
69int packet_get_keycontext(int, u_char *); 69int packet_get_keycontext(int, u_char *);
70void packet_set_keycontext(int, u_char *); 70void packet_set_keycontext(int, u_char *);
71void packet_get_state(int, u_int32_t *, u_int64_t *, u_int32_t *); 71void packet_get_state(int, u_int32_t *, u_int64_t *, u_int32_t *, u_int64_t *);
72void packet_set_state(int, u_int32_t, u_int64_t, u_int32_t); 72void packet_set_state(int, u_int32_t, u_int64_t, u_int32_t, u_int64_t);
73int packet_get_ssh1_cipher(void); 73int packet_get_ssh1_cipher(void);
74void packet_set_iv(int, u_char *); 74void packet_set_iv(int, u_char *);
75 75
diff --git a/sshd.c b/sshd.c
index a6620a05a..6e5bb5476 100644
--- a/sshd.c
+++ b/sshd.c
@@ -1,4 +1,4 @@
1/* $OpenBSD: sshd.c,v 1.363 2008/07/01 07:24:22 dtucker Exp $ */ 1/* $OpenBSD: sshd.c,v 1.364 2008/07/10 18:08:11 markus Exp $ */
2/* 2/*
3 * Author: Tatu Ylonen <ylo@cs.hut.fi> 3 * Author: Tatu Ylonen <ylo@cs.hut.fi>
4 * Copyright (c) 1995 Tatu Ylonen <ylo@cs.hut.fi>, Espoo, Finland 4 * Copyright (c) 1995 Tatu Ylonen <ylo@cs.hut.fi>, Espoo, Finland
@@ -677,7 +677,7 @@ privsep_postauth(Authctxt *authctxt)
677 if (pmonitor->m_pid == -1) 677 if (pmonitor->m_pid == -1)
678 fatal("fork of unprivileged child failed"); 678 fatal("fork of unprivileged child failed");
679 else if (pmonitor->m_pid != 0) { 679 else if (pmonitor->m_pid != 0) {
680 debug2("User child is on pid %ld", (long)pmonitor->m_pid); 680 verbose("User child is on pid %ld", (long)pmonitor->m_pid);
681 close(pmonitor->m_recvfd); 681 close(pmonitor->m_recvfd);
682 buffer_clear(&loginmsg); 682 buffer_clear(&loginmsg);
683 monitor_child_postauth(pmonitor); 683 monitor_child_postauth(pmonitor);
@@ -1248,6 +1248,7 @@ main(int ac, char **av)
1248 int remote_port; 1248 int remote_port;
1249 char *line, *p, *cp; 1249 char *line, *p, *cp;
1250 int config_s[2] = { -1 , -1 }; 1250 int config_s[2] = { -1 , -1 };
1251 u_int64_t ibytes, obytes;
1251 mode_t new_umask; 1252 mode_t new_umask;
1252 Key *key; 1253 Key *key;
1253 Authctxt *authctxt; 1254 Authctxt *authctxt;
@@ -1919,7 +1920,11 @@ main(int ac, char **av)
1919 do_authenticated(authctxt); 1920 do_authenticated(authctxt);
1920 1921
1921 /* The connection has been terminated. */ 1922 /* The connection has been terminated. */
1922 verbose("Closing connection to %.100s", remote_ip); 1923 packet_get_state(MODE_IN, NULL, NULL, NULL, &ibytes);
1924 packet_get_state(MODE_OUT, NULL, NULL, NULL, &obytes);
1925 verbose("Transferred: sent %llu, received %llu bytes", obytes, ibytes);
1926
1927 verbose("Closing connection to %.500s port %d", remote_ip, remote_port);
1923 1928
1924#ifdef USE_PAM 1929#ifdef USE_PAM
1925 if (options.use_pam) 1930 if (options.use_pam)