Add route.default_mark option

This commit is contained in:
世界 2022-07-24 17:46:25 +08:00
parent 7d340e7ef9
commit fe8e984608
No known key found for this signature in database
GPG key ID: CD109927C34A63C4
5 changed files with 18 additions and 2 deletions

View file

@ -36,6 +36,7 @@ type Router interface {
AutoDetectInterface() bool AutoDetectInterface() bool
AutoDetectInterfaceName() string AutoDetectInterfaceName() string
AutoDetectInterfaceIndex() int AutoDetectInterfaceIndex() int
DefaultMark() int
Rules() []Rule Rules() []Rule
SetTrafficController(controller TrafficController) SetTrafficController(controller TrafficController)

View file

@ -49,6 +49,9 @@ func NewDefault(router adapter.Router, options option.DialerOptions) *DefaultDia
if options.RoutingMark != 0 { if options.RoutingMark != 0 {
dialer.Control = control.Append(dialer.Control, control.RoutingMark(options.RoutingMark)) dialer.Control = control.Append(dialer.Control, control.RoutingMark(options.RoutingMark))
listener.Control = control.Append(listener.Control, control.RoutingMark(options.RoutingMark)) listener.Control = control.Append(listener.Control, control.RoutingMark(options.RoutingMark))
} else if router.DefaultMark() != 0 {
dialer.Control = control.Append(dialer.Control, control.RoutingMark(router.DefaultMark()))
listener.Control = control.Append(listener.Control, control.RoutingMark(router.DefaultMark()))
} }
if options.ReuseAddr { if options.ReuseAddr {
listener.Control = control.Append(listener.Control, control.ReuseAddr()) listener.Control = control.Append(listener.Control, control.ReuseAddr())

View file

@ -1,4 +1,4 @@
//go:build !cgo || !linux || android //go:build !(cgo && linux && !android)
package process package process

View file

@ -16,12 +16,18 @@ type RouteOptions struct {
FindProcess bool `json:"find_process,omitempty"` FindProcess bool `json:"find_process,omitempty"`
AutoDetectInterface bool `json:"auto_detect_interface,omitempty"` AutoDetectInterface bool `json:"auto_detect_interface,omitempty"`
DefaultInterface string `json:"default_interface,omitempty"` DefaultInterface string `json:"default_interface,omitempty"`
DefaultMark int `json:"default_mark,omitempty"`
} }
func (o RouteOptions) Equals(other RouteOptions) bool { func (o RouteOptions) Equals(other RouteOptions) bool {
return common.ComparablePtrEquals(o.GeoIP, other.GeoIP) && return common.ComparablePtrEquals(o.GeoIP, other.GeoIP) &&
common.ComparablePtrEquals(o.Geosite, other.Geosite) && common.ComparablePtrEquals(o.Geosite, other.Geosite) &&
common.SliceEquals(o.Rules, other.Rules) common.SliceEquals(o.Rules, other.Rules) &&
o.Final == other.Final &&
o.FindProcess == other.FindProcess &&
o.AutoDetectInterface == other.AutoDetectInterface &&
o.DefaultInterface == other.DefaultInterface &&
o.DefaultMark == other.DefaultMark
} }
type GeoIPOptions struct { type GeoIPOptions struct {

View file

@ -68,6 +68,7 @@ type Router struct {
autoDetectInterface bool autoDetectInterface bool
defaultInterface string defaultInterface string
interfaceMonitor DefaultInterfaceMonitor interfaceMonitor DefaultInterfaceMonitor
defaultMark int
trafficController adapter.TrafficController trafficController adapter.TrafficController
urlTestHistoryStorage *urltest.HistoryStorage urlTestHistoryStorage *urltest.HistoryStorage
processSearcher process.Searcher processSearcher process.Searcher
@ -92,6 +93,7 @@ func NewRouter(ctx context.Context, logger log.ContextLogger, dnsLogger log.Cont
interfaceBindManager: control.NewBindManager(), interfaceBindManager: control.NewBindManager(),
autoDetectInterface: options.AutoDetectInterface, autoDetectInterface: options.AutoDetectInterface,
defaultInterface: options.DefaultInterface, defaultInterface: options.DefaultInterface,
defaultMark: options.DefaultMark,
} }
for i, ruleOptions := range options.Rules { for i, ruleOptions := range options.Rules {
routeRule, err := NewRule(router, logger, ruleOptions) routeRule, err := NewRule(router, logger, ruleOptions)
@ -637,6 +639,10 @@ func (r *Router) AutoDetectInterfaceIndex() int {
return r.interfaceMonitor.DefaultInterfaceIndex() return r.interfaceMonitor.DefaultInterfaceIndex()
} }
func (r *Router) DefaultMark() int {
return r.defaultMark
}
func (r *Router) Rules() []adapter.Rule { func (r *Router) Rules() []adapter.Rule {
return r.rules return r.rules
} }