wgengine: add BSD userspace router to darwin

Darwin and FreeBSD are compatible enough to share the userspace router.

The OSX router delegates to the BSD userspace router unless `SetRoutesFunc` is set.
That preserves the mechanism that allows `ipn-go-bridge` to specify its own routing behavior.

Fixes #177

Signed-off-by: Reinaldo de Souza <github@rei.nal.do>
This commit is contained in:
Reinaldo de Souza
2020-06-14 14:18:38 +02:00
committed by Dave Anderson
parent b87396b5d9
commit a8635784bc
3 changed files with 170 additions and 151 deletions

View File

@ -13,6 +13,7 @@ import (
type darwinRouter struct {
logf logger.Logf
tunname string
Router
}
func newUserspaceRouter(logf logger.Logf, _ *device.Device, tundev tun.Device) (Router, error) {
@ -20,26 +21,27 @@ func newUserspaceRouter(logf logger.Logf, _ *device.Device, tundev tun.Device) (
if err != nil {
return nil, err
}
userspaceRouter, err := newUserspaceBSDRouter(logf, nil, tundev)
if err != nil {
return nil, err
}
return &darwinRouter{
logf: logf,
tunname: tunname,
Router: userspaceRouter,
}, nil
}
func (r *darwinRouter) Up() error {
return nil
}
func (r *darwinRouter) Set(cfg *Config) error {
if SetRoutesFunc == nil {
return nil
}
if cfg == nil {
cfg = &shutdownConfig
}
return SetRoutesFunc(cfg)
}
func (r *darwinRouter) Close() error {
return nil
if SetRoutesFunc != nil {
return SetRoutesFunc(cfg)
}
return r.Router.Set(cfg)
}