diff options
Diffstat (limited to 'service')
-rw-r--r-- | service/ifaceconfig.go | 15 | ||||
-rw-r--r-- | service/service_tunnel.go | 6 |
2 files changed, 12 insertions, 9 deletions
diff --git a/service/ifaceconfig.go b/service/ifaceconfig.go index edf13ab1..adb000ea 100644 --- a/service/ifaceconfig.go +++ b/service/ifaceconfig.go @@ -9,9 +9,9 @@ import ( "bytes" "encoding/binary" "errors" - "golang.org/x/sys/windows" "golang.zx2c4.com/winipcfg" "golang.zx2c4.com/wireguard/device" + "golang.zx2c4.com/wireguard/tun" "golang.zx2c4.com/wireguard/windows/conf" "net" "sort" @@ -59,8 +59,9 @@ func bindSocketRoute(family winipcfg.AddressFamily, device *device.Device, ourLu return nil } -func monitorDefaultRoutes(device *device.Device, autoMTU bool, guid *windows.GUID) (*winipcfg.RouteChangeCallback, error) { - ourLuid, err := winipcfg.InterfaceGuidToLuid(guid) +func monitorDefaultRoutes(device *device.Device, autoMTU bool, tun *tun.NativeTun) (*winipcfg.RouteChangeCallback, error) { + guid := tun.GUID() + ourLuid, err := winipcfg.InterfaceGuidToLuid(&guid) lastLuid4 := uint64(0) lastLuid6 := uint64(0) lastMtu := uint32(0) @@ -99,7 +100,6 @@ func monitorDefaultRoutes(device *device.Device, autoMTU bool, guid *windows.GUI } } if mtu > 0 && (lastMtu == 0 || lastMtu != mtu) { - //TODO: makesure wireguard-go knows about all MTU changes iface, err := winipcfg.GetIpInterface(ourLuid, winipcfg.AF_INET) if err != nil { return err @@ -112,6 +112,7 @@ func monitorDefaultRoutes(device *device.Device, autoMTU bool, guid *windows.GUI if err != nil { return err } + tun.ForceMtu(int(iface.NlMtu)) //TODO: it sort of breaks the model with v6 mtu and v4 mtu being different. Just set v4 one for now. iface, err = winipcfg.GetIpInterface(ourLuid, winipcfg.AF_INET6) if err != nil { return err @@ -143,8 +144,9 @@ func monitorDefaultRoutes(device *device.Device, autoMTU bool, guid *windows.GUI return cb, nil } -func configureInterface(conf *conf.Config, guid *windows.GUID) error { - iface, err := winipcfg.InterfaceFromGUID(guid) +func configureInterface(conf *conf.Config, tun *tun.NativeTun) error { + guid := tun.GUID() + iface, err := winipcfg.InterfaceFromGUID(&guid) if err != nil { return err } @@ -248,6 +250,7 @@ func configureInterface(conf *conf.Config, guid *windows.GUID) error { } if conf.Interface.Mtu > 0 { ipif.NlMtu = uint32(conf.Interface.Mtu) + tun.ForceMtu(int(ipif.NlMtu)) } err = ipif.Set() if err != nil { diff --git a/service/service_tunnel.go b/service/service_tunnel.go index bf80b8b8..2e615932 100644 --- a/service/service_tunnel.go +++ b/service/service_tunnel.go @@ -156,15 +156,15 @@ func (service *tunnelService) Execute(args []string, r <-chan svc.ChangeRequest, return } - guid := wintun.(*tun.NativeTun).GUID() + nativeTun := wintun.(*tun.NativeTun) - routeChangeCallback, err = monitorDefaultRoutes(dev, conf.Interface.Mtu == 0, &guid) + routeChangeCallback, err = monitorDefaultRoutes(dev, conf.Interface.Mtu == 0, nativeTun) if err != nil { serviceError = ErrorBindSocketsToDefaultRoutes return } - err = configureInterface(conf, &guid) + err = configureInterface(conf, nativeTun) if err != nil { serviceError = ErrorSetNetConfig return |