mirror of
https://github.com/rwinkhart/sys.git
synced 2026-09-03 07:37:34 -04:00
linux: add tcp_cc_info and its related types
Add the ability to retrieve congestion control information from a socket via TCP_CC_INFO. Fixes golang/go#68232 Change-Id: I2ea15928ec0e3192b670759bab4b659e62be553b GitHub-Last-Rev: b8b8c44f1f047fe6c60fae8adc695f2633dadd7c GitHub-Pull-Request: golang/sys#200 Reviewed-on: https://go-review.googlesource.com/c/sys/+/595676 LUCI-TryBot-Result: Go LUCI <golang-scoped@luci-project-accounts.iam.gserviceaccount.com> Reviewed-by: Carlos Amedee <carlos@golang.org> Reviewed-by: Ian Lance Taylor <iant@google.com> Auto-Submit: Ian Lance Taylor <iant@google.com>
This commit is contained in:
committed by
Gopher Robot
parent
d58f986c89
commit
48aad76ed3
@@ -112,6 +112,7 @@ struct termios2 {
|
|||||||
#include <linux/if_pppox.h>
|
#include <linux/if_pppox.h>
|
||||||
#include <linux/if_tun.h>
|
#include <linux/if_tun.h>
|
||||||
#include <linux/if_xdp.h>
|
#include <linux/if_xdp.h>
|
||||||
|
#include <linux/inet_diag.h>
|
||||||
#include <linux/ipc.h>
|
#include <linux/ipc.h>
|
||||||
#include <linux/kcm.h>
|
#include <linux/kcm.h>
|
||||||
#include <linux/keyctl.h>
|
#include <linux/keyctl.h>
|
||||||
@@ -757,6 +758,12 @@ type Ucred C.struct_ucred
|
|||||||
|
|
||||||
type TCPInfo C.struct_tcp_info
|
type TCPInfo C.struct_tcp_info
|
||||||
|
|
||||||
|
type TCPVegasInfo C.struct_tcpvegas_info
|
||||||
|
|
||||||
|
type TCPDCTCPInfo C.struct_tcp_dctcp_info
|
||||||
|
|
||||||
|
type TCPBBRInfo C.struct_tcp_bbr_info
|
||||||
|
|
||||||
type CanFilter C.struct_can_filter
|
type CanFilter C.struct_can_filter
|
||||||
|
|
||||||
type ifreq C.struct_ifreq
|
type ifreq C.struct_ifreq
|
||||||
@@ -798,6 +805,7 @@ const (
|
|||||||
SizeofICMPv6Filter = C.sizeof_struct_icmp6_filter
|
SizeofICMPv6Filter = C.sizeof_struct_icmp6_filter
|
||||||
SizeofUcred = C.sizeof_struct_ucred
|
SizeofUcred = C.sizeof_struct_ucred
|
||||||
SizeofTCPInfo = C.sizeof_struct_tcp_info
|
SizeofTCPInfo = C.sizeof_struct_tcp_info
|
||||||
|
SizeofTCPCCInfo = C.sizeof_union_tcp_cc_info
|
||||||
SizeofCanFilter = C.sizeof_struct_can_filter
|
SizeofCanFilter = C.sizeof_struct_can_filter
|
||||||
SizeofTCPRepairOpt = C.sizeof_struct_tcp_repair_opt
|
SizeofTCPRepairOpt = C.sizeof_struct_tcp_repair_opt
|
||||||
)
|
)
|
||||||
|
|||||||
@@ -1295,6 +1295,48 @@ func GetsockoptTCPInfo(fd, level, opt int) (*TCPInfo, error) {
|
|||||||
return &value, err
|
return &value, err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// GetsockoptTCPCCVegasInfo returns algorithm specific congestion control information for a socket using the "vegas"
|
||||||
|
// algorithm.
|
||||||
|
//
|
||||||
|
// The socket's congestion control algorighm can be retrieved via [GetsockoptString] with the [TCP_CONGESTION] option:
|
||||||
|
//
|
||||||
|
// algo, err := unix.GetsockoptString(fd, unix.IPPROTO_TCP, unix.TCP_CONGESTION)
|
||||||
|
func GetsockoptTCPCCVegasInfo(fd, level, opt int) (*TCPVegasInfo, error) {
|
||||||
|
var value [SizeofTCPCCInfo / 4]uint32 // ensure proper alignment
|
||||||
|
vallen := _Socklen(SizeofTCPCCInfo)
|
||||||
|
err := getsockopt(fd, level, opt, unsafe.Pointer(&value[0]), &vallen)
|
||||||
|
out := (*TCPVegasInfo)(unsafe.Pointer(&value[0]))
|
||||||
|
return out, err
|
||||||
|
}
|
||||||
|
|
||||||
|
// GetsockoptTCPCCDCTCPInfo returns algorithm specific congestion control information for a socket using the "dctp"
|
||||||
|
// algorithm.
|
||||||
|
//
|
||||||
|
// The socket's congestion control algorighm can be retrieved via [GetsockoptString] with the [TCP_CONGESTION] option:
|
||||||
|
//
|
||||||
|
// algo, err := unix.GetsockoptString(fd, unix.IPPROTO_TCP, unix.TCP_CONGESTION)
|
||||||
|
func GetsockoptTCPCCDCTCPInfo(fd, level, opt int) (*TCPDCTCPInfo, error) {
|
||||||
|
var value [SizeofTCPCCInfo / 4]uint32 // ensure proper alignment
|
||||||
|
vallen := _Socklen(SizeofTCPCCInfo)
|
||||||
|
err := getsockopt(fd, level, opt, unsafe.Pointer(&value[0]), &vallen)
|
||||||
|
out := (*TCPDCTCPInfo)(unsafe.Pointer(&value[0]))
|
||||||
|
return out, err
|
||||||
|
}
|
||||||
|
|
||||||
|
// GetsockoptTCPCCBBRInfo returns algorithm specific congestion control information for a socket using the "bbr"
|
||||||
|
// algorithm.
|
||||||
|
//
|
||||||
|
// The socket's congestion control algorighm can be retrieved via [GetsockoptString] with the [TCP_CONGESTION] option:
|
||||||
|
//
|
||||||
|
// algo, err := unix.GetsockoptString(fd, unix.IPPROTO_TCP, unix.TCP_CONGESTION)
|
||||||
|
func GetsockoptTCPCCBBRInfo(fd, level, opt int) (*TCPBBRInfo, error) {
|
||||||
|
var value [SizeofTCPCCInfo / 4]uint32 // ensure proper alignment
|
||||||
|
vallen := _Socklen(SizeofTCPCCInfo)
|
||||||
|
err := getsockopt(fd, level, opt, unsafe.Pointer(&value[0]), &vallen)
|
||||||
|
out := (*TCPBBRInfo)(unsafe.Pointer(&value[0]))
|
||||||
|
return out, err
|
||||||
|
}
|
||||||
|
|
||||||
// GetsockoptString returns the string value of the socket option opt for the
|
// GetsockoptString returns the string value of the socket option opt for the
|
||||||
// socket associated with fd at the given socket level.
|
// socket associated with fd at the given socket level.
|
||||||
func GetsockoptString(fd, level, opt int) (string, error) {
|
func GetsockoptString(fd, level, opt int) (string, error) {
|
||||||
|
|||||||
@@ -516,6 +516,29 @@ type TCPInfo struct {
|
|||||||
Total_rto_time uint32
|
Total_rto_time uint32
|
||||||
}
|
}
|
||||||
|
|
||||||
|
type TCPVegasInfo struct {
|
||||||
|
Enabled uint32
|
||||||
|
Rttcnt uint32
|
||||||
|
Rtt uint32
|
||||||
|
Minrtt uint32
|
||||||
|
}
|
||||||
|
|
||||||
|
type TCPDCTCPInfo struct {
|
||||||
|
Enabled uint16
|
||||||
|
Ce_state uint16
|
||||||
|
Alpha uint32
|
||||||
|
Ab_ecn uint32
|
||||||
|
Ab_tot uint32
|
||||||
|
}
|
||||||
|
|
||||||
|
type TCPBBRInfo struct {
|
||||||
|
Bw_lo uint32
|
||||||
|
Bw_hi uint32
|
||||||
|
Min_rtt uint32
|
||||||
|
Pacing_gain uint32
|
||||||
|
Cwnd_gain uint32
|
||||||
|
}
|
||||||
|
|
||||||
type CanFilter struct {
|
type CanFilter struct {
|
||||||
Id uint32
|
Id uint32
|
||||||
Mask uint32
|
Mask uint32
|
||||||
@@ -557,6 +580,7 @@ const (
|
|||||||
SizeofICMPv6Filter = 0x20
|
SizeofICMPv6Filter = 0x20
|
||||||
SizeofUcred = 0xc
|
SizeofUcred = 0xc
|
||||||
SizeofTCPInfo = 0xf8
|
SizeofTCPInfo = 0xf8
|
||||||
|
SizeofTCPCCInfo = 0x14
|
||||||
SizeofCanFilter = 0x8
|
SizeofCanFilter = 0x8
|
||||||
SizeofTCPRepairOpt = 0x8
|
SizeofTCPRepairOpt = 0x8
|
||||||
)
|
)
|
||||||
|
|||||||
Reference in New Issue
Block a user