github.com/metacubex/mihomo@v1.18.5/transport/tuic/common/congestion.go (about)

     1  package common
     2  
     3  import (
     4  	"github.com/metacubex/mihomo/transport/tuic/congestion"
     5  	congestionv2 "github.com/metacubex/mihomo/transport/tuic/congestion_v2"
     6  
     7  	"github.com/metacubex/quic-go"
     8  	c "github.com/metacubex/quic-go/congestion"
     9  )
    10  
    11  const (
    12  	DefaultStreamReceiveWindow     = 15728640 // 15 MB/s
    13  	DefaultConnectionReceiveWindow = 67108864 // 64 MB/s
    14  )
    15  
    16  func SetCongestionController(quicConn quic.Connection, cc string, cwnd int) {
    17  	if cwnd == 0 {
    18  		cwnd = 32
    19  	}
    20  	switch cc {
    21  	case "cubic":
    22  		quicConn.SetCongestionControl(
    23  			congestion.NewCubicSender(
    24  				congestion.DefaultClock{},
    25  				congestion.GetInitialPacketSize(quicConn.RemoteAddr()),
    26  				false,
    27  			),
    28  		)
    29  	case "new_reno":
    30  		quicConn.SetCongestionControl(
    31  			congestion.NewCubicSender(
    32  				congestion.DefaultClock{},
    33  				congestion.GetInitialPacketSize(quicConn.RemoteAddr()),
    34  				true,
    35  			),
    36  		)
    37  	case "bbr_meta_v1":
    38  		quicConn.SetCongestionControl(
    39  			congestion.NewBBRSender(
    40  				congestion.DefaultClock{},
    41  				congestion.GetInitialPacketSize(quicConn.RemoteAddr()),
    42  				c.ByteCount(cwnd)*congestion.InitialMaxDatagramSize,
    43  				congestion.DefaultBBRMaxCongestionWindow*congestion.InitialMaxDatagramSize,
    44  			),
    45  		)
    46  	case "bbr_meta_v2":
    47  		fallthrough
    48  	case "bbr":
    49  		quicConn.SetCongestionControl(
    50  			congestionv2.NewBbrSender(
    51  				congestionv2.DefaultClock{},
    52  				congestionv2.GetInitialPacketSize(quicConn.RemoteAddr()),
    53  				c.ByteCount(cwnd),
    54  			),
    55  		)
    56  	}
    57  }