From f78e516284efcb2a335f0b5d91db795d551c506a Mon Sep 17 00:00:00 2001 From: Daniel Date: Sat, 22 Jan 2022 12:37:38 +0100 Subject: [PATCH] Fix network detection with multiple interfaces on same net --- netenv/addresses.go | 23 ++++++++++++----------- netenv/network-change.go | 8 ++++---- 2 files changed, 16 insertions(+), 15 deletions(-) diff --git a/netenv/addresses.go b/netenv/addresses.go index 206d174d..053b5cd0 100644 --- a/netenv/addresses.go +++ b/netenv/addresses.go @@ -76,14 +76,15 @@ func IsMyIP(ip net.IP) (yes bool, err error) { // Check if current data matches IP. // Matching on somewhat older data is not a problem, as these IPs would not // just randomly pop up somewhere else that fast. - mine, matched := checkIfMyIP(ip) - if matched { - return mine, nil - } - - // Check if the network changed. - if !myNetworksNetworkChangedFlag.IsSet() { - // Network did not change, return "no match". + mine, myNet := checkIfMyIP(ip) + switch { + case mine: + // IP matched. + return true, nil + case myNetworksNetworkChangedFlag.IsSet(): + // The network changed, so we need to refresh the data. + case myNet: + // IP is one of the networks and nothing changed, so this is not our IP. return false, nil } @@ -104,13 +105,13 @@ func IsMyIP(ip net.IP) (yes bool, err error) { } myNetworks = make([]*net.IPNet, 0, len(interfaceNetworks)) for _, ifNet := range interfaceNetworks { - net, ok := ifNet.(*net.IPNet) + ipNet, ok := ifNet.(*net.IPNet) if !ok { log.Warningf("netenv: interface network of unexpected type %T", ifNet) continue } - myNetworks = append(myNetworks, net) + myNetworks = append(myNetworks, ipNet) } // Reset error. @@ -126,7 +127,7 @@ func IsMyIP(ip net.IP) (yes bool, err error) { return false, nil } -func checkIfMyIP(ip net.IP) (mine bool, matched bool) { +func checkIfMyIP(ip net.IP) (mine bool, myNet bool) { // Check against assigned IPs. for _, myNet := range myNetworks { if ip.Equal(myNet.IP) { diff --git a/netenv/network-change.go b/netenv/network-change.go index 642b534d..721ffd36 100644 --- a/netenv/network-change.go +++ b/netenv/network-change.go @@ -40,8 +40,8 @@ serviceLoop: for { trigger := false - timeout := time.Minute - if GetOnlineStatus() != StatusOnline { + timeout := 15 * time.Second + if !Online() { timeout = time.Second } // wait for trigger @@ -62,7 +62,7 @@ serviceLoop: hasher := sha1.New() //nolint:gosec // not used for security interfaces, err := net.Interfaces() if err != nil { - log.Warningf("environment: failed to get interfaces: %s", err) + log.Warningf("netenv: failed to get interfaces: %s", err) continue } for _, iface := range interfaces { @@ -72,7 +72,7 @@ serviceLoop: // log.Tracef("adding: %s", iface.Flags.String()) addrs, err := iface.Addrs() if err != nil { - log.Warningf("environment: failed to get addrs from interface %s: %s", iface.Name, err) + log.Warningf("netenv: failed to get addrs from interface %s: %s", iface.Name, err) continue } for _, addr := range addrs {