From 25618424e66de3f2718f2359153a0e9371304a5f Mon Sep 17 00:00:00 2001 From: Shtorm <108103062+shtorm-7@users.noreply.github.com> Date: Fri, 4 Sep 2026 01:30:11 +0300 Subject: [PATCH] limiter: use named routers, keep original inbound metadata --- box.go | 2 +- protocol/limiter/bandwidth/outbound.go | 7 ++----- protocol/limiter/connection/outbound.go | 7 ++----- protocol/limiter/rate/outbound.go | 7 ++----- protocol/limiter/traffic/outbound.go | 7 ++----- route/router.go | 4 ++-- 6 files changed, 11 insertions(+), 23 deletions(-) diff --git a/box.go b/box.go index 71df5131..2797f5a1 100644 --- a/box.go +++ b/box.go @@ -254,7 +254,7 @@ func New(options Options) (*Box, error) { httpClientManager := httpclient.NewManager(ctx, logFactory.NewLogger("httpclient"), options.HTTPClients, routeOptions.DefaultHTTPClient) service.MustRegister[adapter.HTTPClientManager](ctx, httpClientManager) httpClientService := adapter.LifecycleService(httpClientManager) - router := route.NewRouter(ctx, logFactory, routeOptions, dnsOptions) + router := route.NewRouter(ctx, logFactory, "router", routeOptions, dnsOptions) service.MustRegister[adapter.Router](ctx, router) err = router.Initialize(routeOptions.Rules, routeOptions.RuleSet) if err != nil { diff --git a/protocol/limiter/bandwidth/outbound.go b/protocol/limiter/bandwidth/outbound.go index efc6204c..f29b06e1 100644 --- a/protocol/limiter/bandwidth/outbound.go +++ b/protocol/limiter/bandwidth/outbound.go @@ -13,6 +13,7 @@ import ( "github.com/sagernet/sing/common/bufio" E "github.com/sagernet/sing/common/exceptions" + F "github.com/sagernet/sing/common/format" "github.com/sagernet/sing/common/logger" M "github.com/sagernet/sing/common/metadata" N "github.com/sagernet/sing/common/network" @@ -64,7 +65,7 @@ func NewOutbound(ctx context.Context, router adapter.Router, logger log.ContextL } } logFactory := service.FromContext[log.Factory](ctx) - r := route.NewRouter(ctx, logFactory, options.Route, option.DNSOptions{}) + r := route.NewRouter(ctx, logFactory, F.ToString("router/", C.TypeBandwidthLimiter, "[", tag, "]"), options.Route, option.DNSOptions{}) err = r.Initialize(options.Route.Rules, options.Route.RuleSet) if err != nil { return nil, err @@ -135,8 +136,6 @@ func (h *Outbound) NewConnectionEx(ctx context.Context, conn net.Conn, metadata N.CloseOnHandshakeFailure(conn, onClose, err) return } - metadata.Inbound = h.Tag() - metadata.InboundType = h.Type() h.router.RouteConnectionEx(ctx, wrappedConn, metadata, onClose) return } @@ -149,8 +148,6 @@ func (h *Outbound) NewPacketConnectionEx(ctx context.Context, conn N.PacketConn, N.CloseOnHandshakeFailure(conn, onClose, err) return } - metadata.Inbound = h.Tag() - metadata.InboundType = h.Type() h.router.RoutePacketConnectionEx(ctx, bufio.NewPacketConn(packetConn), metadata, onClose) return } diff --git a/protocol/limiter/connection/outbound.go b/protocol/limiter/connection/outbound.go index 212c9e0f..8cfed936 100644 --- a/protocol/limiter/connection/outbound.go +++ b/protocol/limiter/connection/outbound.go @@ -13,6 +13,7 @@ import ( "github.com/sagernet/sing-box/route" "github.com/sagernet/sing/common/bufio" E "github.com/sagernet/sing/common/exceptions" + F "github.com/sagernet/sing/common/format" "github.com/sagernet/sing/common/logger" M "github.com/sagernet/sing/common/metadata" N "github.com/sagernet/sing/common/network" @@ -64,7 +65,7 @@ func NewOutbound(ctx context.Context, router adapter.Router, logger log.ContextL } } logFactory := service.FromContext[log.Factory](ctx) - r := route.NewRouter(ctx, logFactory, options.Route, option.DNSOptions{}) + r := route.NewRouter(ctx, logFactory, F.ToString("router/", C.TypeConnectionLimiter, "[", tag, "]"), options.Route, option.DNSOptions{}) err = r.Initialize(options.Route.Rules, options.Route.RuleSet) if err != nil { return nil, err @@ -146,8 +147,6 @@ func (h *Outbound) NewConnectionEx(ctx context.Context, conn net.Conn, metadata if lockCtx != nil { go connChecker(lockCtx, conn.Close) } - metadata.Inbound = h.Tag() - metadata.InboundType = h.Type() h.router.RouteConnectionEx(ctx, conn, metadata, onClose) return } @@ -163,8 +162,6 @@ func (h *Outbound) NewPacketConnectionEx(ctx context.Context, conn N.PacketConn, if lockCtx != nil { go connChecker(lockCtx, conn.Close) } - metadata.Inbound = h.Tag() - metadata.InboundType = h.Type() h.router.RoutePacketConnectionEx(ctx, conn, metadata, onClose) return } diff --git a/protocol/limiter/rate/outbound.go b/protocol/limiter/rate/outbound.go index 35973cc1..acb30234 100644 --- a/protocol/limiter/rate/outbound.go +++ b/protocol/limiter/rate/outbound.go @@ -11,6 +11,7 @@ import ( "github.com/sagernet/sing-box/option" "github.com/sagernet/sing-box/route" E "github.com/sagernet/sing/common/exceptions" + F "github.com/sagernet/sing/common/format" "github.com/sagernet/sing/common/logger" M "github.com/sagernet/sing/common/metadata" N "github.com/sagernet/sing/common/network" @@ -62,7 +63,7 @@ func NewOutbound(ctx context.Context, router adapter.Router, logger log.ContextL } } logFactory := service.FromContext[log.Factory](ctx) - r := route.NewRouter(ctx, logFactory, options.Route, option.DNSOptions{}) + r := route.NewRouter(ctx, logFactory, F.ToString("router/", C.TypeRateLimiter, "[", tag, "]"), options.Route, option.DNSOptions{}) err = r.Initialize(options.Route.Rules, options.Route.RuleSet) if err != nil { return nil, err @@ -119,8 +120,6 @@ func (h *Outbound) NewConnectionEx(ctx context.Context, conn net.Conn, metadata N.CloseOnHandshakeFailure(conn, onClose, err) return } - metadata.Inbound = h.Tag() - metadata.InboundType = h.Type() h.router.RouteConnectionEx(ctx, conn, metadata, onClose) } @@ -130,8 +129,6 @@ func (h *Outbound) NewPacketConnectionEx(ctx context.Context, conn N.PacketConn, N.CloseOnHandshakeFailure(conn, onClose, err) return } - metadata.Inbound = h.Tag() - metadata.InboundType = h.Type() h.router.RoutePacketConnectionEx(ctx, conn, metadata, onClose) } diff --git a/protocol/limiter/traffic/outbound.go b/protocol/limiter/traffic/outbound.go index 088cc334..eef734c4 100644 --- a/protocol/limiter/traffic/outbound.go +++ b/protocol/limiter/traffic/outbound.go @@ -12,6 +12,7 @@ import ( "github.com/sagernet/sing-box/route" "github.com/sagernet/sing/common/bufio" E "github.com/sagernet/sing/common/exceptions" + F "github.com/sagernet/sing/common/format" "github.com/sagernet/sing/common/logger" M "github.com/sagernet/sing/common/metadata" N "github.com/sagernet/sing/common/network" @@ -40,7 +41,7 @@ func NewOutbound(ctx context.Context, router adapter.Router, logger log.ContextL } strategy := NewManagerTrafficStrategy() logFactory := service.FromContext[log.Factory](ctx) - r := route.NewRouter(ctx, logFactory, options.Route, option.DNSOptions{}) + r := route.NewRouter(ctx, logFactory, F.ToString("router/", C.TypeTrafficLimiter, "[", tag, "]"), options.Route, option.DNSOptions{}) err := r.Initialize(options.Route.Rules, options.Route.RuleSet) if err != nil { return nil, err @@ -112,8 +113,6 @@ func (h *Outbound) NewConnectionEx(ctx context.Context, conn net.Conn, metadata N.CloseOnHandshakeFailure(conn, onClose, err) return } - metadata.Inbound = h.Tag() - metadata.InboundType = h.Type() h.router.RouteConnectionEx(ctx, wrappedConn, metadata, onClose) } @@ -126,8 +125,6 @@ func (h *Outbound) NewPacketConnectionEx(ctx context.Context, conn N.PacketConn, N.CloseOnHandshakeFailure(conn, onClose, err) return } - metadata.Inbound = h.Tag() - metadata.InboundType = h.Type() h.router.RoutePacketConnectionEx(ctx, bufio.NewPacketConn(packetConn), metadata, onClose) } diff --git a/route/router.go b/route/router.go index caf9e066..f4233ab2 100644 --- a/route/router.go +++ b/route/router.go @@ -52,10 +52,10 @@ type Router struct { started chan struct{} } -func NewRouter(ctx context.Context, logFactory log.Factory, options option.RouteOptions, dnsOptions option.DNSOptions) *Router { +func NewRouter(ctx context.Context, logFactory log.Factory, name string, options option.RouteOptions, dnsOptions option.DNSOptions) *Router { return &Router{ ctx: ctx, - logger: logFactory.NewLogger("router"), + logger: logFactory.NewLogger(name), inbound: service.FromContext[adapter.InboundManager](ctx), outbound: service.FromContext[adapter.OutboundManager](ctx), dns: service.FromContext[adapter.DNSRouter](ctx),