diff --git a/client/iface/wgaddr/address.go b/client/iface/wgaddr/address.go index eae26ec85..a90484760 100644 --- a/client/iface/wgaddr/address.go +++ b/client/iface/wgaddr/address.go @@ -1,10 +1,7 @@ package wgaddr import ( - "fmt" "net/netip" - - "github.com/netbirdio/netbird/shared/netiputil" ) // Address WireGuard parsed address @@ -59,26 +56,6 @@ func (addr Address) IPv6Prefix() netip.Prefix { return netip.PrefixFrom(addr.IPv6, addr.IPv6Net.Bits()) } -// SetIPv6FromCompact decodes a compact prefix (5 or 17 bytes) and sets the IPv6 fields. -// Returns an error if the bytes are invalid. A nil or empty input is a no-op. -// -//nolint:recvcheck -func (addr *Address) SetIPv6FromCompact(raw []byte) error { - if len(raw) == 0 { - return nil - } - prefix, err := netiputil.DecodePrefix(raw) - if err != nil { - return fmt.Errorf("decode v6 overlay address: %w", err) - } - if !prefix.Addr().Is6() { - return fmt.Errorf("expected IPv6 address, got %s", prefix.Addr()) - } - addr.IPv6 = prefix.Addr() - addr.IPv6Net = prefix.Masked() - return nil -} - // ClearIPv6 removes the IPv6 overlay address, leaving only v4. // //nolint:recvcheck // ClearIPv6 is the only mutating method on this otherwise value-type struct. diff --git a/client/internal/connect.go b/client/internal/connect.go index 4b1448e21..f0836aa0a 100644 --- a/client/internal/connect.go +++ b/client/internal/connect.go @@ -40,6 +40,7 @@ import ( "github.com/netbirdio/netbird/client/system" mgm "github.com/netbirdio/netbird/shared/management/client" mgmProto "github.com/netbirdio/netbird/shared/management/proto" + "github.com/netbirdio/netbird/shared/netiputil" "github.com/netbirdio/netbird/shared/relay/auth/hmac" relayClient "github.com/netbirdio/netbird/shared/relay/client" signal "github.com/netbirdio/netbird/shared/signal/client" @@ -529,8 +530,16 @@ func createEngineConfig(key wgtypes.Key, config *profilemanager.Config, peerConf } if !config.DisableIPv6 { - if err := wgAddr.SetIPv6FromCompact(peerConfig.GetAddressV6()); err != nil { - log.Warn(err) + if raw := peerConfig.GetAddressV6(); len(raw) > 0 { + prefix, err := netiputil.DecodePrefix(raw) + if err != nil { + log.Warnf("decode v6 overlay address: %v", err) + } else if !prefix.Addr().Is6() { + log.Warnf("expected IPv6 overlay address, got %s", prefix.Addr()) + } else { + wgAddr.IPv6 = prefix.Addr() + wgAddr.IPv6Net = prefix.Masked() + } } }