aboutsummaryrefslogtreecommitdiffstats
path: root/src/conn.go
diff options
context:
space:
mode:
authorMathias Hall-Andersen <mathias@hall-andersen.dk>2017-10-16 21:33:47 +0200
committerMathias Hall-Andersen <mathias@hall-andersen.dk>2017-10-16 21:33:47 +0200
commite86d03dca23e5adcbd1c7bd30157bc7d19a932d7 (patch)
tree5792ecf8bad5a76c96033ceeef32a91df7d344b2 /src/conn.go
parentAdded new UDPBind interface (diff)
downloadwireguard-go-e86d03dca23e5adcbd1c7bd30157bc7d19a932d7.tar.xz
wireguard-go-e86d03dca23e5adcbd1c7bd30157bc7d19a932d7.zip
Initial implementation of source caching
Yet untested.
Diffstat (limited to 'src/conn.go')
-rw-r--r--src/conn.go21
1 files changed, 16 insertions, 5 deletions
diff --git a/src/conn.go b/src/conn.go
index db4020d..012e24e 100644
--- a/src/conn.go
+++ b/src/conn.go
@@ -34,15 +34,20 @@ func parseEndpoint(s string) (*net.UDPAddr, error) {
return addr, err
}
-func ListeningUpdate(device *Device) error {
+func UpdateUDPListener(device *Device) error {
+ device.mutex.Lock()
+ defer device.mutex.Unlock()
+
netc := &device.net
netc.mutex.Lock()
defer netc.mutex.Unlock()
// close existing sockets
- if err := device.net.bind.Close(); err != nil {
- return err
+ if netc.bind != nil {
+ if err := netc.bind.Close(); err != nil {
+ return err
+ }
}
// open new sockets
@@ -64,13 +69,19 @@ func ListeningUpdate(device *Device) error {
return err
}
- // TODO: clear endpoint (src) caches
+ // clear cached source addresses
+
+ for _, peer := range device.peers {
+ peer.mutex.Lock()
+ peer.endpoint.value.ClearSrc()
+ peer.mutex.Unlock()
+ }
}
return nil
}
-func ListeningClose(device *Device) error {
+func CloseUDPListener(device *Device) error {
netc := &device.net
netc.mutex.Lock()
defer netc.mutex.Unlock()