wgengine/monitor: on unsupported platforms, use a polling implementation

Not great, but lets people working on new ports get going more quickly
without having to do everything up front.

As the link monitor is getting used more, I felt bad having a useless
implementation.

Updates #815
Updates #1427

Signed-off-by: Brad Fitzpatrick <bradfitz@tailscale.com>
This commit is contained in:
Brad Fitzpatrick
2021-03-02 21:45:40 -08:00
parent 8a55d463c8
commit 7461dded88
7 changed files with 86 additions and 20 deletions

View File

@@ -8,6 +8,7 @@
package monitor
import (
"errors"
"sync"
"time"
@@ -63,14 +64,9 @@ type Mon struct {
// Use RegisterChangeCallback to get notified of network changes.
func New(logf logger.Logf) (*Mon, error) {
logf = logger.WithPrefix(logf, "monitor: ")
om, err := newOSMon(logf)
if err != nil {
return nil, err
}
m := &Mon{
logf: logf,
cbs: map[*callbackHandle]ChangeFunc{},
om: om,
change: make(chan struct{}, 1),
stop: make(chan struct{}),
}
@@ -79,6 +75,15 @@ func New(logf logger.Logf) (*Mon, error) {
return nil, err
}
m.ifState = st
m.om, err = newOSMon(logf, m)
if err != nil {
return nil, err
}
if m.om == nil {
return nil, errors.New("newOSMon returned nil, nil")
}
return m, nil
}