mirror of
https://github.com/Gouryella/drip.git
synced 2026-03-01 07:42:32 +00:00
Added bandwidth limiting functionality, allowing users to limit the bandwidth of tunnel connections via the --bandwidth parameter. Supported formats include: 1K/1KB (kilobytes), 1M/1MB (megabytes), 1G/1GB (gigabytes) or Raw number (bytes).
35 lines
525 B
Go
35 lines
525 B
Go
package qos
|
|
|
|
import (
|
|
"golang.org/x/time/rate"
|
|
)
|
|
|
|
type Config struct {
|
|
Bandwidth int64
|
|
Burst int
|
|
}
|
|
|
|
type Limiter struct {
|
|
limiter *rate.Limiter
|
|
}
|
|
|
|
func NewLimiter(cfg Config) *Limiter {
|
|
l := &Limiter{}
|
|
if cfg.Bandwidth > 0 {
|
|
burst := cfg.Burst
|
|
if burst <= 0 {
|
|
burst = int(cfg.Bandwidth * 2)
|
|
}
|
|
l.limiter = rate.NewLimiter(rate.Limit(cfg.Bandwidth), burst)
|
|
}
|
|
return l
|
|
}
|
|
|
|
func (l *Limiter) RateLimiter() *rate.Limiter {
|
|
return l.limiter
|
|
}
|
|
|
|
func (l *Limiter) IsLimited() bool {
|
|
return l.limiter != nil
|
|
}
|