syntax = "proto3"; package v2ray.core.app.router.command; option csharp_namespace = "V2Ray.Core.App.Router.Command"; option go_package = "github.com/v2fly/v2ray-core/v4/app/router/command"; option java_package = "com.v2ray.core.app.router.command"; option java_multiple_files = true; import "common/net/network.proto"; // RoutingContext is the context with information relative to routing process. // It conforms to the structure of v2ray.core.features.routing.Context and // v2ray.core.features.routing.Route. message RoutingContext { string InboundTag = 1; v2ray.core.common.net.Network Network = 2; repeated bytes SourceIPs = 3; repeated bytes TargetIPs = 4; uint32 SourcePort = 5; uint32 TargetPort = 6; string TargetDomain = 7; string Protocol = 8; string User = 9; map Attributes = 10; repeated string OutboundGroupTags = 11; string OutboundTag = 12; } // SubscribeRoutingStatsRequest subscribes to routing statistics channel if // opened by v2ray-core. // * FieldSelectors selects a subset of fields in routing statistics to return. // Valid selectors: // - inbound: Selects connection's inbound tag. // - network: Selects connection's network. // - ip: Equivalent as "ip_source" and "ip_target", selects both source and // target IP. // - port: Equivalent as "port_source" and "port_target", selects both source // and target port. // - domain: Selects target domain. // - protocol: Select connection's protocol. // - user: Select connection's inbound user email. // - attributes: Select connection's additional attributes. // - outbound: Equivalent as "outbound" and "outbound_group", select both // outbound tag and outbound group tags. // * If FieldSelectors is left empty, all fields will be returned. message SubscribeRoutingStatsRequest { repeated string FieldSelectors = 1; } // TestRouteRequest manually tests a routing result according to the routing // context message. // * RoutingContext is the routing message without outbound information. // * FieldSelectors selects the fields to return in the routing result. All // fields are returned if left empty. // * PublishResult broadcasts the routing result to routing statistics channel // if set true. message TestRouteRequest { RoutingContext RoutingContext = 1; repeated string FieldSelectors = 2; bool PublishResult = 3; } message GetBalancersRequest { repeated string balancerTags = 1; } message OutboundMsg { string tag = 1; repeated string values = 2; } message OverrideSelectingMsg { string until = 1; repeated string selects = 2; } message BalancerMsg { string tag = 1; repeated string strategySettings = 2; repeated string titles = 4; OverrideSelectingMsg override = 5; repeated OutboundMsg selects = 6; repeated OutboundMsg others = 7; } message GetBalancersResponse { repeated BalancerMsg balancers = 1; } message CheckBalancersRequest { repeated string balancerTags = 1; } message CheckBalancersResponse {} message OverrideSelectingRequest { string balancerTag = 1; repeated string selectors = 2; int64 validity = 3; } message OverrideSelectingResponse {} service RoutingService { rpc SubscribeRoutingStats(SubscribeRoutingStatsRequest) returns (stream RoutingContext) {} rpc TestRoute(TestRouteRequest) returns (RoutingContext) {} rpc GetBalancers(GetBalancersRequest) returns (GetBalancersResponse) {} rpc CheckBalancers(CheckBalancersRequest) returns (CheckBalancersResponse) {} rpc OverrideSelecting(OverrideSelectingRequest) returns (OverrideSelectingResponse) {} } message Config {}