From 198177d6e6b5f861f3be0f79cae1afd745dcf4cb Mon Sep 17 00:00:00 2001 From: "Jason A. Donenfeld" Date: Thu, 9 Sep 2021 22:59:42 +0200 Subject: tunnel: set address after routes so that loopback works Signed-off-by: Jason A. Donenfeld --- tunnel/addressconfig.go | 21 ++++++++++----------- 1 file changed, 10 insertions(+), 11 deletions(-) (limited to 'tunnel/addressconfig.go') diff --git a/tunnel/addressconfig.go b/tunnel/addressconfig.go index bde868bb..f0537fc7 100644 --- a/tunnel/addressconfig.go +++ b/tunnel/addressconfig.go @@ -100,15 +100,6 @@ func configureInterface(family winipcfg.AddressFamily, conf *conf.Config, luid w } } - err := luid.SetIPAddressesForFamily(family, addresses) - if err == windows.ERROR_OBJECT_ALREADY_EXISTS { - cleanupAddressesOnDisconnectedInterfaces(family, addresses) - err = luid.SetIPAddressesForFamily(family, addresses) - } - if err != nil { - return fmt.Errorf("unable to set ips %v: %w", addresses, err) - } - deduplicatedRoutes := make([]*winipcfg.RouteData, 0, len(routes)) sort.Slice(routes, func(i, j int) bool { if routes[i].Metric != routes[j].Metric { @@ -136,13 +127,21 @@ func configureInterface(family winipcfg.AddressFamily, conf *conf.Config, luid w } if !conf.Interface.TableOff { - err = luid.SetRoutesForFamily(family, deduplicatedRoutes) + err := luid.SetRoutesForFamily(family, deduplicatedRoutes) if err != nil { return fmt.Errorf("unable to set routes %v: %w", deduplicatedRoutes, err) - return err } } + err := luid.SetIPAddressesForFamily(family, addresses) + if err == windows.ERROR_OBJECT_ALREADY_EXISTS { + cleanupAddressesOnDisconnectedInterfaces(family, addresses) + err = luid.SetIPAddressesForFamily(family, addresses) + } + if err != nil { + return fmt.Errorf("unable to set ips %v: %w", addresses, err) + } + ipif, err := luid.IPInterface(family) if err != nil { return err -- cgit v1.2.3-59-g8ed1b