summaryrefslogtreecommitdiffstats
path: root/usr.bin/tcpbench/tcpbench.c
diff options
context:
space:
mode:
authorbluhm <bluhm@openbsd.org>2021-02-04 18:46:25 +0000
committerbluhm <bluhm@openbsd.org>2021-02-04 18:46:25 +0000
commit6b0ee4ef79387cd2bf2d8bd813c5305182512ec4 (patch)
tree56263eab018c4a58d311a360bcee2b2d83ea0118 /usr.bin/tcpbench/tcpbench.c
parentsync (diff)
downloadwireguard-openbsd-6b0ee4ef79387cd2bf2d8bd813c5305182512ec4.tar.xz
wireguard-openbsd-6b0ee4ef79387cd2bf2d8bd813c5305182512ec4.zip
Implement the nc(1) -D socket debug option also in tcpbench(1).
This allows to analyse TCP connections. OK claudio@
Diffstat (limited to 'usr.bin/tcpbench/tcpbench.c')
-rw-r--r--usr.bin/tcpbench/tcpbench.c24
1 files changed, 20 insertions, 4 deletions
diff --git a/usr.bin/tcpbench/tcpbench.c b/usr.bin/tcpbench/tcpbench.c
index 18da6be0653..c56752ce10e 100644
--- a/usr.bin/tcpbench/tcpbench.c
+++ b/usr.bin/tcpbench/tcpbench.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: tcpbench.c,v 1.63 2020/05/04 12:13:09 sthen Exp $ */
+/* $OpenBSD: tcpbench.c,v 1.64 2021/02/04 18:46:25 bluhm Exp $ */
/*
* Copyright (c) 2008 Damien Miller <djm@mindrot.org>
@@ -65,6 +65,7 @@
/* Our tcpbench globals */
struct {
+ int Dflag; /* Socket debug */
int Sflag; /* Socket buffer size */
u_int rflag; /* Report rate (ms) */
int sflag; /* True if server */
@@ -198,10 +199,10 @@ usage(void)
{
fprintf(stderr,
"usage: tcpbench -l\n"
- " tcpbench [-46RUuv] [-B buf] [-b sourceaddr] [-k kvars] [-n connections]\n"
+ " tcpbench [-46DRUuv] [-B buf] [-b sourceaddr] [-k kvars] [-n connections]\n"
" [-p port] [-r interval] [-S space] [-T toskeyword]\n"
" [-t secs] [-V rtable] hostname\n"
- " tcpbench -s [-46Uuv] [-B buf] [-k kvars] [-p port] [-r interval]\n"
+ " tcpbench -s [-46DUuv] [-B buf] [-k kvars] [-p port] [-r interval]\n"
" [-S space] [-T toskeyword] [-V rtable] [hostname]\n");
exit(1);
}
@@ -857,6 +858,11 @@ server_init(struct addrinfo *aitop)
warn("socket");
continue;
}
+ if (ptb->Dflag) {
+ if (setsockopt(sock, SOL_SOCKET, SO_DEBUG,
+ &ptb->Dflag, sizeof(ptb->Dflag)))
+ err(1, "setsockopt SO_DEBUG");
+ }
if (ptb->Tflag != -1 && ai->ai_family == AF_INET) {
if (setsockopt(sock, IPPROTO_IP, IP_TOS,
&ptb->Tflag, sizeof(ptb->Tflag)))
@@ -970,6 +976,11 @@ client_init(struct addrinfo *aitop, int nconn, struct addrinfo *aib)
warn("socket");
continue;
}
+ if (ptb->Dflag) {
+ if (setsockopt(sock, SOL_SOCKET, SO_DEBUG,
+ &ptb->Dflag, sizeof(ptb->Dflag)))
+ err(1, "setsockopt SO_DEBUG");
+ }
if (aib != NULL) {
saddr_ntop(aib->ai_addr, aib->ai_addrlen,
tmp, sizeof(tmp));
@@ -1138,6 +1149,7 @@ main(int argc, char **argv)
setvbuf(stdout, NULL, _IOLBF, 0);
ptb = &tcpbench;
ptb->dummybuf_len = 0;
+ ptb->Dflag = 0;
ptb->Sflag = ptb->sflag = ptb->vflag = ptb->Rflag = ptb->Uflag = 0;
ptb->kvmh = NULL;
ptb->kvars = NULL;
@@ -1147,7 +1159,8 @@ main(int argc, char **argv)
aib = NULL;
secs = 0;
- while ((ch = getopt(argc, argv, "46b:B:hlk:n:p:Rr:sS:t:T:uUvV:")) != -1) {
+ while ((ch = getopt(argc, argv, "46b:B:Dhlk:n:p:Rr:sS:t:T:uUvV:"))
+ != -1) {
switch (ch) {
case '4':
family = PF_INET;
@@ -1158,6 +1171,9 @@ main(int argc, char **argv)
case 'b':
srcbind = optarg;
break;
+ case 'D':
+ ptb->Dflag = 1;
+ break;
case 'l':
list_kvars();
exit(0);