mirror of
https://github.com/daeuniverse/dae.git
synced 2025-07-20 04:38:40 +07:00
feat: allow group override global node connectivity check (#623)
Co-authored-by: mzz2017 <2017@duck.com>
This commit is contained in:
@ -33,7 +33,6 @@ import (
|
||||
"github.com/daeuniverse/dae/config"
|
||||
"github.com/daeuniverse/dae/pkg/config_parser"
|
||||
internal "github.com/daeuniverse/dae/pkg/ebpf_internal"
|
||||
D "github.com/daeuniverse/outbound/dialer"
|
||||
"github.com/daeuniverse/outbound/pool"
|
||||
"github.com/daeuniverse/outbound/protocol/direct"
|
||||
"github.com/daeuniverse/outbound/transport/grpc"
|
||||
@ -256,18 +255,7 @@ func NewControlPlane(
|
||||
if global.AllowInsecure {
|
||||
log.Warnln("AllowInsecure is enabled, but it is not recommended. Please make sure you have to turn it on.")
|
||||
}
|
||||
option := &dialer.GlobalOption{
|
||||
ExtraOption: D.ExtraOption{
|
||||
AllowInsecure: global.AllowInsecure,
|
||||
TlsImplementation: global.TlsImplementation,
|
||||
UtlsImitate: global.UtlsImitate},
|
||||
Log: log,
|
||||
TcpCheckOptionRaw: dialer.TcpCheckOptionRaw{Raw: global.TcpCheckUrl, Log: log, ResolverNetwork: common.MagicNetwork("udp", global.SoMarkFromDae, global.Mptcp), Method: global.TcpCheckHttpMethod},
|
||||
CheckDnsOptionRaw: dialer.CheckDnsOptionRaw{Raw: global.UdpCheckDns, ResolverNetwork: common.MagicNetwork("udp", global.SoMarkFromDae, global.Mptcp), Somark: global.SoMarkFromDae},
|
||||
CheckInterval: global.CheckInterval,
|
||||
CheckTolerance: global.CheckTolerance,
|
||||
CheckDnsTcp: true,
|
||||
}
|
||||
option := dialer.NewGlobalOption(global, log)
|
||||
|
||||
// Dial mode.
|
||||
dialMode, err := consts.ParseDialMode(global.DialMode)
|
||||
@ -323,8 +311,22 @@ func NewControlPlane(
|
||||
if len(dialers) == 0 {
|
||||
log.Infoln("\t<Empty>")
|
||||
}
|
||||
groupOption, err := ParseGroupOverrideOption(group, *global, log)
|
||||
finalOption := option
|
||||
if err == nil && groupOption != nil {
|
||||
newDialers := make([]*dialer.Dialer, 0)
|
||||
for _, d := range dialers {
|
||||
newDialer := d.Clone()
|
||||
deferFuncs = append(deferFuncs, newDialer.Close)
|
||||
newDialer.GlobalOption = groupOption
|
||||
newDialers = append(newDialers, newDialer)
|
||||
}
|
||||
log.Infof(`Group "%v"'s check option has been override.`, group.Name)
|
||||
dialers = newDialers
|
||||
finalOption = groupOption
|
||||
}
|
||||
// Create dialer group and append it to outbounds.
|
||||
dialerGroup := outbound.NewDialerGroup(option, group.Name, dialers, annos, *policy,
|
||||
dialerGroup := outbound.NewDialerGroup(finalOption, group.Name, dialers, annos, *policy,
|
||||
core.outboundAliveChangeCallback(uint8(len(outbounds)), disableKernelAliveCallback))
|
||||
outbounds = append(outbounds, dialerGroup)
|
||||
}
|
||||
@ -515,6 +517,36 @@ func ParseFixedDomainTtl(ks []config.KeyableString) (map[string]int, error) {
|
||||
return m, nil
|
||||
}
|
||||
|
||||
func ParseGroupOverrideOption(group config.Group, global config.Global, log *logrus.Logger) (*dialer.GlobalOption, error) {
|
||||
result := global
|
||||
changed := false
|
||||
if group.TcpCheckUrl != nil {
|
||||
result.TcpCheckUrl = group.TcpCheckUrl
|
||||
changed = true
|
||||
}
|
||||
if group.TcpCheckHttpMethod != "" {
|
||||
result.TcpCheckHttpMethod = group.TcpCheckHttpMethod
|
||||
changed = true
|
||||
}
|
||||
if group.UdpCheckDns != nil {
|
||||
result.UdpCheckDns = group.UdpCheckDns
|
||||
changed = true
|
||||
}
|
||||
if group.CheckInterval != 0 {
|
||||
result.CheckInterval = group.CheckInterval
|
||||
changed = true
|
||||
}
|
||||
if group.CheckTolerance != 0 {
|
||||
result.CheckTolerance = group.CheckTolerance
|
||||
changed = true
|
||||
}
|
||||
if changed {
|
||||
option := dialer.NewGlobalOption(&result, log)
|
||||
return option, nil
|
||||
}
|
||||
return nil, nil
|
||||
}
|
||||
|
||||
// EjectBpf will resect bpf from destroying life-cycle of control plane.
|
||||
func (c *ControlPlane) EjectBpf() *bpfObjects {
|
||||
return c.core.EjectBpf()
|
||||
|
Reference in New Issue
Block a user