Merge branch 'client-ipv6-iface' into client-ipv6-dns

# Conflicts:
#	client/iface/wgaddr/address.go
This commit is contained in:
Viktor Liu
2026-03-25 10:07:43 +01:00
2 changed files with 11 additions and 25 deletions

View File

@@ -1,10 +1,7 @@
package wgaddr package wgaddr
import ( import (
"fmt"
"net/netip" "net/netip"
"github.com/netbirdio/netbird/shared/netiputil"
) )
// Address WireGuard parsed address // Address WireGuard parsed address
@@ -59,26 +56,6 @@ func (addr Address) IPv6Prefix() netip.Prefix {
return netip.PrefixFrom(addr.IPv6, addr.IPv6Net.Bits()) 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. // ClearIPv6 removes the IPv6 overlay address, leaving only v4.
// //
//nolint:recvcheck // ClearIPv6 is the only mutating method on this otherwise value-type struct. //nolint:recvcheck // ClearIPv6 is the only mutating method on this otherwise value-type struct.

View File

@@ -40,6 +40,7 @@ import (
"github.com/netbirdio/netbird/client/system" "github.com/netbirdio/netbird/client/system"
mgm "github.com/netbirdio/netbird/shared/management/client" mgm "github.com/netbirdio/netbird/shared/management/client"
mgmProto "github.com/netbirdio/netbird/shared/management/proto" mgmProto "github.com/netbirdio/netbird/shared/management/proto"
"github.com/netbirdio/netbird/shared/netiputil"
"github.com/netbirdio/netbird/shared/relay/auth/hmac" "github.com/netbirdio/netbird/shared/relay/auth/hmac"
relayClient "github.com/netbirdio/netbird/shared/relay/client" relayClient "github.com/netbirdio/netbird/shared/relay/client"
signal "github.com/netbirdio/netbird/shared/signal/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 !config.DisableIPv6 {
if err := wgAddr.SetIPv6FromCompact(peerConfig.GetAddressV6()); err != nil { if raw := peerConfig.GetAddressV6(); len(raw) > 0 {
log.Warn(err) 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()
}
} }
} }