diff options
Diffstat (limited to 'device/device.go')
-rw-r--r-- | device/device.go | 13 |
1 files changed, 3 insertions, 10 deletions
diff --git a/device/device.go b/device/device.go index 432549d..4b131a2 100644 --- a/device/device.go +++ b/device/device.go @@ -279,11 +279,12 @@ func (device *Device) SetPrivateKey(sk NoisePrivateKey) error { return nil } -func NewDevice(tunDevice tun.Device, logger *Logger) *Device { +func NewDevice(tunDevice tun.Device, bind conn.Bind, logger *Logger) *Device { device := new(Device) device.state.state = uint32(deviceStateDown) device.closed = make(chan struct{}) device.log = logger + device.net.bind = bind device.tun.device = tunDevice mtu, err := device.tun.device.MTU() if err != nil { @@ -302,11 +303,6 @@ func NewDevice(tunDevice tun.Device, logger *Logger) *Device { device.queue.encryption = newOutboundQueue() device.queue.decryption = newInboundQueue() - // prepare net - - device.net.port = 0 - device.net.bind = nil - // start workers cpus := runtime.NumCPU() @@ -414,7 +410,6 @@ func unsafeCloseBind(device *Device) error { } if netc.bind != nil { err = netc.bind.Close() - netc.bind = nil } netc.stopping.Wait() return err @@ -474,16 +469,14 @@ func (device *Device) BindUpdate() error { // bind to new port var err error netc := &device.net - netc.bind, netc.port, err = conn.CreateBind(netc.port) + netc.port, err = netc.bind.Open(netc.port) if err != nil { - netc.bind = nil netc.port = 0 return err } netc.netlinkCancel, err = device.startRouteListener(netc.bind) if err != nil { netc.bind.Close() - netc.bind = nil netc.port = 0 return err } |