net/interfaces: include DefaultRouteInterface in interfaces.State

And log it in wgengine on change. Changing bug in #643.

Updates #643
This commit is contained in:
Brad Fitzpatrick 2020-08-12 12:48:34 -07:00
parent 75225368a4
commit b97aac1718
3 changed files with 26 additions and 1 deletions

View File

@ -163,6 +163,10 @@ type State struct {
// considered "expensive", which currently means LTE/etc // considered "expensive", which currently means LTE/etc
// instead of Wifi. This field is not populated by GetState. // instead of Wifi. This field is not populated by GetState.
IsExpensive bool IsExpensive bool
// DefaultRouteInterface is the interface name for the machine's default route.
// It is not yet populated on all OSes.
DefaultRouteInterface string
} }
func (s *State) Equal(s2 *State) bool { func (s *State) Equal(s2 *State) bool {
@ -198,6 +202,7 @@ func GetState() (*State, error) {
}); err != nil { }); err != nil {
return nil, err return nil, err
} }
s.DefaultRouteInterface, _ = DefaultRouteInterface()
return s, nil return s, nil
} }

View File

@ -0,0 +1,15 @@
// Copyright (c) 2020 Tailscale Inc & AUTHORS All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
// +build !linux
package interfaces
import "errors"
var errTODO = errors.New("TODO")
func DefaultRouteInterface() (string, error) {
return "TODO", errTODO
}

View File

@ -212,6 +212,7 @@ func newUserspaceEngineAdvanced(conf EngineConfig) (_ Engine, reterr error) {
} }
e.localAddrs.Store(map[packet.IP]bool{}) e.localAddrs.Store(map[packet.IP]bool{})
e.linkState, _ = getLinkState() e.linkState, _ = getLinkState()
logf("link state: %+v", e.linkState)
// Respond to all pings only in fake mode. // Respond to all pings only in fake mode.
if conf.Fake { if conf.Fake {
@ -1105,7 +1106,11 @@ func (e *userspaceEngine) LinkChange(isExpensive bool) {
cur.IsExpensive = isExpensive cur.IsExpensive = isExpensive
needRebind := e.setLinkState(cur) needRebind := e.setLinkState(cur)
e.logf("LinkChange(isExpensive=%v); needsRebind=%v", isExpensive, needRebind) if needRebind {
e.logf("LinkChange: major, rebinding. New state: %+v", cur)
} else {
e.logf("LinkChange: minor")
}
why := "link-change-minor" why := "link-change-minor"
if needRebind { if needRebind {