Add brutal infra

This commit is contained in:
Fangliding
2025-12-11 12:13:14 +08:00
parent 6a909b2507
commit 65da3d9c9d
5 changed files with 72 additions and 6 deletions
+53
View File
@@ -0,0 +1,53 @@
//go:build linux
package brutal
import (
"os"
"unsafe"
"github.com/xtls/xray-core/common/net"
"golang.org/x/sys/unix"
)
//go:linkname setsockopt syscall.setsockopt
func setsockopt(s int, level int, name int, val unsafe.Pointer, vallen uintptr) (err error)
const (
TCP_BRUTAL_PARAMS = 23301
)
type TCPBrutalParams struct {
Rate uint64
CwndGain uint32
}
func setBrutalFD(fd uintptr, sendBPS uint64) error {
err := unix.SetsockoptString(int(fd), unix.IPPROTO_TCP, unix.TCP_CONGESTION, "brutal")
if err != nil {
return err
}
params := TCPBrutalParams{
Rate: sendBPS,
CwndGain: 20, // hysteria2 default
}
err = setsockopt(int(fd), unix.IPPROTO_TCP, TCP_BRUTAL_PARAMS, unsafe.Pointer(&params), unsafe.Sizeof(params))
if err != nil {
return os.NewSyscallError("setsockopt IPPROTO_TCP TCP_BRUTAL_PARAMS", err)
}
return nil
}
func SetBrutal(conn *net.TCPConn, sendBPS uint64) error {
syscallConn, err := conn.SyscallConn()
if err != nil {
return err
}
syscallConn.Control(func(fd uintptr) {
err = setBrutalFD(fd, sendBPS)
})
if err != nil {
return err
}
return nil
}
@@ -0,0 +1,12 @@
//go:build !linux
package brutal
import (
"github.com/xtls/xray-core/common/errors"
"github.com/xtls/xray-core/common/net"
)
func SetBrutal(conn *net.TCPConn, sendBPS uint64) error {
return errors.New("brutal not available on this platform")
}