mirror of
				https://github.com/tailscale/tailscale.git
				synced 2025-10-31 08:11:32 +01:00 
			
		
		
		
	Updates tailscale/corp#18960 iOS uses Apple's NetworkMonitor to track the default interface and there's no reason we shouldn't also use this on macOS, for the same reasons noted in the comments for why this change was made on iOS. This eliminates the need to load and parse the routing table when querying the defaultRouter() in almost all cases. A slight modification here (on both platforms) to fallback to the default BSD logic in the unhappy-path rather than making assumptions that may not hold. If netmon is eventually parsing AF_ROUTE and able to give a consistently correct answer for the default interface index, we can fall back to that and eliminate the Swift dependency. Signed-off-by: Jonathan Nobels <jonathan@tailscale.com>
		
			
				
	
	
		
			27 lines
		
	
	
		
			587 B
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			27 lines
		
	
	
		
			587 B
		
	
	
	
		
			Go
		
	
	
	
	
	
| // Copyright (c) Tailscale Inc & AUTHORS
 | |
| // SPDX-License-Identifier: BSD-3-Clause
 | |
| 
 | |
| // Common code for FreeBSD. This might also work on other
 | |
| // BSD systems (e.g. OpenBSD) but has not been tested.
 | |
| // Not used on iOS or macOS. See defaultroute_darwin.go.
 | |
| 
 | |
| //go:build freebsd
 | |
| 
 | |
| package netmon
 | |
| 
 | |
| import "net"
 | |
| 
 | |
| func defaultRoute() (d DefaultRouteDetails, err error) {
 | |
| 	idx, err := DefaultRouteInterfaceIndex()
 | |
| 	if err != nil {
 | |
| 		return d, err
 | |
| 	}
 | |
| 	iface, err := net.InterfaceByIndex(idx)
 | |
| 	if err != nil {
 | |
| 		return d, err
 | |
| 	}
 | |
| 	d.InterfaceName = iface.Name
 | |
| 	d.InterfaceIndex = idx
 | |
| 	return d, nil
 | |
| }
 |