mirror of
https://github.com/netbirdio/netbird.git
synced 2026-04-16 07:16:38 +00:00
- Move `util/grpc` and `util/net` to `client` so `internal` packages can be accessed - Add methods to return the next best interface after the NetBird interface. - Use `IP_UNICAST_IF` sock opt to force the outgoing interface for the NetBird `net.Dialer` and `net.ListenerConfig` to avoid routing loops. The interface is picked by the new route lookup method. - Some refactoring to avoid import cycles - Old behavior is available through `NB_USE_LEGACY_ROUTING=true` env var
20 lines
381 B
Go
20 lines
381 B
Go
package util
|
|
|
|
import (
|
|
"fmt"
|
|
"net"
|
|
"net/netip"
|
|
)
|
|
|
|
// GetPrefixFromIP returns a netip.Prefix from a net.IP address.
|
|
func GetPrefixFromIP(ip net.IP) (netip.Prefix, error) {
|
|
addr, ok := netip.AddrFromSlice(ip)
|
|
if !ok {
|
|
return netip.Prefix{}, fmt.Errorf("parse IP address: %s", ip)
|
|
}
|
|
|
|
addr = addr.Unmap()
|
|
prefix := netip.PrefixFrom(addr, addr.BitLen())
|
|
return prefix, nil
|
|
}
|