feat: add per-proxy-group bandwidth limiting - #3053
Open
bobbyunknown wants to merge 1 commit into
Open
Conversation
Add optional 'bandwidth' field to proxy groups for shared bidirectional
rate limiting. Traffic routed through a bandwidth-limited group is
throttled using a token-bucket limiter (bits/sec) shared across all
connections in the group.
Config syntax:
proxy-groups:
- name: SPEED-LIMITED
type: select
bandwidth: 500k # 500 Kbps (accepts: k/m/g/bps)
proxies:
- DIRECT
Implementation:
- New component/ratelimit package with Limiter, RateLimitedConn (net.Conn),
limitedCConn (C.Conn with ReadBuffer/WriteBuffer overrides to prevent
bufio.Copy/Relay bypass via sing ExtendedConn promotion), and
limitedPacketConn (UDP with WaitReadFrom zero-copy path coverage)
- GroupBase stores shared *Limiter; GroupBase.LimitConn/LimitPacketConn
wrap connections after dial in all group DialContext/ListenPacketContext
- ParseBandwidth() handles '500k', '1m', '1Mbps', bare integers (Mbps)
- Default bandwidth: 0 = unlimited (backward compatible)
- transport/jls/jls.go refactored to use shared ratelimit package,
removing duplicate rate limiter code
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Add optional 'bandwidth' field to proxy groups for shared bidirectional rate limiting. Traffic routed through a bandwidth-limited group is throttled using a token-bucket limiter (bits/sec) shared across all connections in the group.
Config syntax:
proxy-groups:
- name: SPEED-LIMITED type: select
bandwidth: 500k # 500 Kbps (accepts: k/m/g/bps)
proxies:
- DIRECT
Implementation: