MCPcopy
hub / github.com/tailscale/tailscale / tryEngine

Function tryEngine

cmd/tailscaled/tailscaled.go:749–842  ·  view source on GitHub ↗
(logf logger.Logf, sys *tsd.System, name string)

Source from the content-addressed store, hash-verified

747var tstunNew = tstun.New
748
749func tryEngine(logf logger.Logf, sys *tsd.System, name string) (onlyNetstack bool, err error) {
750 conf := wgengine.Config{
751 ListenPort: args.port,
752 NetMon: sys.NetMon.Get(),
753 HealthTracker: sys.HealthTracker.Get(),
754 ExtraRootCAs: sys.ExtraRootCAs,
755 Metrics: sys.UserMetricsRegistry(),
756 Dialer: sys.Dialer.Get(),
757 SetSubsystem: sys.Set,
758 ControlKnobs: sys.ControlKnobs(),
759 EventBus: sys.Bus.Get(),
760 }
761 if f, ok := hookSetWgEnginConfigDrive.GetOk(); ok {
762 f(&conf, logf)
763 }
764
765 sys.HealthTracker.Get().SetMetricsRegistry(sys.UserMetricsRegistry())
766
767 onlyNetstack = name == "userspace-networking"
768 netstackSubnetRouter := onlyNetstack // but mutated later on some platforms
769 netns.SetEnabled(!onlyNetstack)
770
771 if args.birdSocketPath != "" && createBIRDClient != nil {
772 log.Printf("Connecting to BIRD at %s ...", args.birdSocketPath)
773 conf.BIRDClient, err = createBIRDClient(args.birdSocketPath)
774 if err != nil {
775 return false, fmt.Errorf("createBIRDClient: %w", err)
776 }
777 }
778 if onlyNetstack {
779 if runtime.GOOS == "linux" && distro.Get() == distro.Synology {
780 // On Synology in netstack mode, still init a DNS
781 // manager (directManager) to avoid the health check
782 // warnings in 'tailscale status' about DNS base
783 // configuration being unavailable (from the noop
784 // manager). More in Issue 4017.
785 // TODO(bradfitz): add a Synology-specific DNS manager.
786 conf.DNS, err = dns.NewOSConfigurator(logf, sys.HealthTracker.Get(), sys.Bus.Get(), sys.PolicyClientOrDefault(), sys.ControlKnobs(), "") // empty interface name
787 if err != nil {
788 return false, fmt.Errorf("dns.NewOSConfigurator: %w", err)
789 }
790 }
791 } else {
792 dev, devName, err := tstunNew(logf, name)
793 if err != nil {
794 tstun.Diagnose(logf, name, err)
795 return false, fmt.Errorf("tstun.New(%q): %w", name, err)
796 }
797 conf.Tun = dev
798 if strings.HasPrefix(name, "tap:") {
799 conf.IsTAP = true
800 e, err := wgengine.NewUserspaceEngine(logf, conf)
801 if err != nil {
802 return false, err
803 }
804 sys.Set(e)
805 return false, err
806 }

Callers 1

createEngineFunction · 0.85

Calls 15

SetEnabledFunction · 0.92
GetFunction · 0.92
NewOSConfiguratorFunction · 0.92
DiagnoseFunction · 0.92
NewUserspaceEngineFunction · 0.92
NewFunction · 0.92
handleSubnetsInNetstackFunction · 0.85
PrintfMethod · 0.80
PolicyClientOrDefaultMethod · 0.80
GetMethod · 0.65
ErrorfMethod · 0.65

Tested by

no test coverage detected

Used in the wild real call sites across dependent graphs

searching dependent graphs…