package utils import ( "net" "net/netip" "github.com/qdm12/gluetun/internal/configuration/settings" "github.com/qdm12/gluetun/internal/models" "github.com/qdm12/gluetun/internal/wireguard" ) func BuildWireguardSettings(connection models.Connection, userSettings settings.Wireguard, ipv6Supported bool) (settings wireguard.Settings) { settings.PrivateKey = *userSettings.PrivateKey settings.PublicKey = connection.PubKey settings.PreSharedKey = *userSettings.PreSharedKey settings.InterfaceName = userSettings.Interface settings.Implementation = userSettings.Implementation settings.IPv6 = &ipv6Supported const rulePriority = 101 // 100 is to receive external connections settings.RulePriority = rulePriority settings.Endpoint = new(net.UDPAddr) settings.Endpoint.IP = make(net.IP, len(connection.IP)) copy(settings.Endpoint.IP, connection.IP) settings.Endpoint.Port = int(connection.Port) settings.Addresses = make([]netip.Prefix, 0, len(userSettings.Addresses)) for _, address := range userSettings.Addresses { if !ipv6Supported && address.Addr().Is6() { continue } addressCopy := netip.PrefixFrom(address.Addr(), address.Bits()) settings.Addresses = append(settings.Addresses, addressCopy) } return settings }