aboutsummaryrefslogtreecommitdiff
path: root/sys
diff options
context:
space:
mode:
authorMichael Tuexen <tuexen@FreeBSD.org>2024-12-31 16:29:04 +0000
committerMichael Tuexen <tuexen@FreeBSD.org>2025-02-05 20:13:25 +0000
commit1d39f58d735c64e5878f4bfb1ec53397bd5008c8 (patch)
treea6792f8e1971cad02596a452ca9a964ba7aa685c /sys
parent92d87203c00e5b47f5505702b2a86fae3c1cf063 (diff)
TCP BBR: fix getsockopt() for TCP_BBR_USEDEL_RATE
Actually implement the IPPROTO_TCP-level socket option TCP_BBR_USEDEL_RATE. Reviewed by: rrs CID: 1523813 CID: 1523814 Sponsored by: Netflix, Inc. Differential Revision: https://reviews.freebsd.org/D48261 (cherry picked from commit b47dcb4b1ff16e6af2e07798f6fe06580b4eddf0)
Diffstat (limited to 'sys')
-rw-r--r--sys/netinet/tcp_stacks/bbr.c8
1 files changed, 6 insertions, 2 deletions
diff --git a/sys/netinet/tcp_stacks/bbr.c b/sys/netinet/tcp_stacks/bbr.c
index 7faeadabf203..1a67bbbdd08f 100644
--- a/sys/netinet/tcp_stacks/bbr.c
+++ b/sys/netinet/tcp_stacks/bbr.c
@@ -14643,6 +14643,7 @@ static int
bbr_get_sockopt(struct socket *so, struct sockopt *sopt,
struct inpcb *inp, struct tcpcb *tp, struct tcp_bbr *bbr)
{
+ uint64_t loptval;
int32_t error, optval;
/*
@@ -14698,7 +14699,7 @@ bbr_get_sockopt(struct socket *so, struct sockopt *sopt,
optval = bbr->rc_loss_exit;
break;
case TCP_BBR_USEDEL_RATE:
- error = EINVAL;
+ loptval = get_filter_value(&bbr->r_ctl.rc_delrate);
break;
case TCP_BBR_MIN_RTO:
optval = bbr->r_ctl.rc_min_rto_ms;
@@ -14782,7 +14783,10 @@ bbr_get_sockopt(struct socket *so, struct sockopt *sopt,
break;
}
INP_WUNLOCK(inp);
- error = sooptcopyout(sopt, &optval, sizeof optval);
+ if (sopt->sopt_name == TCP_BBR_USEDEL_RATE)
+ error = sooptcopyout(sopt, &loptval, sizeof loptval);
+ else
+ error = sooptcopyout(sopt, &optval, sizeof optval);
return (error);
}