summaryrefslogtreecommitdiffstats
path: root/sys/netinet/tcp_timer.c
diff options
context:
space:
mode:
authorjlemon <jlemon@FreeBSD.org>1999-08-31 03:40:24 +0000
committerjlemon <jlemon@FreeBSD.org>1999-08-31 03:40:24 +0000
commit1e9a5919052f1a29570547c2b4ec121240f6e3c3 (patch)
treee94991ee38068d133d06032a1f2e25f5ba0b7e87 /sys/netinet/tcp_timer.c
parent500a42f2216d533357601daa0df7e84b50234db5 (diff)
downloadFreeBSD-src-1e9a5919052f1a29570547c2b4ec121240f6e3c3.zip
FreeBSD-src-1e9a5919052f1a29570547c2b4ec121240f6e3c3.tar.gz
Add a SYSCTL_PROC so that TCP timer values are now expressed to
the user in ms, while they are stored internally as ticks. Note that there probably are rounding bogons here, especially on the alpha.
Diffstat (limited to 'sys/netinet/tcp_timer.c')
-rw-r--r--sys/netinet/tcp_timer.c45
1 files changed, 35 insertions, 10 deletions
diff --git a/sys/netinet/tcp_timer.c b/sys/netinet/tcp_timer.c
index a4f3aad..74752b8 100644
--- a/sys/netinet/tcp_timer.c
+++ b/sys/netinet/tcp_timer.c
@@ -63,25 +63,50 @@
#include <netinet/tcp_debug.h>
#endif
+static int
+sysctl_msec_to_ticks SYSCTL_HANDLER_ARGS
+{
+ int error, s, tt;
+
+ tt = *(int *)oidp->oid_arg1;
+ s = tt * 1000 / hz;
+
+ error = SYSCTL_OUT(req, &s, sizeof(int));
+ if (error || !req->newptr)
+ return (error);
+
+ error = SYSCTL_IN(req, &s, sizeof(int));
+ if (error)
+ return (error);
+
+ tt = s * hz / 1000;
+ if (tt == 0 && s > 0)
+ tt++;
+
+ *(int *)oidp->oid_arg1 = tt;
+ return (0);
+}
+
int tcp_keepinit;
-SYSCTL_INT(_net_inet_tcp, TCPCTL_KEEPINIT, keepinit,
- CTLFLAG_RW, &tcp_keepinit , 0, "");
+SYSCTL_PROC(_net_inet_tcp, TCPCTL_KEEPINIT, keepinit, CTLTYPE_INT|CTLFLAG_RW,
+ &tcp_keepinit, 0, sysctl_msec_to_ticks, "I", "");
int tcp_keepidle;
-SYSCTL_INT(_net_inet_tcp, TCPCTL_KEEPIDLE, keepidle,
- CTLFLAG_RW, &tcp_keepidle , 0, "");
+SYSCTL_PROC(_net_inet_tcp, TCPCTL_KEEPIDLE, keepidle, CTLTYPE_INT|CTLFLAG_RW,
+ &tcp_keepidle, 0, sysctl_msec_to_ticks, "I", "");
int tcp_keepintvl;
-SYSCTL_INT(_net_inet_tcp, TCPCTL_KEEPINTVL, keepintvl,
- CTLFLAG_RW, &tcp_keepintvl , 0, "");
+SYSCTL_PROC(_net_inet_tcp, TCPCTL_KEEPINTVL, keepintvl, CTLTYPE_INT|CTLFLAG_RW,
+ &tcp_keepintvl, 0, sysctl_msec_to_ticks, "I", "");
int tcp_delacktime;
-SYSCTL_INT(_net_inet_tcp, TCPCTL_DELACKTIME, delacktime, CTLFLAG_RW,
- &tcp_delacktime, 0, "Time before a delayed ACK is sent");
+SYSCTL_PROC(_net_inet_tcp, TCPCTL_DELACKTIME, delacktime,
+ CTLTYPE_INT|CTLFLAG_RW, &tcp_delacktime, 0, sysctl_msec_to_ticks, "I",
+ "Time before a delayed ACK is sent");
int tcp_msl;
-SYSCTL_INT(_net_inet_tcp, OID_AUTO, msl, CTLFLAG_RW,
- &tcp_msl, 0, "Maximum segment lifetime");
+SYSCTL_PROC(_net_inet_tcp, OID_AUTO, msl, CTLTYPE_INT|CTLFLAG_RW,
+ &tcp_msl, 0, sysctl_msec_to_ticks, "I", "Maximum segment lifetime");
static int always_keepalive = 0;
SYSCTL_INT(_net_inet_tcp, OID_AUTO, always_keepalive, CTLFLAG_RW,
OpenPOWER on IntegriCloud